Aymeric Aymeric - 1 year ago 112
Android Question

How to resolve java.util.zip.ZipException?

Whever I try to debug and deploy my android application (in Android Studio 0.9) I get the following error:

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

To make things clear here is a brief history of my actions:

  1. This morning the project was working fine

  2. Added some additional classes and methods

  3. Broke the limit and received this error:
    Unable to execute dex: method ID not in [0, 0xffff]: 65536

  4. Decided to add multiDex support to my project as reducing the dependencies was not an option

Since then I keep getting the described error just after adding multiDex to my project by following this SO post Using Gradle to split external libraries in separated dex files to solve Android Dalvik 64k methods limit.

Here is my build.gradle file:

apply plugin: 'com.android.application'

repositories {

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

I also have another project dependencies to use the viewPagerIndicator library as well as a few jars in my /libs folder:

  • android-async-http-1.4.6.jar

  • guice-3.0-no_aop.jar

  • jsr305-1.3.9.jar

  • roboguice-2.0.jar

Any advice on how I could resolve this problem without removing any of my needed dependencies is welcomed !

Answer Source

Edit: This is a bug and a fix is due. See https://code.google.com/p/android/issues/detail?id=81804

I have this problem too, and I don't have an answer. But here's what I can add:

The class BuildConfig is a magic class generated as part of the build process. For some reason, there exists a version with the same fully-qualified name (android.support.multidex.BuildConfig) in both mutildex-1.0.0 and multidex-instrumentation-1.0.0 aars.

I don't believe we have done anything wrong. I think this is a symptom of being on the cutting-edge. I raised a bug report.