如何解决 Android 中的“TransformException:java.util.zip.ZipException:重复条目”?

Posted

技术标签:

【中文标题】如何解决 Android 中的“TransformException:java.util.zip.ZipException:重复条目”?【英文标题】:How to resolve "TransformException: java.util.zip.ZipException: duplicate entry" in Android? 【发布时间】:2016-06-18 19:03:51 【问题描述】:

错误描述:

错误:任务执行失败 ':app:transformClassesWithJarMergingForDebug'。 > com.android.build.api.transform.TransformException: java.util.zip.ZipException:重复条目: com/google/api/client/http/AbstractInputStreamContent.class

这是我的 gradle 代码

apply plugin: 'com.android.application'

android 
compileSdkVersion 23
buildToolsVersion "23.0.3"

defaultConfig 
    applicationId "com.richwebs.user.hohoride"
    minSdkVersion 15
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    multiDexEnabled true

buildTypes 
    release 
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    


packagingOptions
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'



dependencies 
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile('com.google.api-client:google-api-client-android:1.20.0') 
    exclude group: 'org.apache.httpcomponents'


compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.google.android.gms:play-services:9.0.2'
compile 'com.google.android.gms:play-services-base:9.0.2'
compile 'com.google.android.gms:play-services-analytics:9.0.2'
compile 'com.google.android.gms:play-services-maps:9.0.2'
compile 'com.mcxiaoke.volley:library-aar:1.0.0'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.google.android.gms:play-services-ads:9.0.2'
compile 'com.google.android.gms:play-services-auth:9.0.2'
compile 'com.google.android.gms:play-services-gcm:9.0.2'
compile group: 'commons-io', name: 'commons-io', version: '2.0.1'


android 
useLibrary 'org.apache.http.legacy'

【问题讨论】:

先告诉我你应用了dexConfig吗? 不,我没有使用 dexconfig 否则把整个 gradle.build 代码.. 所以我可以建议你你必须实现什么 是的,我编辑了我的代码,请帮助 【参考方案1】:

有两种方法可以解决这个问题

    如果您的应用中的方法引用超过其限制,则像这样增加堆大小。

dexOptions preDexLibraries = 假 javaMaxHeapSize "4g"

并像这样启用 mutidexSupport:

defaultConfig 

        multiDexEnabled true
    

dependencies    
    compile 'com.android.support:multidex:1.0.1'

并在清单文件中设置名称属性:

<application
        android:name="android.support.multidex.MultiDexApplication" >
</application>
    如果这不起作用,那么您只有一个选项,并且它在您的 gradle 文件中排除重复的库。此错误称为“已添加”,当您在 lib 中添加 .jar 文件时会发生此错误。文件夹并为此设置 gradle 依赖项。

这是我完整的 gradle 文件代码..

apply plugin: 'com.android.application'

android 
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    useLibrary 'org.apache.http.legacy'

    dexOptions 
        preDexLibraries = false
        javaMaxHeapSize "4g"
    

    defaultConfig 
        applicationId "com.apple"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    
    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    

    compileOptions 
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    

    packagingOptions 
        exclude 'META-INF/license.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE-FIREBASE.txt'
        exclude 'META-INF/NOTICE'
    


dependencies 
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:support-v4:23.3.0'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:design:23.3.0'
    compile project(':library')
    compile files('libs/httpmime-4.3.jar')
    compile files('libs/gcm.jar')
    compile 'com.mcxiaoke.volley:library:1.0.19'
    compile 'com.google.code.gson:gson:2.4'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.firebase:firebase-client-android:2.3.1'
    compile files('libs/httpcore-4.3.2.jar')
    compile files('libs/httpclient-4.3.3.jar')


configurations 
    all*.exclude group: 'com.android.support', module: 'support-vector-drawable'
    all*.exclude group: 'com.android.support', module: 'animated-vector-drawable'
    all*.exclude group: 'com.android.support', module: 'support-annotations'

我对这三个模块有问题,所以只需从所有依赖项中排除,我的错误就消失了。

【讨论】:

bcz 您只从一个库中排除。你应该像我所做的那样从所有库中排除。并且不要只通过组。也通过模块,bcz 当我遇到这个问题时,我参考了很多 *** 的链接。这是我找到的最佳解决方案。 方式2是什么?另外,问题变了吗?多重索引在这里必须做什么?【参考方案2】:

可能在不同版本的导入库中存在问题

你有

  compile 'com.google.android.gms:play-services-analytics:9.0.0' // wrong!
  compile 'com.google.android.gms:play-services-gcm:9.0.2'

确保您始终使用相同的版本,例如:

  compile 'com.google.android.gms:play-services-analytics:9.0.2'
  compile 'com.google.android.gms:play-services-gcm:9.0.2'

【讨论】:

以上是关于如何解决 Android 中的“TransformException:java.util.zip.ZipException:重复条目”?的主要内容,如果未能解决你的问题,请参考以下文章

如何在合并dex档案时解决错误?

Android Transform API

Android Transform API

Web前端开发 同时用transform;和animate,滑动时会闪一下;该如何解决

android中的xml文件更新

如何开发一款高性能的 gradle transform