[英]How to resolve java.util.zip.ZipException?
当我尝试调试和部署我的Android应用程序(在Android Studio 0.9中)时,我收到以下错误:
Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
java.util.zip.ZipException: duplicate entry: android/support/multidex/BuildConfig.class
为了清楚起见,这是我行动的简要历史:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
从那时起,我继续在将multiDex添加到我的项目之后,通过遵循此SO帖子使用Gradle将外部库拆分为单独的dex文件来解决Android Dalvik 64k方法限制 。
这是我的build.gradle文件:
apply plugin: 'com.android.application'
repositories {
jcenter()
}
android {
compileSdkVersion 21
buildToolsVersion '21.1.0'
defaultConfig {
applicationId "com.stackoverflow.application"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
multiDexEnabled = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dexOptions {
preDexLibraries = false
}
}
afterEvaluate {
tasks.matching {
it.name.startsWith('dex')
}.each { dx ->
if (dx.additionalParameters == null) {
dx.additionalParameters = []
}
dx.additionalParameters += '--multi-dex'
dx.additionalParameters += "--main-dex-list=$projectDir/<filename>".toString() // enable the main-dex-list
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':viewPagerIndicatorLibrary')
compile 'com.google.android:multidex:0.1'
compile 'com.j256.ormlite:ormlite-android:4.48'
compile 'com.j256.ormlite:ormlite-core:4.48'
compile 'de.greenrobot:eventbus:2.2.1'
compile 'se.emilsjolander:stickylistheaders:2.5.1'
compile 'joda-time:joda-time:2.5'
compile 'com.makeramen:roundedimageview:1.4.0'
compile 'javax.inject:javax.inject:1'
compile 'com.squareup.picasso:picasso:2.3.4'
compile 'com.googlecode.libphonenumber:libphonenumber:6.3.1'
compile('com.google.api-client:google-api-client-gson:1.18.0-rc') {
exclude module: 'httpclient'
}
compile 'com.google.android.gms:play-services:6.1.71'
compile('com.google.api-client:google-api-client:1.17.0-rc') {
exclude(group: 'xpp3', module: 'xpp3')
exclude(group: 'org.apache.httpcomponents', module: 'httpclient')
exclude(group: 'junit', module: 'junit')
exclude(group: 'com.google.android', module: 'android')
}
compile('com.google.api-client:google-api-client-android:1.17.0-rc') {
exclude(group: 'com.google.android.google-play-services', module: 'google-play-services')
}
compile('com.google.http-client:google-http-client-android:1.17.0-rc') {
exclude(group: 'com.google.android', module: 'android')
}
compile 'com.google.guava:guava:18.0'
}
我还有另一个项目依赖项来使用viewPagerIndicator库以及my / libs文件夹中的几个jar:
我欢迎任何有关如何解决此问题而不删除任何所需依赖项的建议!
线程有点旧,但我也得到了这个错误。
我的问题是我在gradle文件中使用了两个不同的com.google.android.gms:play-services版本。
compile 'com.google.android.gms:play-services-gcm:7.5.0'
compile 'com.google.android.gms:play-services-analytics:7.3.0' // WRONG!
确保您始终使用相同的版本:
compile 'com.google.android.gms:play-services-gcm:7.5.0'
compile 'com.google.android.gms:play-services-analytics:7.5.0'
编辑:这是一个错误,修复到期。 请参阅https://code.google.com/p/android/issues/detail?id=81804
我也有这个问题,我也没有答案。 但这是我可以添加的内容:
BuildConfig
类是一个魔术类,是作为构建过程的一部分生成的。 出于某种原因,在mutildex-1.0.0
和multidex-instrumentation-1.0.0
aars中都存在具有相同完全限定名称( android.support.multidex.BuildConfig
)的版本。
我不相信我们做错了什么。 我认为这是一个处于最前沿的症状。 我提出了一个错误报告 。
要诊断并修复此问题,请运行以下gradle命令:
./gradlew clean app:dependencies
这将在树中列出您应用中的所有依赖项。 搜索有问题的重复类的结果并添加
compile('naughty.library') {
exclude group: 'foo', module: 'bar'
}
删除副本。
我最近遇到了这个错误,在Android工作室查看我的“外部库”之后,事实证明我的一个库已被包含在两个版本号下。 (在这种情况下,它是wire-runtime 1.5.1和1.5.2)。
我建议的是在Project视图中查看“External Libraries”,看看那里是否有任何冗余库。 它还包含传递依赖关系,因此您可能会发现令您惊讶的内容。
1.update谷歌播放服务
2.加
compile 'com.google.android.gms:play-services-fitness:8.1.0'
compile 'com.google.android.gms:play-services-wearable:8.1.0'
而不是compile 'com.google.android.gms:play-services:8.1.0'
在build.gradle文件中。
3。
defaultConfig {
multiDexEnabled true
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
在我的情况下,原因是Facebook Android SDK。 只是排除传递依赖:
compile('com.facebook.android:facebook-android-sdk:+') {
exclude group: 'com.android.support', module: 'multidex'
}
在你的情况下,它可能是一些其他的依赖 - 只需逐个排序,你会发现具有传递multidex
依赖的multidex
。
如果启用multiDex,则应该在afterEvaluate {}
停止执行逻辑。 multi-dex支持将为您处理主要的dex列表。
当某个类位于多个位置时,会发生类似重复输入的错误。 要解决此问题,只需搜索显示项目中重复条目的类。 它将显示此类出现多个地方的所有路径。 在Windows中CNTRL + N是用于在文件中搜索的键盘快捷键。 简单的尝试删除其中一个lib或文件,问题解决了。
tools:overrideLibrary="com.google.android.gms.location, com.google.android.gms.internal"
我的诀窍(我想你应该用你使用的任何谷歌库改变位置)
您正在添加这样的库
(一个)。
并且您的代码中已经提供了此库包。
评论它或删除此行
如何知道项目中库的重复副本:
解压缩您的“YOUR_LIBRARY.jar”并在代码中看到相同的类名。
转到File/Invalidate Chaches/Restart
,您的问题已解决
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.