É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
Евгений Усов
la source
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

Anubhav Gupta
la source
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

Abir Hasan
la source
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

Infliger
la source
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?

Khemraj
la source
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

Muhaiminur Rahman
la source
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
J'ai dû utiliser des
Johannes Filter
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

EJ Chathuranga
la source
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'
   }
Arfat Binkileb
la source
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

Prashant Arvind
la source
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"
Ajay
la source
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"
Manoj Alwis
la source
8

Suivez ces étapes:

  • Goto Refactor and Click Migrate to AndroidX
  • Cliquez sur Refactoriser
Perte de sang
la source
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.

Hasib Akter
la source
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.

Manoj Alwis
la source
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'
Kashif Ahmed
la source
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.

Suraj Vaishnav
la source
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.

Girish BR
la source
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.

Muhammad Zahab Ahmed Khan
la source
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é.

d4rkcon
la source
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.
Attaullah
la source
2
  • Aller à Refactor ( Image )
  • Cliquez sur Migrer vers AndroidX. ça marche
  • ça marche.
Aydın Üzmez
la source
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.
Swapnil
la source
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

THEMBO CHARLES LWANGA
la source
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.

akshay shetty
la source
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

Shubham Kumar Gupta Ggps
la source
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

David Wanjohi
la source
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

Govan
la source
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

Shiva Kanumala
la source
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

vinod yadav
la source