Android: obtention de l'erreur "Échec de la fusion du manifeste" après la mise à jour vers une nouvelle version de gradle

108

Après avoir accepté de mettre à jour le projet vers la nouvelle version de gradle, j'obtiens cette erreur:

Error:Execution failed for task ':app:processDebugManifest'.
Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.0-alpha1) from [com.android.support:cardview-v7:26.0.0-alpha1] AndroidManifest.xml:24:9-38
    is also present at [com.android.support:design:25.3.1] AndroidManifest.xml:27:9-31 value=(25.3.1).
    Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:22:5-24:41 to override.

Comment puis-je résoudre ce problème? Ceci est le build.gradlefichier de mon application :

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.sample.bookReader"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
    ...
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:multidex:+'
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    compile 'com.android.support:cardview-v7:26.0.0-alpha1'
    compile 'com.android.support:design:25+'
    compile 'com.jakewharton:butterknife:8.2.1'
    apt 'com.jakewharton:butterknife-compiler:8.2.1'
    ...
}

Et voici le projet build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "https://www.jitpack.io" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Comment corriger cette erreur tout en conservant les modifications apportées en mettant à jour la version gradle?

monde du smoking
la source

Réponses:

212

Mettez ceci à la fin de votre module d'application build.gradle:

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '25.3.0'
            }
        }
    }
}

Crédit à Eugen Pechanec

Vishal
la source
1
Nice one, c'est la solution qui a fonctionné pour moi lors de la construction de mon application nativescript
ded
7
Cela a fonctionné pour moi aussi, merci @Vishal. Pouvez-vous expliquer ce qui se passe ici :)
Ismail Iqbal
3
Assurez-vous d'utiliser la dernière version de la bibliothèque de support, qui au moment de la rédaction de cet article details.useVersion '27.0.0'. Sinon, vous n'aurez pas les dernières fonctionnalités de support, comme l'élimination de la diffusion de vues redondantes.
Drew Szurko
9
Veuillez ajouter une description à ce sujet. Cela fonctionne mais fonctionnera-t-il pour la version mise à jour et les fonctionnalités
Ghanshyam Nayma
1
Si quelqu'un d'autre avait l'erreur `` Impossible de résoudre Symbol DependencyResolveDetails '', je l'ai corrigée en supprimant `` DependencyResolveDetails '' (j'ai lu quelque part sur StackOverflow qu'il n'en avait pas besoin depuis son Groovy, donc il peut le résoudre dynamiquement)
knjk04
90

Vous utilisez plusieurs versions des bibliothèques de support Android:

compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
compile 'com.android.support:cardview-v7:26.0.0-alpha1'
compile 'com.android.support:design:25+'

Deux sont 26.0.0-alpha1et un utilise 25+.

Choisissez une version concrète et utilisez-la pour les trois. Puisque ce compileSdkVersionn'est pas le cas O, utilisez 25.3.1pour ces trois bibliothèques, ce qui entraîne:

compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:cardview-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
CommonsWare
la source
en utilisant 25.3.1pour les bibliothèques de support ou buildToolsVersion? for buildToolsVersioni get errorPackage Unavailable
tux-world
@ tux-world: "utiliser 25.3.1 pour les bibliothèques de support ou buildToolsVersion?" - pour les bibliothèques de support. Voir ma réponse mise à jour.
CommonsWare
1
Je teste cela, mais mon problème ne se résout pas, quelle version doit être activée compileSdkVersion?
tux-world
Je reçois ce messageAll com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 26.0.0-alpha1, 25.3.1. Examples include com.android.support:support-compat:26.0.0-alpha1 and com.android.support:animated-vector-drawable:25.3.1
tux-world
1
@ tux-world: Rien dans votre build.gradlene devrait plus faire référence 26.0.0-alpha1. Essayez de nettoyer votre projet (Build> Clean Project) et voyez si le problème disparaît. Si ce n'est pas le cas, vous devrez rechercher ce qui se passe com.android.support:support-compat:26.0.0-alpha1, par exemple en exécutant un rapport de dépendance Gradle.
CommonsWare
18

J'ai changé toutes les versions de la bibliothèque de support en 25.3.1 et j'ai travaillé comme un charme:

compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'

Vous devez également changer compileSdkVersion et targetSdkVersion en 25:

compileSdkVersion 25
targetSdkVersion 25
Darush
la source
d'accord, les réponses ci-dessus sont bonnes, mais la raison de l'erreur est que vous définissez différentes versions dans votre fichier gradle. Utilisez simplement ou 26 ou 25 support
Andrew V.
Dans mon cas, c'est à cause de minSdkVersion.
Fruit
10

Vous pouvez découvrir quelle bibliothèque dépend d'une mauvaise version de la bibliothèque de support et l'exclure comme ceci:

compile ('com.stripe:stripe-android:5.1.1') {
    exclude group: 'com.android.support'
  }

stripe-android dans mon cas.

paynd
la source
Comment le découvrirez-vous?
Zapnologica
@Zapnologica essaie de lister les dépendances de tâches gradle, comme stackoverflow.com/questions/21645071/…
paynd
6

Je n'utilise pas différentes versions de bibliothèques et j'ai la même erreur, cela s'est produit après la suppression buildToolsVersiondans AS RC 1, mais l'ajout a tools:node="replace" fait l'affaire, ajoutez simplement ceci dans votre <application ..../>bloc manifest.xml à l'intérieur :

<meta-data 
 tools:node="replace"
 android:name="com.google.android.gms.version"
 android:value="@integer/google_play_services_version" />

la source
1
y a-t-il des effets secondaires en faisant cela? Cela fonctionne-t-il toujours pour vous avec le nouvel Android Studio 3?
Sakiboy
5

Cela m'est arrivé la même chose. Voir sur Gradle -> Build Gradle -> et assurez-vous que la compatibilité correspond à la fois dans les lignes de compilation "app compat" et "support design", elles devraient avoir la même version.

Ensuite, pour être sûr qu'il se lancera sans problème, allez dans Fichier -> Structure du projet -> application et vérifiez sur l'onglet propriété la version des outils de construction, elle devrait être la même que votre ligne de compilation de support, juste au cas où je mettrais la version SDK cible comme 25 ainsi que sur l'onglet Flavours.

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-
   core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    *compile 'com.android.support:appcompat-v7:25.3.1'*
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    *compile 'com.android.support:design:25.3.1'*
}

C'est ce que j'ai fait et travaillé. Bonne chance!

Brenda Yanela Conzi
la source
3
  • Mettez à jour votre bibliothèque d'assistance à la dernière version

  • Ouvrez Manifest Fileet ajoutez-le dans le fichier manifeste

  • <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/>

  • Et ajoutez pour recyclerview dans >> build.gradle Module app:

  • compile 'com.android.support:recyclerview-v7:25.3.1'

  • Et cliquez: Sync Now

AmmAr Yasser
la source
3

Je résous cela en mettant ceci à la fin de mon module d'application build.gradle:

    configurations.all {
     resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == 'com.android.support') {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion '26.0.0'
        }
    }
  }
}
Maryam Azhdari
la source
Tu as vraiment fait ma journée.
Hamed Jaliliani
2

La réponse est acceptée mais une chose que vous pouvez également faire est de définir les bibliothèques à partir de la structure de votre projet. Ce que vous pouvez faire est:

  1. Commentez toutes les bibliothèques dans lesquelles le problème survient
  2. Accédez à la structure de votre projet
  3. Ajoutez des bibliothèques à partir de là et il se synchronisera automatiquement et le problème disparaîtra.
  4. Si le problème persiste, essayez de rechercher dans le journal des erreurs la bibliothèque requise après avoir suivi les 3 étapes ci-dessus.

Ce qui se passe, c'est que les bibliothèques prédéfinies sont désactivées maintenant, je prends l' appcompat: 26.0.0-alpha1, elle utilise l'ancienne version des choses lorsque vous ajoutez quelque chose de nouveau et essayez de le résoudre avec les anciens éléments. Lorsque vous l'ajoutez à partir de la structure de votre projet, il ajoutera la même chose, mais avec les nouveaux éléments pour le résoudre. Votre problème serait résolu.

Alok
la source
0

L'erreur pour moi était:

Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.2) from [com.android.support:percent:26.0.2] AndroidManifest.xml:25:13-35
    is also present at [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0).
    Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:23:9-25:38 to override.

La solution pour moi était dans mon fichier de projet Gradle dont j'avais besoin pour remplacer ma version com.google.gms: google-services.

J'utilisais la version 3.1.1:

classpath 'com.google.gms:google-services:3.1.1

Et l'erreur résolue après l'avoir passée à la version 3.2.1:

classpath 'com.google.gms:google-services:3.2.1

Je venais de mettre à niveau toutes mes bibliothèques vers la dernière version, y compris la v27.1.1 de toutes les bibliothèques de support et la v15.0.0 de toutes les bibliothèques Firebase lorsque j'ai vu l'erreur.

Lucy
la source
0

J'ai mis à jour l'ancien projet Android pour le système d'exploitation Wear. J'ai ce message d'erreur lors de la construction du projet:

Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.2) from [com.android.support:percent:26.0.2] AndroidManifest.xml:25:13-35
is also present at [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0).
Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:23:9-25:38 to override.

Mon application build.gradle for Wear contient ces dépendances:

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.google.android.support:wearable:2.4.0'
implementation 'com.google.android.gms:play-services-wearable:16.0.1'
compileOnly 'com.google.android.wearable:wearable:2.4.0'}

SOLUTION :

L'ajout implementation 'com.android.support:support-v4:28.0.0'dans les dépendances a résolu mon problème.

Malder
la source
0

Essayez de supprimer les métadonnées et de reconstruire le projet.

Anga
la source