web-dev-qa-db-fra.com

Erreur d'entrée en double Gradle: META-INF / MANIFEST.MF (ou comment supprimer un fichier du pot)

J'ai cloné un référentiel github parce que je voulais étudier le code, mais quand j'ai essayé de le construire dans Android Studio, j'ai rencontré des problèmes. Après avoir ajouté le référentiel google maven (comme demandé) par Android Studio) et en mettant à jour la version du plug-in Gradle et la version de la note (vers 3.5.2 et vers 5.4.1, respectivement), la construction échoue en raison de l'erreur suivante:

Cause: entrée en double: META-INF/MANIFEST.MF

Et ceci, pour être plus précis:

Provoqué par: Java.util.Zip.ZipException: entrée en double: META-INF/MANIFEST.MF

Voici mon fichier build.gradle au niveau du projet:


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

        }
    }

Voici mon fichier build.gradle de module (avant d'essayer quoi que ce soit):


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

Voici ce que j'ai essayé jusqu'à présent:

  • Ajout de ce qui suit à la section Android de mon module build.gradle:

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

  • Ajout de ceci:

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

  • Aussi ceci:

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

  • Et ça:

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

  • Ce:

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

Je pense que j'ai essayé presque tout dans cette question: Comment exclure certains fichiers de Android Builds Studio Gradle?

Rien n'a fonctionné.

Après avoir cherché une solution, je pense que le problème est que j'ai des dépendances dupliquées. J'ai donc essayé ce qui suit:


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

Et ça:


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

Je reçois toujours la même erreur.

Quelqu'un pourrait-il me dire ce que je fais mal? Merci d'avance. :)

19
Laila Campos

Soit l'emballer une fois ou pas du tout:

Android {
    packagingOptions {
        pickFirst "META-INF/MANIFEST.MF"
        // exclude "META-INF/MANIFEST.MF"
    }
}
0
Martin Zeitler