115 votes

Android: erreur "La fusion du manifeste a échoué" après la mise à jour vers une nouvelle version de Gradle

Après avoir accepté de mettre à jour le projet vers la nouvelle version de Gradle, le message d'erreur suivant s'affiche:

 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? Voici le fichier build.gradle 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 ceci est 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 de Gradle?

214voto

Vishal Points 2227

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

90voto

CommonsWare Points 402670

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-alpha1 , et un utilise 25+ .

Choisissez une version concrète et utilisez-la pour les trois. Puisque votre compileSdkVersion n'est pas O , utilisez 25.3.1 pour ces trois bibliothèques, ce qui donne:

 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'
 

18voto

Darush Points 3150

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 modifier compileSdkVersion et targetSdkVersion en 25:

 compileSdkVersion 25
targetSdkVersion 25
 

10voto

paynd Points 629

Vous pouvez trouver quelle bibliothèque dépend d'une version incorrecte de la bibliothèque de support et l'exclure de la manière suivante:

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

stripe-android dans mon cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X