繁体   English   中英

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

[英]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

为了清楚起见,这是我行动的简要历史:

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

从那时起,我继续在将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:

  • Android的异步HTTP-1.4.6.jar
  • 吉斯-3.0-no_aop.jar
  • jsr305-1.3.9.jar
  • roboguice-2.0.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.0multidex-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM