web-dev-qa-db-fra.com

La fusion du matériel Android et du manifeste appcompat a échoué

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, je reçois 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 au manifeste 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
21

Il suffit de changer "rc01" dans la première et dernière ligne à l'intérieur des dépendances en "alpha1" Cela fonctionne pour moi

5
Anubhav Gupta

J'ai eu le même problème. Ajout de deux lignes dans le fichier gradle.properties:

Android.useAndroidX=true
Android.enableJetifier=true

Ces deux lignes ont automatiquement résolu les 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

68
Abir Hasan

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

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

 Refactor/Migrate to AndroidX

35
Mete

Solutions simples - migrer dans AndroidX

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

Android.useAndroidX=true
Android.enableJetifier=true

Quelle était la raison

Tous les packages sous AndroidX résident 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 créer des artefacts pour les nouveaux, voir la page Refactoring de paquet.

Voir la page de refactoring de paquets

22
E J Chathuranga

Raison d'échec

Vous utilisez la bibliothèque de matériaux qui fait partie de AndroidX . Si vous ne connaissez pas AndroidX, veuillez passer par 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 diplôme, vous utilisez

  • com.Android.support:appcompat-v7 (partie de l'ancien --Android Support Library--)
  • com.google.Android.material:material (composant d'AndroidX) (artefact de génération d'AndroidX de com.Android.support:design)

Solution

La solution consiste donc à utiliser AndroidX ou une 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 notes de publication de la bibliothèque de support.

Migrez simplement vers AndroidX . Here est 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. Accepter les changements à faire. 

image

Nouveau projet

Mettez ces drapeaux dans votre gradle.properties

Android.enableJetifier=true
Android.useAndroidX=true

Vérifiez les mappages @ de la bibliothèque pour un package AndroidX égal .

Check @ Page officielle de Migrer vers AndroidX

Qu'est-ce que Jetifier?

9
Khemraj

Depuis Android P, les bibliothèques de support ont été déplacées vers AndroidX.

S'il vous plaît faire un refactor pour votre libs de cette page .

https://developer.Android.com/topic/libraries/support-library/refactor

8
mughil

il suffit d'ajouter ces deux lignes de code à votre fichier manifeste

tools:replace="Android:appComponentFactory"
Android:appComponentFactory="whateverString"
7
Manoj Alwis

Il suffit de supprimer la dépendance Android.support

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

Citant à partir de directives importantes

Si vous ne souhaitez pas encore basculer vers les 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 simultanément com.Android.support et com.google.Android.dependencies dans votre application.

Il suffit de supprimer cette dépendance pour fonctionner correctement

    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'
   }
6
Arfat Binkileb

Enfin, nous avons trouvé une solution simple et rapide en ajoutant deux lignes dans le fichier Android/build.gradle.

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

S'il vous plaît suivez ce 100% correct.

5
Manoj Alwis

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"

 Manifest file Example

4
Muhaiminurabir

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

Puis sélectionnez "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 ne survient.

3
d4rkcon

Migrez vers androidX s'il s'agit d'un projet existant. S'il s'agit d'un nouveau projet, ajoutez ces deux indicateurs à Gradle.propeties.

Android.enableJetifier = true
Android.useAndroidX = true

pour plus d'étapes de détail https://developer.Android.com/jetpack/androidx ou vérifiez ceci Qu'est-ce qu'AndroidX

3
trustidkid

Suivez ces étapes: 

  • Allez à Refactor et cliquez sur Migrer vers AndroidX
  • Cliquez sur refactoriser
3
BloodLoss

Créez un nouveau projet et comparez vos fichiers build.gradle et remplacez tous

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 les mêmes 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 les importations fixes pour utiliser androidx dans les fichiers Kotlin.

  1. Veuillez aller sur Refactor-> Migrate-> Migrate to Android X.

  2. Ajoutez ceci à votre fichier gradle.properties: Android.enableJetifier = true Android.useAndroidX = true

Et effectuer la synchronisation.

2
Girish B.R
  • Aller au refactor ( Image )
  • Cliquez sur le bouton Migrer vers AndroidX. ça marche
  • ça marche.
2
Aydın Üzmez

Je faisais face à cet étrange bug de 2 heures. J'ai résolu cette erreur en suivant ces étapes

modifiez 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'
2
Kashif Ahmed

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

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

Mais voici comment je l'ai résolu.

  • J'ai migré mon projet vers AndroidX. Cela ne génère aucune erreur liée à ce problème, il met à jour les fichiers, respectivement. Aucun nom de méthode, de classe ou 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 de Android studio 3.4.1.

1

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 alors quand j'ai rétrogradé cette version de la bibliothèque et que le problème est résolu.

Dans mon cas:

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

la bibliothèque mentionnée ci-dessus crée le problème 13. + obtient automatiquement une nouvelle version utilisant androidx. J'ai donc rétrogradé la version de la bibliothèque pour:

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

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

1
Suraj Vaishnav

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

tools: replace = "Android: appComponentFactory" Android: appComponentFactory = "n'importe lequel"

1
Ajay

Ce problème est principalement survenu pour anciennes dépendances .

Il y a 2 solution:

Premier:

Mettez à jour tous les fichiers old dependencies et ClassPaths from Project level gradle.

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

À partir du menu Android Studio -> Refanctor -> Migrate to AndroidX

Merci, laissez-moi savoir si quelqu'un aide de cette réponse.

1
Hasib Akter

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

tools:replace="Android:appComponentFactory"
Android:appComponentFactory="whateverString"

enter image description here

1
Prashant Arvind

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

  1. Dans le type de terminal gradlew app: 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 androidx lib en interne. Vous devrez peut-être rétrograder cette option ou utiliser une alternative pour vous assurer qu'elle n'utilise plus les librairies androidX en interne.
1
Swapnil

Tout d’abord, assurez-vous d’ajouter cette ligne dans balise manifest

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

Ensuite, ajoutez des outils pour remplacer votre suggestion dans le studio Android

0
Shubham Gupta Ggps

J'ai eu la même erreur en travaillant avec Groupie (implémentation 'com.xwray: groupie: 2.3.0')

Je l'ai résolu en changeant la version en (implémentation 'com.xwray: groupie: 2.1.0')

0
atilganhaci

Dans le cas où je ne voulais pas passer à AndroidX. Et je dois vérifier mes dernières modifications. Je découvre que le nouveau composant était -> lottie 2.8.0 Donc je le rétrograde: implémentation 'com.airbnb.Android:lottie:2.7.0'

J'espère que cela pourra aider quelqu'un.

1.Ajouté 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       
    }

2. Version du sdk et des outils modifiée à 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">
0
Attaullah

Pour résoudre ce problème, je vous conseillerais de définir explicitement la version des variables ext au niveau du Android/build.gradle 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
Govan

Modifiez proguardFile dans build.gradle (Module: app) comme 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
David Wanjohi