如何解决java.util.zip.ZipException?

当我尝试debugging和部署我的Android应用程序(在Android Studio 0.9中),我得到以下错误:

Execution failed for task ':app:packageAllDebugClassesForMultiDex'. java.util.zip.ZipException: duplicate entry: android/support/multidex/BuildConfig.class 

这里要说清楚的是我的行动简史:

  1. 今天上午这个项目工作正常
  2. 增加了一些额外的类和方法
  3. 打破限制并收到此错误: Unable to execute dex: method ID not in [0, 0xffff]: 65536
  4. 决定添加multiDex支持我的项目作为减less依赖不是一个选项

从那时起,我不断收到multiDex添加到我的项目后,通过遵循这个post后描述的错误使用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库以及我的/ libs文件夹中的几个jar子:

  • Android的asynchronousHTTP-1.4.6.jar
  • 吉斯-3.0-no_aop.jar
  • jsr305-1.3.9.jar
  • roboguice-2.0.jar

任何意见,我怎么能解决这个问题,而无需删除任何我所需的依赖关系,欢迎!

编辑:这是一个错误,修复是由于。 请参阅https://code.google.com/p/android/issues/detail?id=81804

我也有这个问题,我没有答案。 但是,我可以补充一下:

BuildConfig类是作为构build过程的一部分生成的魔法类。 出于某种原因,在mutildex-1.0.0multidex-instrumentation-1.0.0 aars中都存在一个具有相同完全限定名称( android.support.multidex.BuildConfig )的版本。

我不相信我们做了什么错事。 我认为这是一个前沿的症状。 我提出了一个错误报告 。

线程有点老,但我也有这个错误。

我的问题是我在我的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' 

要诊断和解决这个问题,运行这个gradle命令:

 ./gradlew clean app:dependencies 

这将在树中列出您的应用程序中的所有依赖关系。 search违规重复类的结果并添加

 compile('naughty.library') { exclude group: 'foo', module: 'bar' } 

删除重复。

我最近有这个错误,在Android工作室中查看我的“外部库”之后,我的一个库被包含在两个版本号下。 (在这种情况下,它是线运行时1.5.1和1.5.2)。

我build议在项目视图中查看“外部库”,查看是否有任何冗余库。 它还包括传递依赖关系,所以你可能会发现有些令你惊讶的东西。

1.更新谷歌播放服务

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' } 

在你的情况下,它可以是一些其他的依赖关系 – 只是一个接一个地sorting,你会发现谁有传递multidex依赖。

如果启用multiDex,则应该停止执行afterEvaluate {}的逻辑。 多dex支持将照顾你的主要dex列表。

这种types的错误,如重复的条目,当你有一个类在多个地方。 为了克服这个问题,简单的search项目中显示重复条目的类。 它会告诉你,这个class级不止一个地方的所有path。 在Windows中,CNTRL + N是用于在文件中search的键盘快捷键。 简单的尝试删除其中的lib或文件,并解决问题。

 tools:overrideLibrary="com.google.android.gms.location, com.google.android.gms.internal" 

对我来说(我猜你应该改变你使用的任何谷歌图书馆的位置)

你正在像这样添加一个库
(一个)。 编译文件('libs / YOUR_LIBRARY.jar')
而且这个库包已经在你的代码中可用了。
评论它喜欢或删除这一行
//编译文件('libs / YOUR_LIBRARY.jar')

如何在项目中知道库的副本
解压缩“YOUR_LIBRARY.jar”并在代码中看到相同的类名。