Android Gradle Pluginでduplicate files during packaging of APKエラー

  • 40
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

gradleでapk作成時に"duplicate files during packaging of APK"エラーが発生しました。

Error:Gradle: duplicate files during packaging of APK /git/intellij/example/app/build/outputs/apk/app-debug-unaligned.apk
Error:Gradle: Execution failed for task ':app:packageDebug'.
> Duplicate files copied in APK META-INF/LICENSE.txt
    File 1: /Users/test/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.0/8873bd0bb5cb9ee37f1b04578eb7e26fcdd44cb0/commons-lang3-3.0.jar
    File 2: /Users/test/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.0/8873bd0bb5cb9ee37f1b04578eb7e26fcdd44cb0/commons-lang3-3.0.jar

これはAndroid Gradle Pluginの問題でバージョン0.7あたりから知られているようです。

http://stackoverflow.com/questions/20673625/android-gradle-plugin-0-7-0-duplicate-files-during-packaging-of-apk

Goolge codeのAndroidプロジェクトでも下記のIssueが上がっていました。

https://code.google.com/p/android/issues/detail?id=61573#c14

依存ライブラリに指定した外部jarファイルを内部で展開した時に複数のjarファイルでリソースファイルなどのパスが競合してエラーになっているようです。回避策として、Android Gradle Plugin 0.7.1から導入されたpackagingOptionsのオプションで解消できるようです。いまいち腑に落ちませんが、このオプションに重複エラーになるリソースファイルを指定します。

${module_root}/build.gradle
android {
    // 省略
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
    }
}

NOTICE.txtなども重複しやすいので追加しておくと良さそうです。大文字小文字が違っていたり拡張子.txtがなかったりする場合もありますのでそれらを全部追加しておけば良いかもしれません。あとはエラーが起きた時にその都度追加しましょう。

${module_root}/build.gradle
android {
    // 省略
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
}