Android: Mendapatkan kesalahan "Penggabungan manifes gagal" setelah memperbarui ke versi baru gradle

108

Setelah menerima untuk memperbarui proyek ke versi baru gradle saya mendapatkan kesalahan ini:

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.

Bagaimana saya bisa mengatasi masalah ini? Ini adalah build.gradlefile aplikasi saya :

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

Dan ini proyeknya 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
}

Bagaimana cara memperbaiki kesalahan ini sambil mempertahankan perubahan yang dibuat dengan memperbarui versi gradle?

dunia tux
sumber

Jawaban:

212

Letakkan ini di akhir modul aplikasi Anda 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'
            }
        }
    }
}

Penghargaan untuk Eugen Pechanec

Vishal
sumber
1
Bagus, ini adalah solusi yang berhasil untuk saya saat membangun aplikasi Nativescript saya
ded
7
Ini juga berhasil untuk saya, terima kasih @Vishal. Bisakah Anda menjelaskan apa yang terjadi di sini :)
Ismail Iqbal
3
Pastikan untuk menggunakan pustaka dukungan versi terbaru, yang pada saat penulisan ini adalah details.useVersion '27.0.0'. Jika tidak, Anda tidak akan memiliki fitur dukungan terbaru, seperti penghapusan transmisi tampilan yang berlebihan.
Drew Szurko
9
Silakan tambahkan sedikit penjelasan tentang itu. Ini berfungsi tetapi akan berfungsi untuk versi dan fitur yang diperbarui
Ghanshyam Nayma
1
Jika ada orang lain yang memiliki kesalahan 'Tidak dapat menyelesaikan Symbol DependencyResolveDetails', saya memperbaikinya dengan menghapus 'DependencyResolveDetails' (saya membaca di suatu tempat di StackOverflow tentang tidak membutuhkannya sejak Groovy, sehingga dapat menyelesaikannya secara dinamis)
knjk04
90

Anda menggunakan beberapa versi Pustaka Dukungan 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+'

Dua adalah 26.0.0-alpha1, dan satu sedang menggunakan 25+.

Pilih satu versi konkret dan gunakan untuk ketiganya. Karena Anda compileSdkVersionbukan O, gunakan 25.3.1untuk ketiga pustaka ini, menghasilkan:

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
sumber
gunakan 25.3.1untuk pustaka dukungan atau buildToolsVersion? karena buildToolsVersionsaya mendapatkan kesalahanPackage Unavailable
tux-world
@ tux-world: "menggunakan 25.3.1 untuk pustaka dukungan atau buildToolsVersion?" - untuk perpustakaan pendukung. Lihat jawaban terbaru saya.
CommonsWare
1
saya mengujinya, tetapi masalah saya tidak terselesaikan, versi mana yang harus aktif compileSdkVersion?
tux-world
saya mendapatkan pesan iniAll 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: Tidak ada bagian dalam Anda yang build.gradleharus dirujuk 26.0.0-alpha1lagi. Coba bersihkan proyek Anda (Build> Clean Project) dan lihat apakah masalahnya hilang. Jika tidak, Anda perlu melacak apa yang ditarik com.android.support:support-compat:26.0.0-alpha1, seperti dengan menjalankan laporan dependensi Gradle.
CommonsWare
18

Saya mengubah semua versi pustaka dukungan menjadi 25.3.1 dan bekerja dengan sangat baik:

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

Anda juga perlu mengubah compileSdkVersion dan targetSdkVersion menjadi 25:

compileSdkVersion 25
targetSdkVersion 25
Darush
sumber
setuju, jawaban di atas bagus, tetapi alasan kesalahannya adalah Anda menetapkan versi yang berbeda di file gradle Anda. Cukup gunakan atau 26 atau 25 dukungan
Andrew V.
Dalam kasus saya adalah karena minSdkVersion.
Buah
10

Anda dapat mengetahui pustaka apa yang bergantung pada versi pustaka dukungan yang salah dan mengecualikannya seperti ini:

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

stripe-android dalam kasus saya.

paynd
sumber
Bagaimana caramu mencari tahu?
Zapnologica
@Zapnologica mencoba mencantumkan dependensi tugas gradle, seperti stackoverflow.com/questions/21645071/…
paynd
6

Saya tidak menggunakan versi pustaka yang berbeda dan mendapatkan kesalahan yang sama, itu terjadi setelah dihapus buildToolsVersiondi AS RC 1, tetapi menambahkan tools:node="replace" berhasil, cukup tambahkan ini ke dalam <application ..../>blok dalam manifest.xml Anda :

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

sumber
1
Apakah ada efek samping saat melakukan ini? Apakah masih berfungsi untuk Anda dengan Android Studio 3 baru?
Sakiboy
5

Hal yang sama terjadi pada saya. Lihat Gradle -> Build Gradle -> dan pastikan kompatibilitasnya cocok dengan baris compile "app compat" dan "support design", keduanya harus memiliki versi yang sama.

Kemudian untuk lebih yakin, bahwa itu akan diluncurkan tanpa masalah, buka File -> Project Structure -> app dan periksa tab propertie versi build Tools, itu harus sama dengan baris kompilasi dukungan Anda, kalau-kalau saya meletakkan versi SDK target serta 25 di tab 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'*
}

Itulah yang saya lakukan dan kerjakan. Semoga berhasil!

Brenda Yanela Conzi
sumber
3
  • Perbarui pustaka dukungan Anda ke versi terakhir

  • Buka Manifest File, dan tambahkan ke File Manifest

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

  • Dan tambahkan untuk recyclerview di >> build.gradle Module app:

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

  • Dan klik: Sync Now

AmmAr Yasser
sumber
3

Saya menyelesaikannya dengan meletakkan ini di akhir modul aplikasi saya 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
sumber
Anda benar-benar membuat hari saya menyenangkan.
Hamed Jaliliani
2

Jawabannya diterima tetapi satu hal yang juga dapat Anda lakukan adalah menentukan pustaka dari struktur proyek Anda. Yang dapat Anda lakukan adalah:

  1. Komentari semua perpustakaan tempat masalah datang
  2. Goto struktur proyek Anda
  3. Tambahkan pustaka dari sana dan itu akan disinkronkan secara otomatis dan masalahnya hilang.
  4. Jika masalah tetap ada, coba lihat dari log kesalahan yang diminta pustaka apa setelah mengikuti semua 3 langkah di atas.

Apa yang terjadi adalah pustaka yang telah ditentukan sebelumnya mati sekarang saya mengambil appcompat: 26.0.0-alpha1 itu menggunakan versi yang lebih lama dari hal-hal ketika Anda menambahkan sesuatu yang baru dan mencoba untuk menyelesaikannya dengan barang lama. Ketika Anda menambahkannya dari struktur proyek Anda, itu akan menambahkan hal yang sama tetapi dengan barang baru untuk menyelesaikannya. Masalah Anda akan teratasi.

Alok
sumber
0

Kesalahan bagi saya adalah:

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.

Solusi untuk saya ada di file Gradle proyek saya, saya perlu mengganti com.google.gms saya: versi layanan google.

Saya menggunakan versi 3.1.1:

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

Dan kesalahan teratasi setelah saya mengubahnya ke versi 3.2.1:

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

Saya baru saja meningkatkan semua pustaka saya ke yang terbaru termasuk v27.1.1 dari semua pustaka dukungan dan v15.0.0 dari semua pustaka Firebase ketika saya melihat kesalahan.

Lucy
sumber
0

Saya telah memperbarui proyek Android lama untuk Wear OS. Saya mendapat pesan kesalahan ini saat membangun proyek:

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.

Build.gradle saya untuk aplikasi Wear berisi dependensi ini:

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

LARUTAN :

Menambahkan implementation 'com.android.support:support-v4:28.0.0'ke dalam dependensi memecahkan masalah saya.

Malder
sumber
0

Coba hapus meta data dan bangun kembali proyek.

Angga
sumber