Erreur: fichiers en double lors de l'empaquetage de l'APK

144

Android Studio. J'obtiens ce genre d'erreur lors de l'exécution de l'application.

Error:Execution failed for task ':app:packageDebug'. Duplicate files copied in APK META-INF/notice.txt

build.gradle

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/ASL2.0'
    }

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:19.0.1'
    compile 'com.j256.ormlite:ormlite-android:4.48'
    compile 'org.codehaus.jackson:jackson-core-asl:1.9.13'
    compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
    compile 'com.octo.android.robospice:robospice:1.4.11'
    compile 'com.octo.android.robospice:robospice-spring-android:1.4.11'
}

Comment puis-je corriger cette erreur?

ÉDITÉ

Ces options d'exclusion ont résolu mon problème:

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
    }
Robertas Setkus
la source
duplication possible de fichiers en double copiés (Android Studio 0.4.0)
Scott Barta
2
Ce n'est pas un double! D'autres questionneurs ont corrigé leur erreur en ajoutant l'option d'exclusion. Mais comme vous pouvez tous le voir, j'ai ajouté ces options et mon problème n'a pas disparu.
Robertas Setkus
y a-t-il une idée à ce sujet? stackoverflow.com/questions/30364950/…
Jithu PS
Cela a également résolu le mien. merci
Reshma

Réponses:

56

Je pense que la comparaison des chaînes est sensible à la casse. essayer avecexclude 'META-INF/notice.txt'

Xavier Ducrohet
la source
Ma réponse était d'essayer avec notice.txtau lieu de NOTICE.txt? Bien que l'erreur semble en fait différente de celle où se produit l'exclusion. Avez-vous un META-INF/notice.txtfichier dans votre src/main/resources/?
Xavier Ducrohet
Désolé Xavier. Je n'ai pas compris votre réponse alors. Maintenant je peux voir ce que tu voulais dire. J'ai essayé de changer, exclude 'META-INF/notice.txt'mais la console m'a alors demandé cela Duplicate files copied in APK META-INF/NOTICE.txt. Etrange, non? Il n'y a pas de resourcesrépertoire sous C:\PathToAndroidStudioProject\src\main.
Robertas Setkus
1
Si vous mettez les deux exclude 'META-INF/notice.txt'et exclude 'META-INF/NOTICE.TXT', ça marche?
Xavier Ducrohet
Merci. Cela a aidé. :)
Robertas Setkus
1
dans le fichier build.gradle dans la partie 'android', essayez d'ajouter: packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' }
Krystian
22

Je pense que vous devez inclure uniquement ces options dans build.gradle :

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
    }
Gent Berani
la source
1
Enfin, après avoir implémenté celui-ci, j'ai résolu cette question. Thanks man :)
Hardik Joshi
10

Réponse courte:

Voir la sortie détaillée de gradle en utilisant gradle assembleet noter les fichiers qui sont en double et les exclure en utilisant:

android {
  packagingOptions {
    exclude 'META-INF/notice.txt'
  }
}

Longue réponse:

Exécutez la assembletâche gradle à partir de la ligne de commande pour une sortie détaillée:

./gradlew assemble || gradle assemble

Cela montre automatiquement ce qu'il faut exclure:

studioWorkspace/CCDroid git:(master)  ± ./gradlew assembleDebug
:app:preBuild
:app:compileDebugNdk UP-TO-DATE
:app:preDebugBuild
:app:checkDebugManifest
:app:preReleaseBuild
:app:prepareComAndroidSupportAppcompatV72200Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42200Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJava UP-TO-DATE
:app:preDexDebug UP-TO-DATE
:app:dexDebug UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:validateDebugSigning
:app:packageDebug
Error: duplicate files during packaging of APK /Users/shubham/code/studioProjects/CCDroid/app/build/outputs/apk/app-debug-unaligned.apk
    Path in archive: LICENSE
    Origin 1: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar
    Origin 2: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.mockito/mockito-all/1.8.4/5c97d8b6e715ed941aeb93d6fc401ab3eb18a566/mockito-all-1.8.4.jar
You can ignore those files in your build.gradle:
    android {
      packagingOptions {
        exclude 'LICENSE'
      }
    }
:app:packageDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:packageDebug'.
> Duplicate files copied in APK LICENSE
    File 1: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar
    File 2: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 11.863 secs

Voir cette partie en sortie:

android {
  packagingOptions {
    exclude 'LICENSE'
  }
}

Il affiche même la liste des dépendances à l'origine des fichiers dupliqués (LICENCE). Voir les lignes avec Origin # dans la sortie.

Shubham Chaudhary
la source
y a-t-il une idée de ces problèmes stackoverflow.com/questions/30364950/…
Jithu PS
1
J'ai presque ignoré votre réponse, même si c'était la bonne pour moi. Je suggérerais de placer la réponse en haut de l'article: android {packagingOptions {exclude 'LICENSE'}} suivi de l'explication et de la sortie longue gradle (qui n'est généralement pas pertinente pour la réponse. Cette partie est Vous pouvez ignorer ces fichiers dans votre build.gradle: android {packagingOptions {exclude 'LICENSE'}}
gorbysbm
Terminé. Merci beaucoup @gorbysbm.
Shubham Chaudhary
6

Ajoutez ceci dans votre fichier build.gradle ...

packagingOptions {
exclude 'META-INF/NOTICE' // will not include NOTICE file
exclude 'META-INF/LICENSE' // will not include LICENSE file
exclude 'META-INF/DEPENDENCIES' // will not include LICENSE file
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}

comme ça...

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
    applicationId "your package name"
    minSdkVersion 14
    targetSdkVersion 25
    versionCode 30
    versionName "3.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
packagingOptions {
    exclude 'META-INF/NOTICE' // will not include NOTICE file
    exclude 'META-INF/LICENSE' // will not include LICENSE file
    exclude 'META-INF/DEPENDENCIES' // will not include LICENSE file
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
}
}
vrbsm
la source
3

C'est plus d'une erreur, vous avez raison.

Sous apply plugin: 'android-library'

Ajoute ça :: android { packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' } }

La première erreur est due aux fichiers en double, la deuxième aux fichiers LICENCE et NOTICE. Cela fonctionnera après

EDIT :: Voir mon article ici sur l'identification des problèmes :: Plugin Android Gradle 0.7.0: "fichiers en double lors de l'empaquetage de l'APK"

Pian0_M4n
la source
y a-t-il une idée de ces problèmes stackoverflow.com/questions/30364950/…
Jithu PS
1

cela fonctionne pour moi

android {
...

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
    }
}
Joolah
la source
1

Fait intéressant, lorsque j'ai supprimé cette ligne de gradle, cela a fonctionné:

compile 'org.apache.commons:commons-lang3:3.3.1'
Paresseux
la source
0

J'ai dû jouer un peu pour trouver le bon emplacement pour les options d'emballage. Résolution du problème de fichier en double pour un conflit entre jackson-core: 2.2.2 et jackson-databind: 2.2.2 De plus, le DSL semble avoir changé récemment.Ainsi, dans le récent Android Studio 1.4.1 avec buildTools 23, vous devez mettre android. des options de packaging au même niveau que compileOptions ET PAS à l'intérieur d'un modèle {android { accolades!

model { 
   android {
        compileSdkVersion = 21
        buildToolsVersion = "23.0.1"

        defaultConfig.with {
              applicationId = "com.android.sensorgraph"
              minSdkVersion.apiLevel = 21
              targetSdkVersion.apiLevel = 22
        }
   }

   android.packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
   }
   compileOptions.with {
        sourceCompatibility = JavaVersion.VERSION_1_7
        targetCompatibility = JavaVersion.VERSION_1_7
   }
} 
UV
la source