Android: pojawia się błąd „Manifest scalenie failed” po aktualizacji do nowej wersji gradle

108

Po zaakceptowaniu aktualizacji projektu do nowej wersji gradle pojawia się ten błąd:

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.

Jak mogę rozwiązać ten problem? To jest build.gradleplik mojej aplikacji :

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

A oto 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
}

Jak naprawić ten błąd, zachowując zmiany wprowadzone przez aktualizację wersji Gradle?

świat tux
źródło

Odpowiedzi:

212

Umieść to na końcu pliku build.gradle modułu aplikacji:

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

Podziękowania dla Eugena Pechaneca

Vishal
źródło
1
Nice one, jest to rozwiązanie, które dla mnie pracował przy budowie mojego nativescript aplikację
DED
7
U mnie też to zadziałało, dzięki @Vishal. Czy możesz po prostu wyjaśnić, co się tutaj dzieje :)
Ismail Iqbal
3
Upewnij się, że korzystasz z najnowszej wersji biblioteki wsparcia, która w chwili pisania jest taka details.useVersion '27.0.0'. W przeciwnym razie nie będziesz mieć najnowszych funkcji wsparcia, takich jak nadmiarowa eliminacja rzutowania widoku.
Drew Szurko
9
Proszę dodać opis tego.
Działa,
1
Jeśli ktoś inny miał błąd
``
90

Używasz wielu wersji bibliotek obsługi Androida:

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

Dwa są 26.0.0-alpha1, a jeden używa 25+.

Wybierz jedną konkretną wersję i użyj jej do wszystkich trzech. Ponieważ twój compileSdkVersionnie jest O, użyj 25.3.1dla wszystkich trzech z tych bibliotek, co spowoduje:

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
źródło
używanie 25.3.1do obsługi bibliotek lub buildToolsVersion? bo buildToolsVersionotrzymuję błądPackage Unavailable
tux-world
@ tux-world: "używając 25.3.1 do obsługi bibliotek lub buildToolsVersion?" - dla bibliotek pomocniczych. Zobacz moją zaktualizowaną odpowiedź.
CommonsWare
1
Testuję to, ale mój problem nie rozwiązuje się, która wersja musi być włączona compileSdkVersion?
tux-world
dostaję tę wiadomośćAll 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: Nic w twoim nie build.gradlepowinno już się odnosić 26.0.0-alpha1. Spróbuj wyczyścić projekt (Kompiluj> Wyczyść projekt) i sprawdź, czy problem zniknie. Jeśli nie, będziesz musiał wyśledzić, co się dzieje com.android.support:support-compat:26.0.0-alpha1, na przykład przez uruchomienie raportu zależności Gradle.
CommonsWare
18

Zmieniłem wszystkie wersje biblioteki wsparcia na 25.3.1 i działałem jak marzenie:

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

Musisz także zmienić compileSdkVersion i targetSdkVersion na 25:

compileSdkVersion 25
targetSdkVersion 25
Darush
źródło
zgadzam się, odpowiedzi powyżej są dobre, ale przyczyną błędu jest ustawienie różnych wersji w pliku gradle. Po prostu użyj wsparcia 26 lub 25
Andrew V.
W moim przypadku jest z powodu minSdkVersion.
Owoce
10

Możesz dowiedzieć się, która biblioteka zależy od niewłaściwej wersji biblioteki wsparcia i wykluczyć ją w ten sposób:

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

stripe-android w moim przypadku.

paynd
źródło
Jak się dowiesz?
Zapnologica
@Zapnologica spróbuj wyszczególnić zależności zadań Gradle, takie jak stackoverflow.com/questions/21645071/ ...
paynd
6

Nie używam różnych wersji bibliotek i otrzymałem ten sam błąd, zdarzyło się to po usunięciu buildToolsVersionw AS RC 1, ale dodanie załatwiło sprawę, po tools:node="replace" prostu dodaj to do swojego manifest.xml wewnątrz <application ..../>bloku:

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

źródło
1
czy są jakieś skutki uboczne podczas tego? Czy nadal działa dla Ciebie z nowym Androidem Studio 3?
Sakiboy
5

To samo przytrafiło się mnie. Zobacz Gradle -> Buduj Gradle -> i upewnij się, że zgodność jest zgodna w obu liniach kompilacji „zgodność aplikacji” i „wsparcie projektowania”, powinny one mieć tę samą wersję.

Następnie, aby mieć pewność, że uruchomi się bez problemu, przejdź do File -> Project Structure -> app i sprawdź na karcie właściwości wersji Build Tools, powinna być taka sama jak twoja pomocnicza linia kompilacji, na wszelki wypadek docelowa wersja SDK, jak również 25 w zakładce 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'*
}

To właśnie zrobiłem i pracowałem. Powodzenia!

Brenda Yanela Conzi
źródło
3
  • Zaktualizuj bibliotekę pomocy technicznej do ostatniej wersji

  • Otwórz Manifest Filei dodaj go do pliku manifestu

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

  • I dodaj do recyklingu w >> build.gradle Module app:

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

  • I kliknij: Sync Now

AmmAr Yasser
źródło
3

Rozwiązuję to, umieszczając to na końcu mojego modułu aplikacji 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
źródło
Naprawdę poprawiłeś mi humor.
Hamed Jaliliani
2

Odpowiedź jest akceptowana, ale jedną rzeczą, którą możesz zrobić, jest zdefiniowanie bibliotek na podstawie struktury projektu. Co możesz zrobić to:

  1. Skomentuj wszystkie biblioteki, w których nadchodzi problem
  2. Przejdź do struktury projektu
  3. Dodaj stamtąd biblioteki, a synchronizacja zostanie przeprowadzona automatycznie i problem zniknie.
  4. Jeśli problem będzie się powtarzał, spróbuj sprawdzić w dzienniku błędów, jakiej biblioteki wymaga po wykonaniu wszystkich powyższych 3 kroków.

Dzieje się tak, że predefiniowane biblioteki są teraz wyłączone. Biorę teraz appcompat: 26.0.0-alpha1 , używa starszej wersji rzeczy, kiedy dodajesz coś nowego i próbuje rozwiązać to za pomocą starych rzeczy. Kiedy dodasz go ze struktury projektu, doda to samo, ale z nowymi elementami, aby go rozwiązać. Twój problem zostałby rozwiązany.

Alok
źródło
0

Błąd dla mnie to:

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.

Rozwiązanie dla mnie było w moim pliku Gradle projektu, którego potrzebowałem, aby podbić moją wersję com.google.gms: google-services.

Używałem wersji 3.1.1:

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

A błąd ustąpił po wpadnięciu go do wersji 3.2.1:

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

Właśnie zaktualizowałem wszystkie moje biblioteki do najnowszej, w tym wersji 27.1.1 wszystkich bibliotek wsparcia i wersji 15.0.0 wszystkich bibliotek Firebase, gdy zobaczyłem błąd.

Lucy
źródło
0

Zaktualizowałem stary projekt Androida dla Wear OS. Mam ten komunikat o błędzie podczas kompilacji projektu:

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.

Moja aplikacja build.gradle for Wear zawiera następujące zależności:

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

ROZWIĄZANIE :

Dodanie implementation 'com.android.support:support-v4:28.0.0'do zależności rozwiązało mój problem.

Malder
źródło
0

Spróbuj usunąć metadane i odbudować projekt.

Anga
źródło