Échec de la fusion du matériel Android et du manifeste compatible avec les applications


223

J'ai la prochaine année

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'
}

Mais lorsque je veux créer une application, j'obtiens le prochain journal:

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.

Bien! Allez à manifester et faites-le:

<?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>

Ensuite, je reçois cette erreur dans mon Logcat:

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

2
Essayez de supprimer ces lignes: implémentation 'com.android.support:appcompat-v7:28.0.0-rc01' et implémentation 'com.android.support.constraint: constraint-layout: 1.1.2'
vcapra1

2
Je pense que les paquets de matériaux sont tous regroupés dans Android-design, vérifiez-le ...
Marcos Vasconcelos

J'en ai besoin: material.io/design/components/app-bars-bottom.html . C'est dans la conception android?
Евгений Усов

Vous pouvez également vérifier celui-ci: stackoverflow.com/a/54825603/1318946
Pratik Butani

Le nouveau studio Android dispose d'une fonction pour migrer votre application vers androidX en douceur. suivez le lien ci-dessous. github.com/material-components/material-components-android/…
Ravi Jaggarapu

Réponses:


15

Changez simplement "rc01" dans la première et la dernière ligne des dépendances en "alpha1" Cela fonctionne pour moi


Plusieurs fichiers ont été trouvés avec le chemin indépendant du système d'exploitation 'META-INF / androidx.core_core.version
Aliton Oliveira

40
Je n'ai pas "rc01" écrit dans l'implémentation 'com.android.support:appcompat-v7:28.0.0'. Toujours le problème. Veuillez suggérer une solution.
avani kothari

10
Cette réponse aurait dû être un commentaire à la question.
Ananth

459

J'ai eu un problème similaire. Ajout de deux lignes dans le gradle.propertiesfichier:

android.useAndroidX=true
android.enableJetifier=true

Ces deux lignes ont automatiquement résolu mes conflits de dépendance entre les fichiers de Google et les dépendances tierces. Voici le lien à suivre: https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project


6
android.useAndroidX = true
Frank Fang

6
après l'ajout de cette erreur suivante se produit `` * Ce qui s'est mal passé: l'exécution a échoué pour la tâche ': react-native-camera: compileGeneralDebugJavaWithJavac'. > La compilation a échoué; voir la sortie d'erreur du compilateur pour plus de détails. * Essayez: exécutez avec l'option --stacktrace pour obtenir la trace de la pile. Exécutez avec l'option --info ou --debug pour obtenir plus de sortie de journal. Exécutez avec --scan pour obtenir des informations complètes. ``
Dileepa Chandima

@PrinceHamza vérifiez cela, nous avons trouvé une solution pour ce github.com/facebook/react-native/issues/…
Dileepa Chandima

9
Ce devrait être la réponse acceptée. Cela a résolu le problème.
VishalKale

2
"Mais je ne vois pas de 'fichier gradles.properties'"!. Oui, donc dans le dossier racine de l'application dans le projet studio, créez ce fichier (sans extension) et ajoutez ces lignes.
user1010160

145

J'ai rencontré la même erreur lorsque j'essaie d'ajouter la bibliothèque Kotlin-KTX à mon projet.

J'essaie de migrer vers AndroidX et le problème est résolu!

Refactoriser / Migrer vers AndroidX


1
Cela fonctionne, mais certaines des instructions d'importation qu'il génère utilisent des noms de package obsolètes. J'ai dû en corriger un tas, simplement en utilisant le androidx.*nom de package que l'IDE a suggéré comme correctif.
Andrew Koster

1
@Mete cette réponse m'a sauvé la vie. Puis-je vous acheter une bière?
girish_vr

@girish_vr Merci pour l'offre :) Je suis content que ça ait marché, ça suffit pour me faire sourire.
Mete

J'ai rencontré ce problème parce que je tirais la dernière version de la bibliothèque "support-v4" dans mon fichier build.gradle ... ce n'est pas une bonne pratique. Si j'avais référencé une version spécifique de la bibliothèque dans mon fichier Gradle, je n'aurais jamais rencontré ce problème en premier lieu. De plus, après avoir fait un peu plus de recherches, j'ai pu voir que Google recommandait de passer à la bibliothèque AndroidX; alors j'ai décidé de mordre la balle. Heureusement, tous les problèmes ont été résolus après la mise à niveau ... catastrophe évitée et LEÇON APPRISE sur les références gradle.
BluJ IT

104

Raison de l'échec

Vous utilisez la bibliothèque de matériaux qui fait partie d' AndroidX . Si vous n'êtes pas au courant d'AndroidX, veuillez suivre cette réponse .

Une application doit utiliser AndroidX ou les anciennes bibliothèques de support Android. C'est pourquoi vous avez fait face à ce problème.

Par exemple -

Dans votre gradle, vous utilisez

  • com.android.support:appcompat-v7 (Partie de l'ancienne --Android Support Library--)
  • com.google.android.material:material(Partie d'AndroidX) (artefact de construction AndroidX de com.android.support:design)

Solution

La solution consiste donc à utiliser AndroidX ou l'ancienne bibliothèque de support. Je recommande d'utiliser AndroidX, car Android ne mettra pas à jour les bibliothèques de support après la version 28.0.0. Voir les notes de publication de la bibliothèque de support.

Migrez simplement vers AndroidX. Voici ma réponse détaillée pour migrer vers AndroidX. Je mets ici les étapes nécessaires de cette réponse.

Avant de migrer, il est fortement recommandé de sauvegarder votre projet.

Projet existant

  • Android Studio> Menu Refactor> Migrer vers AndroidX ...
  • Il analysera et ouvrira la fenêtre du réfracteur en bas. Acceptez les modifications à effectuer.

image

Nouveau projet

Mettez ces drapeaux dans votre gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Vérifiez les mappages @ Library pour un package AndroidX égal .

Consultez la page officielle de Migrate to AndroidX

Qu'est-ce que Jetifier?


Il y avait toujours une erreur après, mais cette réponse a aidé: stackoverflow.com/a/49525685/1972372
Big_Chair

3
N'oubliez pas de cliquer sur "Do refactor" en bas à gauche après avoir cliqué sur "Migrer vers AndroidX"
SupaHam

88

Dans mon cas, cela fonctionne parfaitement .. J'ai ajouté ci-dessous deux codes de ligne dans le fichier manifeste

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

Le mérite revient à cette réponse .

Exemple de fichier manifeste


4
Je ne sais pas si j'aurai un problème dans mon application plus tard, mais ça a marché!
Aliton Oliveira

4
Oui, j'ai eu un problème: plusieurs fichiers ont été trouvés avec le chemin indépendant du système d'exploitation 'META-INF / androidx.core_core.version
Aliton Oliveira

3
alors je reçois une erreur indiquant que les outils ne sont pas liés à la balise d'application.
Travis Delly

Pouvez-vous publier un logcat complet?
Muhaiminur Rahman


29

Solutions simples - migrez vers AndroidX

dans le gradle.properties, ajoutez simplement ci-dessous deux scripts

android.useAndroidX=true
android.enableJetifier=true

Quelle était la raison ↓

Tous les packages dans AndroidX vivent dans un espace de noms cohérent commençant par la chaîne androidx. Les packages de la bibliothèque de support ont été mappés dans les packages androidx. * Correspondants. Pour un mappage complet de toutes les anciennes classes et de la génération des artefacts vers les nouvelles, consultez la page Refactorisation de packages.

Veuillez consulter la page Refactorisation des packages


Il n'y a pas un tel fichier gradle.properties dans mon projet. (Il a été créé à l'origine il y a des années d'éclipse et a ensuite été déplacé vers le studio Android)
Sujith Manjavana

Oh ... je n'ai pas fait face à une telle situation, j'ai trouvé ci-dessous le fil qui pourrait vous aider stackoverflow.com/a/37389861/6917362 Essayez de faire un commentaire s'il vous plaît
EJ Chathuranga

Créez simplement ce fichier près de build.gradle principal s'il n'existe pas et synchronisez le projet.
Fedir Tsapana

13

Il suffit de supprimer la dépendance android.support

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

Citation des directives matérielles

Si vous ne souhaitez pas encore passer aux nouveaux packages androidx et com.google.android.material, vous pouvez utiliser les composants de matériau via la dépendance com.android.support:design:28.0.0-alpha3.

Remarque: Vous ne devez pas utiliser les com.android.support et com.google.android.dependencies dans votre application en même temps.

La suppression de cette dépendance fonctionne très bien

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

Voici un exemple complet de dépendances

    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
C'est la réponse la plus précise.
Fran Marzoa

1
@FranMarzoa Ce n'est pas le cas. Que se passe-t-il lorsque la bibliothèque compat est importée d'une autre dépendance?
m0skit0

1
@ m0skit0 que vous auriez à poster une question différente ici, je suppose ...;)
Fran Marzoa


12

Voir cette image et ajouter cette ligne dans votre Android AndroidManifest.xml

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

entrez la description de l'image ici


quelle chaîne signifie?
Kishore Kumar

@KishoreKumar vous pouvez également ajouter n'importe quel nom de chaîne comme appName.
Prashant Arvind

pour être précis, quelle que soit la chaîne, ce doit être un nom de classe complet qui étend AppComponentFactory. par exemple, une classe définie personnalisée com.xxx.MyFactory étend AppComponentFactory
jiashie

11

Ajoutez ces lignes à l'intérieur du fichier AndroidManifest.xml.

tools:replace="android:appComponentFactory"

android:appComponentFactory="whateverString"

1
les outils deviennent rouges lors de leur ajout. faut-il ajouter d'autres choses?
natsumiyu

Rien de plus à ajouter. Une des raisons est peut-être que la version de votre gradle n'est pas compatible. Pouvez-vous afficher votre code de fichier AndroidManifest.xml?
Ajay

J'ai essayé de migrer vers androidx et je continue d'échouer à l'exécution pour la tâche ': app: compileDebugJavaWithJavac'. > La compilation a échoué; voir la sortie d'erreur du compilateur pour plus de détails.
natsumiyu

Voici mon manifeste Android <application android: allowBackup = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / app_name" android: roundIcon = "@ mipmap / ic_launcher" android: usesCleartextTraffic = "true "android: supportsRtl =" true "android: theme =" @ style / AppTheme "tools: replace =" android: appComponentFactory "android: appComponentFactory =" @ string / texthere ">
natsumiyu

1
Grande solution, économisé mon temps.
Umair Iqbal

9

ajoutez simplement ces deux lignes de code à votre fichier manifeste

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

8

Suivez ces étapes:

  • Goto Refactor and Click Migrate to AndroidX
  • Cliquez sur Refactoriser

Cela ne fera pas le refactor entier :(
Mohsin


6

Ce problème s'est principalement produit pour les anciennes dépendances .

Il y a 2 solutions:

Premier:

Mettez à jour tous old dependencieset ClassPaths à partir de Project level gradlefichiers.

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

Deuxième:

Votre projet Migrate to AndroidX

Depuis le menu Android Studio -> Refanctor -> Migrate to AndroidX

Merci, faites-moi savoir si quelqu'un aide à cette réponse.


6

Enfin trouvé une solution simple et rapide en ajoutant deux lignes dans le android/build.gradlefichier.

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

Veuillez suivre ce 100% correct.


1
Où ajoutez-vous cela?
Travis Delly

Ajoutez ceci dans le fichier android / build.gradle
Manoj Alwis

2
@ManojAlwis dans quelle section du fichier build.gradle nous devons mettre cela?
Keval Langalia

@KevalLangalia, ajoutez simplement ces deux lignes au fichier android -> build.gradle. par exemple: 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
vraiment utile ... Merci
Vasudev Vyas

6

Tout est dans la compatibilité des versions de bibliothèque

J'étais confronté à cet étrange couple d'insectes de 2 heures. J'ai résolu cette erreur en procédant comme suit

suspendre vos dépendances build.gradle dans

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

à

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

1
Honnêtement, j'ai fait la même chose et cela a fonctionné, donc je suppose que tout est dans la compatibilité des versions de la bibliothèque après la fusion du processus
Milos

6

Seulement si vous ne voulez pas utiliser androidx

Donc, dans mon cas, j'utilise une bibliothèque qui utilisait androidx mais je n'utilise pas androidx, donc quand j'ai rétrogradé cette version de bibliothèque, le problème a été résolu.

Dans mon cas:

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

la bibliothèque mentionnée ci-dessus pose problème 13. + obtiendra automatiquement une nouvelle version de la bibliothèque qui utilise androidx. J'ai donc rétrogradé la version de la bibliothèque pour:

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

Et le problème a été résolu.


6
  1. Veuillez aller dans Refactor-> Migrate-> Migrate to Android X.

  2. Veuillez l'ajouter à votre gradle.propertiesfichier:

    android.enableJetifier=true
    android.useAndroidX=true

Et effectuez la synchronisation.


Pouvez-vous expliquer, quelle est votre situation actuelle?
Girish BR

Le projet dont j'ai hérité remonte à une demi-décennie. J'ai essayé d'implémenter de nouvelles analyses Fabric / Firebase que Google pousse. Et cette nouvelle bibliothèque utilise des bibliothèques de compatibilité androidx, et mon projet utilise AppCompat. Maintenant, je devais faire face à des tonnes de mises à jour de dépendances et d'autres choses. Je me suis arrêté, puis j'ai essayé diverses choses, y compris ces commandes, et j'en ai besoin à cause de nouveaux trucs Firebase. Après avoir activé cela, j'ai eu des tonnes d'erreurs de compilation. Correction de cela, mais maintenant j'ai des erreurs provenant de fichiers xi ui .. Je vais donc devoir tout abandonner et essayer avec des versions plus anciennes.
Martin Berger

Après encore une heure de correction manuelle des espaces de noms de classe sur androidx, cela semble fonctionner maintenant. Le problème est que le compilateur n'a pas pu détecter en XML que par exemple: "android.support.v7.widget.AppCompatSpinner" doit être "androidx.appcompat.widget.AppCompatSpinner". Ce document était utile: developer.android.com/jetpack/androidx/migrate
Martin Berger

J'espère que cela fonctionne maintenant, faites-moi savoir si quelque chose ne va pas. Nous allons y travailler!
Girish BR

4

Créez un nouveau projet et comparez vos fichiers build.gradle et tout remplacé

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

et d'autres dépendances avec le même que dans un nouveau projet quelque chose comme ça

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'

Et puis correction des importations pour utiliser androidx dans les fichiers kotlin.


Parce que pour une raison quelconque, je ne veux pas utiliser androidx.
shaby

4

Tout ce que j'ai fait, c'est aller à l'option "Refactor" dans le menu du haut.

Sélectionnez ensuite "Migrer vers AndroidX"

Acceptez pour enregistrer le projet en tant que fichier zip.

Veuillez mettre à jour Android Studio ainsi que Gradle pour vous assurer qu'aucun problème n'est rencontré.


4

1.Ajoutez ces codes à la fin de votre application / build.gradle:

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

Version du SDK et des outils 2.Modified à 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

3.Dans votre fichier AndroidManifest.xml, vous devez ajouter deux lignes:

<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">

Ou simplement

  • Allez dans Refactor (Studio -> Menu -> Refactor)
  • Cliquez sur Migrer vers AndroidX. ça marche
  • ça marche.

2
  • Aller à Refactor ( Image )
  • Cliquez sur Migrer vers AndroidX. ça marche
  • ça marche.

1
Un lien vers une solution est le bienvenu, mais assurez-vous que votre réponse est utile sans lui: ajoutez du contexte autour du lien pour que vos collègues aient une idée de ce que c'est et pourquoi il est là, puis citez la partie la plus pertinente de la page que vous '' relier à au cas où la page cible n'est pas disponible. Les réponses qui ne sont guère plus qu'un lien peuvent être supprimées.
Matthew

2

Si vous n'avez pas l'intention de migrer vers AndroidX, suivez les étapes ci-dessous

  1. Dans l'application Gradlew de type terminal: dépendances
  2. Une fois les dépendances affichées dans la fenêtre, appuyez sur Ctrl + f et tapez androidX
  3. Vous trouverez toutes les dépendances qui utilisent la bibliothèque androidx en interne, vous devrez peut-être la rétrograder ou utiliser une alternative pour cela afin de vous assurer qu'elle n'utilise plus les bibliothèques androidX en interne.

1

J'ai eu ce même problème pendant trois jours.

C'est comme si Android voulait que nous utilisions Kotlin ou AndroidX, ils se débarrassent d'Android.

Mais c'est comme ça que je l'ai résolu.

  • J'ai migré mon projet vers AndroidX. Cela n'apporte aucune erreur liée à ce problème en question, il met à jour les fichiers respectivement. Aucune méthode, classe ou nom de variable ne doit être modifié dans votre application.

NB: Vous devez utiliser les dernières bibliothèques (fichier build.grudle) dans la dernière version stable d'Android Studio 3.4.1


1

Je ne sais pas si c'est la bonne réponse ou pas, mais cela a fonctionné pour moi

Augmenter la propriété d'enveloppe de grille

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

et construire Gridle pour

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

son erreur d'affichage en raison de la version.


Je pense que la chaîne devrait être androidx.core.app.AppComponentFactory, des chaînes arbitraires provoqueront parfois des erreurs aléatoires.,
seyedrezafar

0

Assurez-vous tout d'abord d'ajouter cette ligne dans la balise manifest

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

Ajoutez ensuite des outils pour remplacer celui que vous avez suggéré dans Android studio


0

Remplacez proguardFile dans build.gradle (Module: app) par ce qui suit

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

au lieu de

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

Cela a fonctionné pour moi


0

Pour résoudre ce problème, je recommanderais de définir explicitement la version des variables ext au android/build.gradleniveau de votre projet racine

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
}

référence https://github.com/zo0r/react-native-push-notification/issues/1109#issuecomment-506414941


0

Je suis également confronté au même problème, pour votre studio Android, vous venez de changer la version 3.3.2 du plugin Android Gradle et la version Gradle est 5.1.1


0

dans mon cas, je suis ajouter dans le fichier manifeste `

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

tag d'application bien sûr, cela fonctionnera

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.