Android: Nach dem Update auf eine neue Version von gradle wird der Fehler "Manifest Merger fehlgeschlagen" angezeigt

108

Nachdem ich akzeptiert habe, das Projekt auf eine neue Version von gradle zu aktualisieren, wird folgende Fehlermeldung angezeigt:

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.

Wie kann ich dieses Problem lösen? Dies ist die build.gradleDatei meiner App :

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

Und das ist das Projekt 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
}

Wie behebe ich diesen Fehler, während die durch Aktualisieren der Gradle-Version vorgenommenen Änderungen beibehalten werden?

Smoking-Welt
quelle

Antworten:

212

Fügen Sie dies am Ende Ihres App-Moduls build.gradle ein:

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

Dank an Eugen Pechanec

Vishal
quelle
1
Nice one, das ist die Lösung , die für mich gearbeitet , wenn meine nativescript app Gebäude
ded
7
Das hat auch bei mir funktioniert, danke @Vishal. Können Sie einfach erklären, was hier passiert :)
Ismail Iqbal
3
Stellen Sie sicher, dass Sie die neueste Version der Support-Bibliothek verwenden, die zum Zeitpunkt des Schreibens verfügbar ist details.useVersion '27.0.0'. Andernfalls verfügen Sie nicht über die neuesten Supportfunktionen wie die Beseitigung redundanter View Castings.
Drew Szurko
9
Bitte fügen Sie eine Bitbeschreibung hinzu. Es funktioniert, aber es wird für aktualisierte Version und Funktionen
funktionieren
1
Wenn jemand den Fehler "Symbol DependencyResolveDetails kann nicht aufgelöst werden" hatte, habe ich ihn behoben, indem ich "DependencyResolveDetails" entfernt habe (ich habe irgendwo in StackOverflow gelesen, dass es seit seinem Groovy nicht benötigt wird, damit es dynamisch ausgearbeitet werden kann)
knjk04
90

Sie verwenden mehrere Versionen der Android-Unterstützungsbibliotheken:

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

Zwei sind 26.0.0-alpha1und einer verwendet 25+.

Wählen Sie eine konkrete Version und verwenden Sie sie für alle drei. Da dies nicht der Fall compileSdkVersionist O, verwenden Sie es 25.3.1für alle drei dieser Bibliotheken. Dies führt zu:

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
quelle
Verwendung 25.3.1für Support-Bibliotheken oder buildToolsVersion? denn buildToolsVersionich bekomme FehlerPackage Unavailable
Tux-World
@ tux-world: "Verwenden Sie 25.3.1 für Support-Bibliotheken oder buildToolsVersion?" - für die Support-Bibliotheken. Siehe meine aktualisierte Antwort.
CommonsWare
1
Ich teste das, aber mein Problem lässt sich nicht lösen. Welche Version muss aktiviert sein compileSdkVersion?
Smoking-Welt
Ich bekomme diese NachrichtAll 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: Nichts in deinem build.gradlesollte sich 26.0.0-alpha1mehr darauf beziehen . Versuchen Sie, Ihr Projekt zu bereinigen (Erstellen> Projekt bereinigen), und prüfen Sie, ob das Problem behoben ist. Wenn nicht, müssen Sie nachverfolgen, was gerade eingeht com.android.support:support-compat:26.0.0-alpha1, z. B. indem Sie einen Gradle-Abhängigkeitsbericht ausführen.
CommonsWare
18

Ich habe alle Versionen der Support-Bibliothek auf 25.3.1 geändert und wie ein Zauber gearbeitet:

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

Sie müssen auch compileSdkVersion und targetSdkVersion in 25 ändern :

compileSdkVersion 25
targetSdkVersion 25
Darush
quelle
stimme zu, Antworten oben gut, aber der Grund für den Fehler ist, dass du verschiedene Versionen in deiner Gradle-Datei festlegst. Verwenden Sie einfach oder 26 oder 25 Unterstützung
Andrew V.
In meinem Fall ist wegen minSdkVersion.
Obst
10

Sie können herausfinden, welche Bibliothek von einer falschen Version der Support-Bibliothek abhängt, und diese folgendermaßen ausschließen:

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

stripe-android in meinem Fall.

paynd
quelle
Wie findest du es heraus?
Zapnologica
@ Zapnologica versuchen, Gradle-Task-Abhängigkeiten aufzulisten, wie stackoverflow.com/questions/21645071/…
paynd
6

Ich verwende keine unterschiedlichen Versionen von Bibliotheken und habe den gleichen Fehler erhalten. Er ist nach dem Entfernen buildToolsVersionin AS RC 1 aufgetreten, aber das Hinzufügen tools:node="replace" hat den Trick ausgeführt. Fügen Sie dies einfach in Ihre manifest.xml im <application ..../>Block ein:

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

quelle
1
Gibt es dabei Nebenwirkungen? Funktioniert es bei Ihnen immer noch mit dem neuen Android Studio 3?
Sakiboy
5

Mir passiert dasselbe. Siehe Gradle -> Build Gradle -> und stellen Sie sicher, dass die Kompatibilität sowohl in den Kompilierungszeilen "App-kompatibel" als auch "Support-Design" übereinstimmt. Sie sollten dieselbe Version haben.

Um sicherzugehen, dass es problemlos gestartet werden kann, gehen Sie zu Datei -> Projektstruktur -> App und überprüfen Sie auf der Registerkarte die Eigenschaft der Build-Tools-Version. Es sollte mit Ihrer Support-Kompilierungszeile identisch sein, nur für den Fall, dass ich es setze Die Ziel-SDK-Version ist ebenfalls 25 auf der Registerkarte 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'*
}

Das habe ich getan und gearbeitet. Viel Glück!

Brenda Yanela Conzi
quelle
3
  • Aktualisieren Sie Ihre Support-Bibliothek auf die letzte Version

  • Öffnen Manifest FileSie es und fügen Sie es der Manifestdatei hinzu

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

  • Und für die Recyclingübersicht in >> hinzufügen build.gradle Module app:

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

  • Und klicken Sie auf: Sync Now

AmmAr Yasser
quelle
3

Ich löse das, indem ich dies am Ende meines App-Moduls build.gradle platziere:

    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
quelle
Du hast wirklich meinen Tag gemacht.
Hamed Jaliliani
2

Die Antwort wird akzeptiert, aber Sie können auch die Bibliotheken aus Ihrer Projektstruktur definieren. Was Sie tun können, ist:

  1. Kommentieren Sie alle Bibliotheken, in denen das Problem auftritt
  2. Gehen Sie zu Ihrer Projektstruktur
  3. Wenn Sie von dort aus Bibliotheken hinzufügen, wird diese automatisch synchronisiert und das Problem wird behoben.
  4. Wenn das Problem weiterhin besteht, versuchen Sie anhand des Fehlerprotokolls zu ermitteln, welche Bibliothek erforderlich ist, nachdem Sie alle oben genannten 3 Schritte ausgeführt haben.

Was passiert ist, dass die vordefinierten Bibliotheken jetzt deaktiviert sind. Ich nehme den Appcompat: 26.0.0-alpha1. Er verwendet die ältere Version der Dinge, wenn Sie etwas Neues hinzufügen, und versucht, es mit den alten Dingen aufzulösen. Wenn Sie es aus Ihrer Projektstruktur hinzufügen, wird dasselbe hinzugefügt, jedoch mit den neuen Elementen, um es zu beheben. Ihr Problem wäre gelöst.

Alok
quelle
0

Der Fehler für mich war:

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.

Die Lösung für mich war in meinem Projekt Gradle-Datei, die ich brauchte, um meine com.google.gms: google-services-Version zu stoßen.

Ich habe Version 3.1.1 verwendet:

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

Und der Fehler wurde behoben, nachdem ich ihn auf Version 3.2.1 gestoßen hatte:

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

Ich hatte gerade alle meine Bibliotheken auf die neueste Version aktualisiert, einschließlich Version 27.1.1 aller Support-Bibliotheken und Version 15.0.0 aller Firebase-Bibliotheken, als ich den Fehler sah.

Lucy
quelle
0

Ich habe altes Android-Projekt für das Wear OS aktualisiert. Ich habe diese Fehlermeldung beim Erstellen des Projekts erhalten:

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.

Meine build.gradle for Wear-App enthält die folgenden Abhängigkeiten:

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

LÖSUNG :

Das Hinzufügen implementation 'com.android.support:support-v4:28.0.0'zu den Abhängigkeiten löste mein Problem.

Malder
quelle
0

Versuchen Sie, die Metadaten zu löschen und das Projekt neu zu erstellen.

Anga
quelle