Błąd stopniowego powielania wpisu: META-INF / MANIFEST.MF (Lub jak usunąć plik ze słoika)

19

Sklonowałem repozytorium github, ponieważ chciałem przestudiować kod, ale kiedy próbowałem go zbudować w Android Studio, miałem pewne problemy. Po dodaniu repozytorium google maven (zgodnie z monitem Android Studio) i zaktualizowaniu zarówno wersji wtyczki Gradle, jak i wersji ocen (odpowiednio do wersji 3.5.2 i 5.4.1), kompilacja kończy się niepowodzeniem z powodu następującego błędu:

Przyczyna: zduplikowany wpis: META-INF / MANIFEST.MF

A ściślej mówiąc:

Przyczyna: java.util.zip.ZipException: zduplikowany wpis: META-INF / MANIFEST.MF

Oto plik build.gradle mojego projektu:


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

        }
    }

Oto mój moduł build.gradle plik (przed próbą czegokolwiek):


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

Oto, co próbowałem do tej pory:

  • Dodanie następującego do sekcji Androida mojego pliku build.gradle modułu:

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

  • Dodanie tego:

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

  • Także to:

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

  • I to:

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

  • To:

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

Myślę, że próbowałem głównie wszystkiego w tym pytaniu: Jak wykluczyć niektóre pliki z kompilacji stopni Android Studio?

Nic nie działało.

Po znalezieniu rozwiązania wydaje mi się, że problem polega na tym, że zduplikowałem zależności. Próbowałem więc:


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

I to:


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

Nadal pojawia się ten sam błąd.

Czy ktoś mógłby mi powiedzieć, co robię źle? Z góry dziękuję :)

Laila Campos
źródło
Mam ten sam problem z moją aplikacją Roboyard na GitHub: stackoverflow.com/q/59130438/1069083 Może znajdziesz tam podobieństwa
rubo77

Odpowiedzi:

22

Jak powiedział Rajen Raiyarela , przejdź do Plik-> Struktura projektu-> Projekt-> Wersja wtyczki Gradle dla Androida i zmień jej wersję z 3.5.2 na 3.5.1.

Laila Campos
źródło
8
To naprawdę nie jest rozwiązanie. Android Studio dokucza za każdym razem, gdy trzeba zaktualizować ...
doctorram
Ta odpowiedź jest nieaktualna, ponieważ wydaje się, że zamiast tego aktualizacja do klasy 3.5.3 rozwiązała problem
rubo77
6

Ustaw zależności projektu na:

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

lub najnowszy.

Uwaga: w ten sposób mój problem został rozwiązany.

Syed Daniyal Ali
źródło
Mój problem z klasą 3.5.2 również został rozwiązany w wersji 3.5.3, ale należy pamiętać: pojawia się ostrzeżenie: „W tej wersji użyto
przestarzałych
1

Ten problem występuje z powodu zduplikowanych zależności.
Sprawdź wiele zależności w aplikacji Gradle.

Srinivasan CP
źródło
Prawidłowo, to jest problem. W twoich plikach
ocen
1
@Srinivasan, jeśli były duplikaty, to powinno być rozwiązane przez wykluczenie lub pickfirst w packageOptions, ale problem dotyczy tylko wtyczki Gradle. Muszę jeszcze dokładniej zweryfikować i utworzyć przykładową aplikację, aby ponownie wygenerować problem z dodaniem żądania w Bugtrackerze dla Androida Studio.
Rajen Raiyarela,
0

Spakuj go raz lub wcale:

android {
    packagingOptions {
        pickFirst "META-INF/MANIFEST.MF"
        // exclude "META-INF/MANIFEST.MF"
    }
}
Martin Zeitler
źródło