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あたりから知られているようです。
Goolge codeのAndroidプロジェクトでも下記のIssueが上がっていました。
依存ライブラリに指定した外部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'
}
}