复制文件,同时包括带有gradle的butterknife

And*_*rte 31 android gradle android-gradle-plugin butterknife

我有一个基本的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
Run Code Online (Sandbox Code Playgroud)

我的依赖项看起来像这样:

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'])
}
Run Code Online (Sandbox Code Playgroud)

Xav*_*het 81

该插件的更高版本将告诉您如何解决此问题.我想我们在0.8中引入了修复,所以你应该升级.然后修复是把它放在你的build.gradle

android {
    packagingOptions {
        exclude 'META-INF/services/javax.annotation.processing.Processor'
    }
}
Run Code Online (Sandbox Code Playgroud)

这将从包装中排除此文件,因为它实际上并不需要在APK中.

  • 这不是_workaround_.这是正常的解决方案.使用0.9.2,您还可以决定打包其中一个文件.请参阅http://tools.android.com/tech-docs/new-build-system (3认同)

Nim*_*a G 15

这是因为你写compiledagger-compiler,替换它,provided问题将得到解决.

compile 'com.squareup.dagger:dagger:1.2.1'
provided 'com.squareup.dagger:dagger-compiler:1.2.1'
Run Code Online (Sandbox Code Playgroud)


Zac*_*ack 7

版本> = 0.9.1的Gradle构建工具中的最佳选项可能是:

android {
    packagingOptions {
        pickFirst 'META-INF/services/javax.annotation.processing.Processor'
    }
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅Android工具项目页面:新建系统.

编辑:最后请注意,如果您开始遇到生成的代码问题,请确保正确构建依赖项.我最终删除了处理器行的任何排除,并构建了我的注释处理依赖项,如:

compile "org.parceler:parceler-api:0.2.15"
apt "org.parceler:parceler:0.2.15"
Run Code Online (Sandbox Code Playgroud)

provided 'com.squareup.dagger:dagger-compiler:1.2.2'
apt 'com.squareup.dagger:dagger-compiler:1.2.2'
Run Code Online (Sandbox Code Playgroud)