我已经在处理以下问题几个小时了,但还没有想出解决问题的方法。 我已经尝试了Stack Overflow中的以下修复程序(Android Studio 更新到 1.0 会在 Gradle 插件 v0.13.1 之后损坏 MultiDex 和重复 Zip 条目),但它们都不起作用。
尝试构建程序时出现以下错误:
Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
> java.util.zip.ZipException: duplicate entry: org/apache/commons/io/CopyUtils.class
该错误似乎表明 commons-io 在构建过程中被包含两次
我正在使用Android Studio和Gradle来包含多个Robospice依赖项。 这是我的 Gradle 构建文件的依赖项部分:
dependencies {
compile 'com.android.support:multidex:1.0.1'
compile 'com.android.support:support-v4:21.0.3'
compile 'com.google.android.gms:play-services:6.5.87'
compile'com.google.api-client:google-api-client-android:1.19.0'
// You must install or update the Google Repository through the SDK manager to use this dependency.
// The Google Repository (separate from the corresponding library) can be found in the Extras category.
//compile 'com.google.android.gms:play-services:4.3.23'
compile fileTree(dir: 'libs', include: ['*.jar'])
compile "com.jakewharton:butterknife:${butterknifeVersion}"
compile 'com.sun.jersey:jersey-bundle:1.8'
compile 'com.google.code.gson:gson:2.3'
compile 'org.codehaus.jackson:jackson-core-asl:1.9.0'
compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.0'
compile ('com.octo.android.robospice:robospice:1.4.14'){
exclude module: 'commons-io'
exclude group: 'commons-io'
}
compile ('com.octo.android.robospice:robospice-spring-android:1.4.14'){
exclude group: 'org.apache.commons', module: 'commons-io'
}
compile 'com.squareup.okhttp:okhttp:2.1.0'
compile ('com.octo.android.robospice:robospice-google-http-client:1.4.14'){
exclude module: 'xpp3'
exclude group: 'stax'
}
compile 'org.scribe:scribe:1.3.5'
compile files("$buildDir/native-libs/native-libs.jar")
}
使用 "gradlew -q dependencies app:dependencies" 命令查看项目的依赖树表明 com.octo.android.robospice:robospice:1.4.14 依赖于 commons-io 库。 以下是项目依赖项树的相关代码段:
+--- com.octo.android.robospice:robospice:1.4.14
| --- com.octo.android.robospice:robospice-cache:1.4.14
| +--- org.apache.commons:commons-lang3:3.3.2
| --- org.apache.commons:commons-io:1.3.2
| --- commons-io:commons-io:1.3.2
即使我从 gradle 构建文件中的所有与 Robospice 相关的依赖项中排除了 commons-io,该依赖项仍然列出。 我还尝试将组名从commons-io更改为org.apache.commons,但也没有奏效。
在我解决这个问题之前,我的项目处于停滞状态,我将不胜感激我能得到的任何帮助。
这是 Robospice 中已知且已修复的问题,由 Gradle 2.1 的底层问题引起:https://github.com/stephanenicolas/robospice/issues/365。该修复程序将在下一个版本中发布。
您可以通过从所有 Robospice 依赖项中排除org.apache.commons:commons-io
并手动包含commons-io:commons-io:1.3.2
来解决此问题。喜欢这个:
// workaround (https://github.com/stephanenicolas/robospice/issues/365)
// remove when robospice updates to 1.4.15+
compile ('com.octo.android.robospice:robospice-retrofit:1.4.14') {
exclude group: 'org.apache.commons', module: 'commons-io'
}
compile ('com.octo.android.robospice:robospice-ormlite:1.4.14') {
exclude group: 'org.apache.commons', module: 'commons-io'
}
compile 'commons-io:commons-io:1.3.2'
我想这个问题需要一种结构化的方法来解决这个问题,而上述两个答案都无法提供。
步骤1:找出哪个外部库导致重复的zip条目。从安卓工作室的终端运行以下命令。 gradlew -q dependencies app:dependencies
就我而言,图像选择库('net.yazeed44.imagepicker:imagepicker:1.3.0')导致了重复条目。
第 2 步:添加代码以仅排除该库的共享资源
compile ('net.yazeed44.imagepicker:imagepicker:1.3.0'){
exclude group: 'org.apache.commons', module: 'commons-io'
}
第 3 步:包括更新的共享资源库。 compile 'commons-io:commons-io:1.3.2'
现在你就可以走了。