我有一个基本的Android应用程序,我使用Android Studio创建,我在向我的构建中添加butterknife时遇到了问题。我收到这个错误:
Error:: duplicate files during packaging of APK C:\apps\orion\app\build\apk\app-debug-unaligned.apk
Error:Execution failed for task ':app:packageDebug'.
> Duplicate files copied in APK META-INF/services/javax.annotation.processing.Processor
File 1: C:\Users\andres\.gradle\caches\modules-2\files-2.1\com.jakewharton\butterknife\4.0.1\f43b36925363701633d01adb8e54df7150397a78\butterknife-4.0.1.jar
File 2: C:\Users\andres\.gradle\caches\modules-2\files-2.1\com.jakewharton\butterknife\4.0.1\f43b36925363701633d01adb8e54df7150397a78\butterknife-4.0.1.jar
我的依赖关系看起来像这样:
dependencies {
compile 'com.android.support:support-v4:+'
compile 'com.squareup.dagger:dagger-compiler:1.2.1'
compile 'com.squareup.dagger:dagger:1.2.1'
compile 'com.jakewharton:butterknife:4.0.1'
compile 'com.google.android.gms:play-services:4.0.30'
compile 'com.android.support:appcompat-v7:+'
compile project(':lib')
compile fileTree(dir: 'libs', include: ['*.jar'])
}
答案 0 :(得分:82)
该插件的更高版本将告诉您如何解决此问题。我想我们在0.8中引入了修复,所以你应该升级。然后修复是将其放入build.gradle
android {
packagingOptions {
exclude 'META-INF/services/javax.annotation.processing.Processor'
}
}
这会将此文件从包装中排除,因为APK中实际上并不需要它。
答案 1 :(得分:15)
那是因为您为compile
撰写了dagger-compiler
,将其替换为provided
,问题将得到解决。
compile 'com.squareup.dagger:dagger:1.2.1'
provided 'com.squareup.dagger:dagger-compiler:1.2.1'
答案 2 :(得分:7)
Gradle构建工具的版本> = 0.9.1中的最佳选项可能是:
android {
packagingOptions {
pickFirst 'META-INF/services/javax.annotation.processing.Processor'
}
}
有关详情,请参阅Android工具项目页面:New Build System。
编辑: 最后请注意,如果您开始遇到生成的代码问题,请确保正确构建您的依赖项。我最终删除了处理器行的任何排除,并构建了我的注释处理依赖项,如:
compile "org.parceler:parceler-api:0.2.15"
apt "org.parceler:parceler:0.2.15"
和
provided 'com.squareup.dagger:dagger-compiler:1.2.2'
apt 'com.squareup.dagger:dagger-compiler:1.2.2'
答案 3 :(得分:1)
如果在应用上述给定解决方案后仍然遇到与我相同的问题,那么如果您使用的是 glide 库,则将 glide 的版本更改为最大。 例如。
implementation 'com.github.bumptech.glide:glide:4.10.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0'