Errore di immissione duplicata della gradazione: META-INF / MANIFEST.MF (o come eliminare un file dal vaso)


19

Ho clonato un repository github perché volevo studiare il codice, ma quando ho provato a costruirlo in Android Studio, ho riscontrato qualche problema. Dopo aver aggiunto il repository di google maven (come richiesto da Android Studio) e aver aggiornato la versione del plug-in Gradle e la versione di grado (rispettivamente alla 3.5.2 e alla 5.4.1), la compilazione non riesce a causa del seguente errore:

Causa: voce duplicata: META-INF / MANIFEST.MF

E questo, per essere più specifici:

Causato da: java.util.zip.ZipException: voce duplicata: META-INF / MANIFEST.MF

Ecco il mio file build.gradle a livello di progetto:


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

        }
    }

Ecco il mio file build.gradle del modulo (prima di provare qualsiasi cosa):


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

Ecco cosa ho provato finora:

  • Aggiungendo quanto segue alla sezione Android del mio file build.gradle del mio modulo:

    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'
                }
            }
        }
  • Aggiungendo questo:

    sourceSets.main.res.filter.exclude 'META-INF/MANIFEST'
        sourceSets.main.res.filter.exclude 'META-INF/MANIFEST.MF'
  • Anche questo:

    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'
        }
  • E questo:

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

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

Penso di aver provato principalmente tutto in questa domanda: come escludere determinati file dalle build di Android Studio Gradle?

Niente ha funzionato.

Dopo aver cercato una soluzione, penso che il problema sia che ho dipendenze duplicate. Quindi ho provato quanto segue:


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

E questo:


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

Ottengo ancora lo stesso errore.

Qualcuno potrebbe dirmi cosa sto facendo di sbagliato? Grazie in anticipo. :)


Ho lo stesso problema qui con la mia app Roboyard su GitHub: stackoverflow.com/q/59130438/1069083 Forse trovare similitudini ci
rubo77

Risposte:


22

Come ha detto Rajen Raiyarela , vai su File-> Struttura del progetto-> Progetto-> Versione plug-in Android Gradle e esegui il downgrade da 3.5.2 a 3.5.1.


8
Questa non è davvero una soluzione. Android Studio si tormenta ogni volta per l'aggiornamento ...
doctorram

Questa risposta è obsoleta, poiché un aggiornamento al livello 3.5.3 sembra invece aver risolto il problema
rubo77

6

Impostare le dipendenze del progetto su:

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

o l'ultimo.

Nota: facendo questo, il mio problema è stato risolto.


Il mio problema con la pendenza 3.5.2 è stato risolto anche nella 3.5.3, ma attenzione: ricevo l'avvertimento `In questa build sono state utilizzate funzionalità Gradle obsolete, rendendolo incompatibile con Gradle 6.0.`
rubo77

1

Questo problema si verifica a causa di dipendenze duplicate.
Controlla più dipendenze nell'app Gradle.


Corretto, questo è il problema. Ci saranno dipendenze duplicate nei tuoi file
gradle

1
@Srinivasan, se ci fossero duplicati, avrebbe dovuto essere risolto escludendo o prendendo prima in packagingOptions, ma si trattava solo del plugin Gradle. Devo ancora effettuare una verifica più precisa e creare un'app di esempio per rigenerare il problema per l'aggiunta di una richiesta in bugtracker per Android Studio.
Rajen Raiyarela,

0

Imballalo una volta o per niente:

android {
    packagingOptions {
        pickFirst "META-INF/MANIFEST.MF"
        // exclude "META-INF/MANIFEST.MF"
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.