Fusione di materiale Android e appcompat manifest non riuscita


223

Ho il voto successivo

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    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.google.android.material:material:1.0.0-rc01'
}

Ma quando voglio creare un'app ottengo il prossimo registro:

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0-alpha3] AndroidManifest.xml:22:18-91
    is also present at [androidx.core:core:1.0.0-alpha3] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
    Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-19:19 to override.

Okey! Vai a manifest e fallo:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="ru.chopcode.myapplication">

    <application
        tools:replace="android:appComponentFactory"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    </application>

</manifest>

Quindi ottengo questo errore nel mio Logcat:

Manifest merger failed with multiple errors, see logs that I have Linked with it

2
Prova a rimuovere queste righe: implementazione 'com.android.support:appcompat-v7:28.0.0-rc01' e implementazione 'com.android.support.constraint: layout di vincoli: 1.1.2'
vcapra1

2
Penso che i pacchetti di materiali siano tutti raggruppati in android-design, dai un'occhiata ...
Marcos Vasconcelos

Ho bisogno di questo: material.io/design/components/app-bars-bottom.html . Questo è nel design di Android?
Евгений Усов

È possibile controllare anche questo: stackoverflow.com/a/54825603/1318946
Pratik Butani

Il nuovo studio Android ha funzionalità per migrare la tua applicazione su AndroidX senza problemi. segui il link qui sotto. github.com/material-components/material-components-android/…
Ravi Jaggarapu

Risposte:


15

Basta cambiare "rc01" nella prima e nell'ultima riga all'interno delle dipendenze in "alpha1" Questo funziona per me


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

40
Non ho scritto "rc01" nell'implementazione "com.android.support:appcompat-v7:28.0.0". Ancora riscontrato il problema. Per favore, suggerisci qualche soluzione.
avani kothari,

10
Questa risposta avrebbe dovuto essere un commento alla domanda.
Ananth,

459

Ho avuto un problema simile. Aggiunte due righe nel gradle.propertiesfile:

android.useAndroidX=true
android.enableJetifier=true

Queste due righe hanno risolto automaticamente i miei conflitti di dipendenza tra i file di Google e le dipendenze di terze parti. Ecco il link da seguire: https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project


6
android.useAndroidX = true
Frank Fang,

6
dopo aver aggiunto questo errore si verifica `` * Cosa è andato storto: esecuzione non riuscita per l'attività ': reazioni-nativa-telecamera: compileGeneralDebugJavaWithJavac'. > Compilazione non riuscita; vedere l'output dell'errore del compilatore per i dettagli. * Prova: esegui con l'opzione --stacktrace per ottenere la traccia dello stack. Esegui con l'opzione --info o --debug per ottenere più output del registro. Esegui con --scan per ottenere informazioni complete. ``
Dileepa Chandima,

@PrinceHamza controlla che abbiamo trovato una soluzione per questo github.com/facebook/react-native/issues/…
Dileepa Chandima,

9
Questa dovrebbe essere la risposta accettata. Questo ha risolto il problema.
VishalKale,

2
"Ma non vedo un 'file gradles.properties'"!. Sì, quindi nella cartella principale dell'app nel progetto studio, crea quel file (senza estensione) e aggiunge quelle righe.
user1010160

145

Ho riscontrato lo stesso errore quando provo ad aggiungere la libreria Kotlin-KTX al mio progetto.

Provo a migrare AndroidX e il problema è stato risolto!

Rifattore / Migrazione su AndroidX


1
Funziona, ma alcune delle dichiarazioni di importazione che genera utilizzano nomi di pacchetti obsoleti. Ho dovuto risolverne alcuni, semplicemente usando qualsiasi androidx.*nome di pacchetto suggerito dall'IDE come soluzione.
Andrew Koster,

1
@Mete questa risposta mi ha salvato la vita. Posso offrirti una birra?
girish_vr

@girish_vr Grazie per l'offerta :) Sono contento che abbia funzionato, è abbastanza per farmi sorridere.
Mete

Ho riscontrato questo problema perché stavo estraendo l'ultima versione della libreria "support-v4" nel mio file build.gradle ... non è una buona pratica. Se avessi fatto riferimento a una versione specifica della libreria nel mio file Gradle, non avrei mai incontrato questo problema in primo luogo. Inoltre, dopo aver studiato un po 'di più, ho potuto vedere che Google stava raccomandando di passare alla libreria AndroidX; così, ho deciso di mordere il proiettile. Fortunatamente, tutti i problemi si sono risolti dopo l'aggiornamento ... il disastro è stato evitato e LEZIONE IMPARATA sui riferimenti graduali.
BluJ IT

104

Motivo del fallimento

Stai utilizzando la libreria dei materiali che fa parte di AndroidX . Se non sei a conoscenza di AndroidX, passa attraverso questa risposta .

Un'app dovrebbe utilizzare AndroidX o le librerie di supporto Android precedenti. Ecco perché hai affrontato questo problema.

Per esempio -

Nel tuo livello, stai usando

  • com.android.support:appcompat-v7 (Parte della vecchia libreria di supporto Android)
  • com.google.android.material:material(Parte di AndroidX) (artefatto build AndroidX di com.android.support:design)

Soluzione

Quindi la soluzione è utilizzare AndroidX o la vecchia libreria di supporto. Consiglio di usare AndroidX, perché Android non aggiorna le librerie di supporto dopo la versione 28.0.0. Vedi le note di rilascio della Libreria di supporto.

Basta migrare su AndroidX. Ecco la mia risposta dettagliata per migrare su AndroidX. Sto mettendo qui i passi necessari da quella risposta.

Prima di migrare, si consiglia vivamente di eseguire il backup del progetto.

Progetto esistente

  • Android Studio> Menu Refactor> Migra su AndroidX ...
  • Analizzerà e aprirà la finestra del rifrattore in basso. Accetta le modifiche da apportare.

Immagine

Nuovo progetto

Metti queste bandiere nel tuo gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Controlla i mapping di @ Library per un pacchetto AndroidX uguale .

Controlla sulla pagina ufficiale di Migrate ad AndroidX

Che cos'è Jetifier?


Aveva ancora un errore in seguito, ma questa risposta ha aiutato: stackoverflow.com/a/49525685/1972372
Big_Chair

3
Ricorda di fare clic su "Esegui refactoring" in basso a sinistra dopo aver fatto clic su "Migrate to AndroidX"
SupaHam

88

Nel mio caso, questo funziona perfettamente .. Ho aggiunto sotto due codici di riga all'interno del file manifest

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

Il merito va a questa risposta .

Esempio di file manifest


4
Non so se avrò un problema nella mia app in seguito, ma ha funzionato!
Aliton Oliveira,

4
Sì, ho riscontrato
Aliton Oliveira,

3
quindi viene visualizzato un errore che indica che gli strumenti non sono associati al tag dell'applicazione.
Travis Delly,

Puoi pubblicare logcat completo?
Muhaiminur Rahman,


29

Soluzioni semplici: migra in AndroidX

nel gradle.properties, basta aggiungere sotto due script

android.useAndroidX=true
android.enableJetifier=true

Qual è stato il motivo ↓

Tutti i pacchetti in AndroidX vivono in uno spazio dei nomi coerente a partire dalla stringa androidx. I pacchetti della libreria di supporto sono stati mappati nei corrispondenti pacchetti androidx. *. Per una mappatura completa di tutte le vecchie classi e per creare manufatti con quelli nuovi, consultare la pagina Rifattorizzazione pacchetti.

Si prega di consultare la pagina di refactoring del pacchetto


Non esiste un file gradle.properties nel mio progetto. (È stato originariamente creato in eclissi anni fa e successivamente trasferito in Android Studio)
Sujith Manjavana,

Oh ... Non ho affrontato una situazione del genere, ho trovato sotto il thread che potrebbe aiutarti a stackoverflow.com/a/37389861/6917362 Prova e fai un commento per favore
EJ Chathuranga,

Basta creare quel file vicino a build.gradle principale se non esiste e sincronizzare il progetto.
Fedir Tsapana,

13

Rimuovi la dipendenza android.support

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

Citando dalle linee guida sui materiali

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

Nota: non utilizzare contemporaneamente com.android.support e com.google.android.dependencies nella tua app.

Basta rimuovere questa dipendenza funziona bene

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

Ecco un esempio completo di dipendenze

    dependencies {
       implementation fileTree(dir: 'libs', include: ['*.jar'])
       implementation 'com.google.android.material:material:1.0.0-beta01'
       implementation 'com.android.support.constraint:constraint-layout:1.1.2'
       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'
   }

1
Questa è la risposta più accurata.
Fran Marzoa,

1
@FranMarzoa Non lo è. Cosa succede quando la libreria compat viene importata da un'altra dipendenza?
m0skit0,

1
@ m0skit0 che dovresti pubblicare qui una domanda diversa, immagino ...;)
Fran Marzoa,


12

Vedi questa immagine e aggiungi questa linea nel tuo AndroidManifest.xml Android

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

inserisci qui la descrizione dell'immagine


qualunque stringa significhi?
Kishore Kumar,

@KishoreKumar puoi anche aggiungere qualsiasi nome di stringa come appName.
Prashant Arvind il

per essere precisi, whateverString dovrebbe essere un nome di classe completo che estende AppComponentFactory. ad esempio, una classe personalizzata definita com.xxx.MyFactory estende AppComponentFactory
jiashie il

11

Aggiungi queste righe all'interno nel file AndroidManifest.xml.

tools:replace="android:appComponentFactory"

android:appComponentFactory="whateverString"

1
gli strumenti stanno diventando rossi quando lo si aggiunge. ci sono altre cose da aggiungere?
natsumiyu,

Non c'è altro da aggiungere. Uno dei motivi forse è che la tua versione graduale non corrisponde. Puoi mostrare il tuo codice file AndroidManifest.xml?
Ajay,

Ho provato a migrare su androidx e continuo ad avere esecuzioni non riuscite per l'attività ': app: compileDebugJavaWithJavac'. > Compilazione non riuscita; vedere l'output dell'errore del compilatore per i dettagli.
natsumiyu,

Ecco il mio manifest android <applicazione android: allowBackup = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / app_name" android: roundIcon = "@ mipmap / ic_launcher" android: useCleartextTraffic = "true "android: supportsRtl =" true "android: theme =" @ style / AppTheme "strumenti: sostituisci =" android: appComponentFactory "android: appComponentFactory =" @ string / texthere ">
natsumiyu

1
Ottima soluzione, mi ha salvato il tempo.
Umair Iqbal

9

aggiungi queste due righe di codice al tuo file manifest

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

8

Segui questi passi:

  • Vai a Refactor e fai clic su Migra su AndroidX
  • Fai clic su Rifattore

Questo non farà l'intero refactor :(
Mohsin,


6

Questo problema si è verificato principalmente per le vecchie dipendenze .

Ci sono 2 soluzioni:

Il primo:

Aggiorna tutto old dependenciese ClassPaths dai Project level gradlefile.

classpath 'com.android.tools.build:gradle:3.3.1'
classpath 'com.google.gms:google-services:4.2.0'

Il secondo:

Il tuo progetto Migrate to AndroidX

Dal menu di Android Studio -> Refanctor -> Migrate to AndroidX

Grazie, fammi sapere se qualcuno può aiutare da questa risposta.


6

Finalmente ho trovato una soluzione semplice e veloce aggiungendo due righe nel android/build.gradlefile.

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

Si prega di seguire questo 100% corretto.


1
Dove lo aggiunge?
Travis Delly,

Aggiungi questo nel file android / build.gradle
Manoj Alwis,

2
@ManojAlwis in quale sezione del file build.gradle dobbiamo inserire questo?
Keval Langalia,

@KevalLangalia, aggiungi queste due righe al file android -> build.gradle. ad esempio: buildscript {ext {buildToolsVersion = "28.0.3" minSdkVersion = 19 compileSdkVersion = 28 targetSdkVersion = 28 supportLibVersion = "28.0.0" googlePlayServicesVersion = "16. +" firebaseVersion = "17.3.4"}
Manoj Alwis

1
davvero utile ... Grazie
Vasudev Vyas,

6

È tutto sulla compatibilità delle versioni della libreria

Stavo affrontando questo strano bug un paio di 2 ore. Ho risolto questo errore eseguendo questi passaggi

impegna le tue dipendenze build.gradle in

  implementation 'com.google.android.gms:play-services-maps:17.0.0'

per

  implementation 'com.google.android.gms:play-services-maps:15.0.0'

1
Onestamente ho fatto lo stesso e ha funzionato, quindi immagino che sia tutto sulla compatibilità delle versioni della libreria dopo aver unito il processo
Milos,

6

Solo se non vuoi usare androidx

Quindi, nel mio caso, sto usando una libreria che utilizzava androidx ma non sto usando androidx, quindi quando ho declassato quella versione della libreria il problema è stato risolto.

Nel mio caso:

implementation 'com.github.turing-tech:MaterialScrollBar:13.+'

la suddetta libreria presenta il problema 13. + otterrà automaticamente una nuova versione della libreria che usa androidx. Quindi ho declassato la versione della libreria a:

implementation 'com.github.turing-tech:MaterialScrollBar:13.2.5'

E il problema è stato risolto.


6
  1. Vai su Refactor-> Migrate-> Migrate to Android X.

  2. Aggiungi questo al tuo gradle.propertiesfile:

    android.enableJetifier=true
    android.useAndroidX=true

Ed esegui la sincronizzazione.


Puoi per favore spiegare, qual è la tua situazione adesso?
Girish BR

Il progetto che ho ereditato ha mezzo decennio. Ho cercato di implementare nuove analisi Fabric / Firebase che Google sta spingendo. E quella nuova libreria sta usando le librerie di compatibilità androidx e il mio progetto usa AppCompat. Ora, ho dovuto fare i conti con tonnellate di aggiornamenti e cose. Mi sono fermato, e poi ho provato varie cose, compresi questi comandi, e ne ho bisogno a causa delle nuove cose di Firebase. Dopo averlo attivato, ho avuto tonnellate di errori del compilatore. Risolto il problema, ma ora ho errori che provengono da file xml ui .. Quindi dovrò abbandonare tutto e provare con le versioni precedenti.
Martin Berger,

Dopo un'altra ora di correzione manuale degli spazi dei nomi delle classi su androidx, sembra funzionare ora. Il problema è che il compilatore non è riuscito a rilevare in XML che ad esempio: "android.support.v7.widget.AppCompatSpinner" deve essere "androidx.appcompat.widget.AppCompatSpinner". Questo documento è stato utile: developer.android.com/jetpack/androidx/migrate
Martin Berger

Spero che funzioni ora, fammi sapere se qualcosa va storto. Ci lavoreremo su!
Girish BR

4

Crea un nuovo progetto e confronta i tuoi file build.gradle e li ha sostituiti tutti

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

e altre dipendenze con le stesse di un nuovo progetto qualcosa del genere

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

implementation 'androidx.constraintlayout:constraintlayout:1.1.2'

implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-alpha1'

androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'

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

implementation 'androidx.core:core-ktx:1.0.0-alpha3'

E poi riparate le importazioni per usare androidx nei file kotlin.


Perché o per qualche motivo, non voglio usare androidx.
scuotere il

4

Tutto quello che ho fatto è stato andare all'opzione "Refactor" nel menu in alto.

Quindi selezionare "Esegui la migrazione ad AndroidX"

Accetta per salvare il progetto come file zip.

Aggiorna Android Studio e Gradle per assicurarti che non si verifichino problemi.


4

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

configurations.all {
   resolutionStrategy.force 'com.android.support:support-v4:28.0.0' 
   // the above lib may be old dependencies version       
    }

2.Sdk modificato e versione degli strumenti a 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

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

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

O semplicemente

  • Vai a Refactor (Studio -> Menu -> Refactor)
  • Fai clic su Migra su AndroidX. sta funzionando
  • sta funzionando.

2
  • Vai a Refactor ( Immagine )
  • Fai clic su Migra su AndroidX. sta funzionando
  • sta funzionando.

1
Un link a una soluzione è il benvenuto, ma assicurati che la tua risposta sia utile senza di essa: aggiungi un contesto attorno al link in modo che i tuoi colleghi utenti abbiano qualche idea di cosa sia e perché sia ​​lì, quindi cita la parte più pertinente della pagina che ' re collegamento a nel caso in cui la pagina di destinazione non sia disponibile. Le risposte che sono poco più di un collegamento possono essere eliminate.
Matteo,

2

Se non intendi eseguire la migrazione ad AndroidX, procedi nel seguente modo

  1. Nell'app Gradlew di tipo terminale: dipendenze
  2. Dopo che le dipendenze sono visualizzate nella finestra premi Ctrl + f e digita androidX
  3. Troverai tutte le dipendenze che stanno usando androidx lib internamente, potresti dover effettuare il downgrade o utilizzare un'alternativa per assicurarti che non stia più usando le librerie androidX internamente.

1

Ho avuto lo stesso problema per tre giorni.

È come se Android volesse che usassimo Kotlin o AndroidX, stanno eliminando Android.

Ma è così che l'ho risolto.

  • Ho migrato il mio progetto su AndroidX. Ciò non comporta errori relativi a questo problema in questione, aggiorna i file rispettivamente. Nessun metodo, classe o nome di variabile deve essere modificato nella tua applicazione.

NB: Devi usare le ultime Librerie (file build.grudle) nell'ultima versione stabile di Android Studio 3.4.1


1

Non so che questa sia la risposta corretta o meno, ma ha funzionato per me

Aumenta la proprietà wrapper griglia

distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

e costruisci griglia per

    classpath 'com.android.tools.build:gradle:3.4.2'

sta mostrando errore a causa della versione.


Penso che la stringa dovrebbe essere androidx.core.app.AppComponentFactory, alcune stringhe arbitrarie causeranno errori casuali a volte.,
seyedrezafar

0

Prima di tutto assicurati di aggiungere questa riga nel tag manifest

xmlns:tools="https://schemas.android.com/tools"

Quindi aggiungi strumenti sostituisci quello suggerito in Android Studio


0

Cambia proguardFile in build.gradle (Modulo: app) nel modo seguente

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

invece di

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

Questo ha funzionato per me


0

Per risolvere questo problema, consiglierei di definire esplicitamente la versione per le variabili ext nel android/build.gradleprogetto root

ext {
    googlePlayServicesVersion = "16.1.0" // default: "+"
    firebaseVersion = "15.0.2" // default: "+"

    // Other settings
    compileSdkVersion = <Your compile SDK version> // default: 23
    buildToolsVersion = "<Your build tools version>" // default: "23.0.1"
    targetSdkVersion = <Your target SDK version> // default: 23
    supportLibVersion = "<Your support lib version>" // default: 23.1.1
}

riferimento https://github.com/zo0r/react-native-push-notification/issues/1109#issuecomment-506414941


0

Sto anche affrontando lo stesso problema, per il tuo studio Android, devi solo cambiare la versione 3.3.2 del plug-in Android Gradle e la versione Gradle è 5.1.1


0

nel mio caso sto aggiungendo nel file manifest `

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

tag applicazione ovviamente, funzionerà

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.