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ę :)


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.


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.


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.


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"
    }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.