如何解决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
这里要说清楚的是我的行动简史:
- 今天上午这个项目工作正常
- 增加了一些额外的类和方法
- 打破限制并收到此错误:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
- 决定添加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.0
和multidex-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”并在代码中看到相同的类名。
- 你如何closuresandroid studio中的版本控制?
- 如何使用Android Studio获取代码覆盖率?
- OS X – 无法启动Git:/ usr / bin / git可能是Git可执行文件的path无效
- 如何将项目同步到Android Studio的GitHub?
- Android:app:srcCompat =“”和android:src =“”有什么区别?
- Android .idea / misc.xml的languageLevel标记不断更改JDK
- 在Android Studio中添加资产文件夹
- Android工作室不识别源文件夹
- 如何添加一个Android Studio项目到GitHub