Libreria di supporto per la progettazione Android per API 28 (P) non funzionante


106

Ho configurato con successo l'ambiente Android-P SDK. Quando tento di utilizzare la libreria di supporto del design Android, devo affrontare errori di compilazione del progetto. Le configurazioni del progetto sono:

IDE: 3.2 Canary 17 Target API: 28 Compile API: 28

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.app.navigationpoc"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.android.support:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

E l'errore di compilazione non riuscita è:

Fusione manifest non riuscita: attributo application @ appComponentFactory value = (androidx.core.app.CoreComponentFactory) da [androidx.core: core: 1.0.0-alpha3] AndroidManifest.xml: 22: 18-86 è presente anche su [com.android .support: support-compat: 28.0.0-alpha3] AndroidManifest.xml: 22: 18-91 valore = (android.support.v4.app.CoreComponentFactory). Suggerimento: aggiungi "tools: replace =" android: appComponentFactory "" all'elemento in AndroidManifest.xml: 6: 5-40: 19 per eseguire l'override.


Hai controllato questa risposta: stackoverflow.com/a/54825603/1318946
Pratik Butani

Risposte:


89

Puoi utilizzare la versione precedente dei pacchetti API degli artefatti o il nuovo Androidx, mai entrambi.

Se vuoi usare la versione precedente, sostituisci le tue dipendenze con

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
    implementation 'com.android.support.constraint:constraint-layout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.android.support:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

se vuoi usare Androidx:

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.google.android.material:material:1.0.0-alpha3'
    implementation 'androidx.cardview:cardview:1.0.0-alpha3'
}

2
Questa risposta dovrebbe essere quella accettata. Maggiori informazioni su medium.com/mindorks/…
Rawa

Perché è il comnon sostituisce in materialin implementation?
RoCk RoCk

58

Aggiornamento importante

Android non aggiornerà le librerie di supporto dopo 28.0.0.

Questa sarà l'ultima versione di funzionalità nella confezione android.support e gli sviluppatori sono incoraggiati a migrare ad AndroidX 1.0.0 .

Quindi usa la libreria AndroidX .

  • Non utilizzare sia il supporto che AndroidX nel progetto.
  • Il modulo o le dipendenze della libreria possono ancora avere librerie di supporto. Androidx Jetifier lo gestirà.
  • Usa la versione stabile di androidxo qualsiasi libreria, perché alpha, beta, rc possono avere bug che non vuoi spedire con la tua app.

Nel tuo caso

dependencies {
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.cardview:cardview:1.0.0'
}

è strano, il mio progetto era su P da molto tempo, ma ha iniziato a dare errori di libreria di supporto oggi quando ho compilato. C'è qualcosa che mi manca qui?
Talha

È un errore comune che tutti dobbiamo affrontare ora da un giorno, lo affronto ogni pochi giorni nel progetto in esecuzione. Basta non convalidare la cache e riavviare.
Khemraj

@Talha Prova dal menu Costruisci> Cancella progetto quindi Crea> Crea prima progetto, a volte questo è sufficiente, altrimenti invalida la cache e riavvia, poiché invalidare la cache e riavviare richiede molto tempo e cancella la cache per tutti i progetti.
John

43

Aggiungi questo:

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

alla tua applicazione manifest

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    tools:replace="android:appComponentFactory"
    android:appComponentFactory="whateverString">

spero che sia d'aiuto


Cosa hai dentro @string/action_settings?
Aliton Oliveira,

Ho avuto un problema: è stato trovato più di un file con il percorso indipendente dal sistema operativo 'META-INF / androidx.core_core.version
Aliton Oliveira

Errore dopo l'aggiunta di 2 righe: * What went wrong: Execution failed for task ':app:generateDebugBuildConfig'. > org.xml.sax.SAXParseException; systemId: file:/C:/D/code/js/emps_app/android/app/src/main/AndroidManifest.xml; lineNumber: 14; columnNumber: 52; The prefix "tools" for attribute "tools:replace" associated with an element type "application" is not bound.
user938363

2
Hai aggiunto xmlns: tools = " schemas.android.com/tools " nell'intestazione AndroidManifest.xml?
Carlos Santiago

2
Il manifest in android / src / debug / ha un'intestazione simile:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363


9

Google ha introdotto nuove dipendenze AndroidX . Devi migrare ad AndroidX, è semplice.

Ho sostituito tutte le dipendenze con le dipendenze di AndroidX

Vecchia dipendenza dal design

implementation 'com.android.support:design:28.0.0'

Nuova dipendenza dal design AndroidX

implementation 'com.google.android.material:material:1.0.0-rc01'

puoi trovare le dipendenze di AndroidX qui https://developer.android.com/jetpack/androidx/migrate


Opzione di migrazione AndroidX automatica (supportata su Android Studio 3.3+)

Migrare un progetto esistente per utilizzare AndroidX selezionando Refactor> Migrate to AndroidX dalla barra dei menu.


1
implementazione "com.google.android.material: material: 1.1.0-alpha05" questa è la nuova versione
Hitesh Tarbundiya

cosa inserire al posto di "import android.support.design.widget.TabLayout;" ?
temirbek

6

1.Aggiunti questi codici alla tua app / build.gradle:

configurations.all {
   resolutionStrategy.force 'com.android.support:support-v4:26.1.0' // the lib is old dependencies version;       
}

2.Versione SDK e strumenti modificata alla 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

2.Nel tuo file AndroidManifest.xml, dovresti aggiungere due righe:

<application
    android:name=".YourApplication"
    android:appComponentFactory="anystrings be placeholder"
    tools:replace="android:appComponentFactory"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">

Grazie per la risposta @Carlos Santiago: la libreria di supporto del design Android per API 28 (P) non funziona


Questa soluzione non è compatibile con il futuro, poiché dovresti utilizzare AndroidX ora. Le vecchie applicazioni pubblicate dovrebbero essere aggiornate ora. Se ci sono molte modifiche, tali modifiche dovrebbero essere comunque apportate.
Abhinav Saxena

@Abhinav Saxena Hai ragione, dovremmo aggiornare il nostro progetto a 28 meglio di quanto abbia risolto questo problema con la vecchia versione dell'SDK. :)
Codios

questa è la risposta accettata, dopo molti suggerimenti, niente mi ha aiutato, ma questo mi ha aiutato come configurations.all {}. Mi hai salvato la giornata, grazie.
Noor Hossain

5

La libreria di supporto alla progettazione per androidX è implementation 'com.google.android.material:material:1.0.0'


4

apri il file gradle.properties e aggiungi queste due righe:

android.useAndroidX = true
android.enableJetifier = true

pulire e costruire


1
useAndroidX comunica al compilatore all'utente androidx. file invece del vecchio pacchetto di supporto Android
Lena Bru

Questo indica a Studio 3.2 e versioni successive di migrare ad AndroidX. Tutte le librerie che sono state migrate ad AndroidX verranno corrette nelle dipendenze.
Abhinav Saxena

3

Nota: non dovresti utilizzare le dipendenze com.android.support e com.google.android.material nella tua app contemporaneamente.

Aggiungi componenti materiali per Android nel tuo file build.gradle (app)

dependencies {
    // ...
    implementation 'com.google.android.material:material:1.0.0-beta01'
    // ...
  }

Se la tua app attualmente dipende dalla libreria di supporto del progetto originale, puoi utilizzare l'opzione Refactor to AndroidX… fornita da Android Studio. In questo modo verranno aggiornate le dipendenze e il codice della tua app per utilizzare le librerie androidx e com.google.android.material appena pacchettizzate.

Se non desideri ancora passare ai nuovi pacchetti androidx e com.google.android.material, puoi utilizzare Material Components tramite la dipendenza com.android.support:design:28.0.0-alpha3.


3

Prima di tutto, dovresti guardare gradle.properties e questi valori devono essere veri . Se non puoi vederli devi scrivere.

android.useAndroidX=true
android.enableJetifier=true

Dopodiché puoi utilizzare le dipendenze di AndroidX nel tuo build.gradle (Modulo: app) . Inoltre, devi controllare compileSDKVersion e targetVersion . Dovrebbero essere almeno 28. Ad esempio, sto usando 29.

Quindi, un esempio di dipendenza Androidx:

implementation 'androidx.cardview:cardview:1.0.0'

Tuttavia fai attenzione perché tutto non inizia con androidx come la dipendenza da cardview . Ad esempio, la vecchia dipendenza dal design è:

implementation 'com.android.support:design:27.1.1'

Ma la nuova dipendenza dal design è:

implementation 'com.google.android.material:material:1.1.0'

Quindi, devi cercare e leggere attentamente. Codice felice.

@canerkaseler


2

Attraverso quella situazione sostituisco tutto androidx.*a appropiate package name.

cambia la tua linea

implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

per

implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

CELEBRE

  • rimuovere tools:replace="android:appComponentFactory"da AndroidManifest

0

Il codice seguente ha funzionato perfettamente con me:

dependencies {
    api 'com.android.support:design:28.0.0-alpha3'

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    testImplementation 'junit:junit:4.12'

    androidTestImplementation 'androidx.test:runner:1.1.0-alpha2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha2'
}

0

Prova questo:

implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'

0

La documentazione di Android è chiara su questo. Vai alla pagina sottostante. Sotto, ci sono due colonne con i nomi "OLD BUILD ARTIFACT" e "AndroidX build artifact"

https://developer.android.com/jetpack/androidx/migrate

Ora hai molte dipendenze in gradle: basta abbinare quelle con gli artefatti di build Androidx e sostituirle in gradle.

Non sarà abbastanza.

Vai alla tua MainActivity (ripeti questo per tutte le attività) e rimuovi la parola AppCompact Activity nell'istruzione "public class MainActivity extends AppCompatActivity" e scrivi di nuovo la stessa parola. Ma questa volta la libreria androidx viene importata. Fino ad ora il file di supporto appcompact è stato importato e usato (anche rimuovere l'istruzione di importazione appcompact).

Inoltre, vai al tuo file di layout. Supponiamo di avere un layout di vincolo, quindi puoi notare che il layout di vincolo della prima riga nel file xml ha qualcosa di correlato ad appcompact, quindi eliminalo e scrivi di nuovo layout di vincolo, ma ora viene aggiunto il layout di vincolo relativo ad androidx.

ripetere questo per tante attività e tanti file di layout xml ..

Ma non preoccuparti: Android Studio mostra tutti questi possibili errori durante la compilazione.


0

Ho avuto un problema simile. Aggiunto in build.gradle e ha funzionato per me.

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

se vuoi risolvere questo problema senza migrare ad AndroidX (non lo consiglio)

questo problema di fusione manifest è correlato a una delle tue dipendenze utilizzando androidX.

è necessario diminuire la versione di rilascio di questa dipendenza. per il mio caso:

Stavo usando Google o Firebase

api 'com.google.android.gms:play-services-base:17.1.0'

Devo diminuirlo 15.0.1 per usarlo nella libreria di supporto.


0

L'aggiunta di androidTestImplementation 'androidx.test:runner:1.2.0-alpha05'lavori per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.