Entri entri rangkap duplikat: META-INF / MANIFEST.MF (Atau cara menghapus file dari tabung)

19

Saya sudah kloning repositori github karena saya ingin mempelajari kode, tetapi ketika saya mencoba membangunnya di Android Studio, saya mengalami beberapa masalah. Setelah menambahkan repositori google maven (seperti yang diminta oleh Android Studio) dan memperbarui Versi Plugin Gradle dan Versi Grade (masing-masing ke 3.5.2 dan 5.4.1), build gagal karena kesalahan berikut:

Penyebab: entri rangkap: META-INF / MANIFEST.MF

Dan ini, untuk lebih spesifik:

Disebabkan oleh: java.util.zip.ZipException: entri rangkap: META-INF / MANIFEST.MF

Ini file build.gradle tingkat proyek saya:


    buildscript {
        repositories {
            jcenter()
            google()
        }

        dependencies {
            classpath 'com.android.tools.build:gradle:3.5.2'

            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }

    allprojects {
        repositories {
            jcenter()

            maven {
                url 'https://maven.google.com'
            }

        }
    }

Ini file modul build.gradle saya (sebelum mencoba apa pun):


    apply plugin: 'com.android.application'

    android {
        compileSdkVersion 22
        buildToolsVersion '28.0.3'

        defaultConfig {
            applicationId "com.thelittlenaruto.supportdesignexample"
            minSdkVersion 11
            targetSdkVersion 22
            versionCode 1
            versionName "1.0"
        }

        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation ('com.android.support:appcompat-v7:22.2.1')
        implementation ('com.android.support:design:22.2.1')
        implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
    }

Inilah yang saya coba sejauh ini:

  • Menambahkan berikut ini ke bagian android file build.gradle modul saya:

    sourceSets {
            main{
                java{
                    exclude '**/META-INF/MANIFEST'
                    exclude '**/META-INF/MANIFEST.MF'
                    exclude 'META-INF/MANIFEST'
                    exclude 'META-INF/MANIFEST.MF'
                    exclude '!META-INF/MANIFEST.MF'
                }
            }
        }

  • Menambahkan ini:

    sourceSets.main.res.filter.exclude 'META-INF/MANIFEST'
        sourceSets.main.res.filter.exclude 'META-INF/MANIFEST.MF'

  • Ini juga:

    packagingOptions {
            apply plugin: 'project-report'
            exclude '**/META-INF/MANIFEST'
            exclude '**/META-INF/MANIFEST.MF'
            exclude 'META-INF/MANIFEST'
            exclude 'META-INF/MANIFEST.MF'
            exclude '!META-INF/MANIFEST.MF'
        }

  • Dan ini:

    packagingOptions {
            pickFirst '**/META-INF/MANIFEST'
            pickFirst '**/META-INF/MANIFEST.MF'
            pickFirst 'META-INF/MANIFEST'
            pickFirst 'META-INF/MANIFEST.MF'
            pickFirst '!META-INF/MANIFEST.MF'
        }

  • Ini:

    aaptOptions {
            ignoreAssetsPattern "!META-INF/MANIFEST.MF"
            ignoreAssetsPattern "META-INF/MANIFEST.MF"
        }

Saya pikir saya sudah mencoba sebagian besar segalanya dalam pertanyaan ini: Bagaimana cara mengecualikan file tertentu dari Android Studio gradle builds?

Tidak ada yang berhasil.

Setelah mencari solusi, saya pikir masalahnya adalah saya memiliki duplikasi dependensi. Jadi saya sudah mencoba yang berikut ini:


    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation ('com.android.support:appcompat-v7:22.2.1'){
            exclude module: 'support-v4'
        }
        implementation ('com.android.support:design:22.2.1')
        implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
    }

Dan ini:


    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation ('com.android.support:design:22.2.1'){
            exclude module: 'support-v7'
        }
        implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
    }

Saya tetap mengalami masalah yang sama.

Adakah yang bisa memberi tahu saya apa yang saya lakukan salah? Terima kasih atas antisipasi. :)

Laila Campos
sumber
Saya memiliki masalah yang sama di sini dengan aplikasi saya Roboyard di GitHub: stackoverflow.com/q/59130438/1069083 Mungkin Anda menemukan kesamaan di sana
rubo77

Jawaban:

22

Seperti yang dikatakan Rajen Raiyarela , buka File-> Project Structure-> Project-> Android Gradle Plugin Version dan turunkan versi dari 3.5.2 ke 3.5.1.

Laila Campos
sumber
8
Ini sebenarnya bukan solusi. Android Studio mengomel setiap waktu untuk meningkatkan ...
doctorram
Jawaban ini sudah usang, karena pemutakhiran ke gradle 3.5.3 bukannya tampaknya telah memperbaiki masalah
rubo77
6

Tetapkan dependensi proyek ke:

classpath 'com.android.tools.build:gradle:3.5.3'

atau yang terbaru.

Catatan: dengan melakukan ini, masalah saya telah teratasi.

Syed Daniyal Ali
sumber
Masalah saya dengan gradle 3.5.2 telah diselesaikan di 3.5.3 juga, tetapi perlu diperhatikan: Saya mendapatkan peringatan `Fitur Gradle yang sudah usang digunakan dalam versi ini, membuatnya tidak kompatibel dengan Gradle 6.0.`
rubo77
1

Masalah ini terjadi karena ketergantungan duplikat.
Periksa beberapa dependensi di aplikasi Gradle.

Srinivasan CP
sumber
Benar, ini masalahnya. Akan ada duplikat dependensi dalam file gradle Anda
MariusB
1
@Sivivasan, jika ada duplikat, maka itu harus diselesaikan dengan mengecualikan atau memilih terlebih dahulu dalam packagingOptions, tetapi hanya masalah dengan plugin Gradle. Saya belum melakukan verifikasi lebih tepat dan membuat aplikasi sampel untuk membuat ulang masalah untuk menambahkan permintaan di bugtracker untuk android studio.
Rajen Raiyarela
0

Baik mengemasnya sekali atau tidak sama sekali:

android {
    packagingOptions {
        pickFirst "META-INF/MANIFEST.MF"
        // exclude "META-INF/MANIFEST.MF"
    }
}
Martin Zeitler
sumber