【问题标题】:java.util.zip.ZipException: duplicate entry :how to overcomejava.util.zip.ZipException:重复条目:如何克服
【发布时间】:2023-04-07 12:30:01
【问题描述】:

我在我的项目中使用了多个 Android 库和模块。每个都有自己的 v4.Support 库。我得到 java.util.zip.ZipException: duplicate entry 。 当我在项目中搜索重复的类文件时,这些类有多个文件,因为每个库中有多个 v4.support lib。我知道这个问题已经在这里被问过很多次了,但对我没有任何帮助。

我的问题是:如何删除这些多个 v4.support 文件?我只想把这个 v4.support lib 放一次,所有其他模块都应该从那里引用它。我如何做到这一点?

以下是我的 build.gradle 脚本

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        mavenCentral()
        maven { url 'https://maven.fabric.io/public' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
        //classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+'
        classpath 'io.fabric.tools:gradle:1.15.2'
    }
}

apply plugin: 'android'
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
apply plugin: 'io.fabric'

repositories {
    maven { url 'https://maven.fabric.io/public' }
}

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile('com.crashlytics.sdk.android:crashlytics:2.2.3@aar') {
        transitive = true
    }
    compile('com.android.support:multidex:1.0.0')
    //compile ('com.android.support:appcompat-v7:22.1.0')
    compile project(':..:..:..:..:..:..:android_libraries:appcompat')
    compile project(':..:..:..:..:..:..:android_libraries:facebook')
    compile project(':..:..:..:..:..:..:android_libraries:google_play_services:libproject:google-play-services_lib')
    compile project(':..:..:..:..:..:..:android_libraries:SlidingMenu')
    compile project(':..:..:..:..:..:..:android_libraries:StickingGridViewLibrary')
    compile project(':..:..:..:..:..:..:android_libraries:view_pager_library')
    compile project(':..:..:..:..:..:..:android_libraries:ZXing2.3')
    compile project(':..:..:..:..:..:..:android_libraries:xyz')
    compile project(':..:..:..:..:..:..:android_libraries:apptentive')

}

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.0"

    defaultConfig {
        versionCode 1
        versionName "1.0"
        minSdkVersion 15
        targetSdkVersion 21

        // Enabling multidex support.
        multiDexEnabled true
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    ant.importBuild './../../../../../../buildscripts/wlbuild.xml'


    apt {
        arguments {
            androidManifestFile variant.outputs[0].processResources.manifestFile
            // if you have multiple outputs (when using splits), you may want to have other index than 0

            resourcePackageName 'com.kohls.mcommerce.opal'

            // If you're using Android NBS flavors you should use the following line instead of hard-coded packageName
            // resourcePackageName android.defaultConfig.applicationId

            // You can set optional annotation processing options here, like these commented options:
            // logLevel 'INFO'
            // logFile '/var/log/aa.log'
        }
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
    buildDir = './../../../../../../build/native'

    lintOptions {
        abortOnError false
    }
    dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
    }
}

我收到这样的错误。每次我清理项目时,它都会成功。但是当我尝试发出 Run 命令时,它会显示以下类型的错误。

Execution failed for task ':packageAllDebugClassesForMultiDex'.
> java.util.zip.ZipException: duplicate entry: android/support/v4/media/TransportMediatorCallback.class

【问题讨论】:

    标签: java android android-studio


    【解决方案1】:

    当我解决上述问题并找到克服它的方法时。 packageAllDebugClassesForMultiDex 错误的主要原因与您在 Stackoverflow 的所有其他帖子中发现的相同,即您必须有一些在项目中多次可用的类文件。就我而言,我在上面的项目中有很多模块,如 Facebook、谷歌支付​​服务和滑动菜单等。所有这些模块都有自己的 v4.support jar 文件副本。 我所做的是从所有这些库 libs 文件夹中删除所有 v4.support 文件。 然后将依赖项添加到我的 sdks 中的 v4.support 库,即 Android Studio 项目结构中的 com.android.support 库。为此..

    • 1* 转到文件>项目结构。
    • 2* 一个一个地选择这些模块。

    • 3* 在最后一个名为 Dependency 的选项卡中,如果您只有 v4.support lib(或有问题的那个)在该模块的 libs 文件夹中。

    • 4* 单击 + 添加 v4.support 库,然后添加库并选择 v4.support 来自您的 sdks 的库。

    完成了。清理项目并重新构建它。packageAllDebugClassesForMultiDex问题已解决。

    至于传递依赖,如果你知道在构建项目时导致Duplicate file in dex错误的确切依赖,你可以将其排除为belo

     compile(project(':..:..:..:..:..:..:android_libraries:walletsdkandroidmodule')) {
            exclude group: 'com.google.code.gson'
        }
    

    如果你想要任何模块中的任何传递依赖,例如。

    compile('com.crashlytics.sdk.android:crashlytics:2.2.3@aar') {
            transitive = true
        }
    

    【讨论】:

    • 就我而言。对于 Android 工作室,我按 Ctrl + N 并搜索类名,在这种情况下是 TransportMediatorCallback 取自“重复条目:android/support/v4/media/TransportMediatorCallback.class”它存在于多个 jar 文件中(3 个是精确的)。我删除了 2 并解决了其他库包中的依赖关系,只是使用 ../source_library_package/libs/library_name.jar 指向这些库
    • @RohitRokde ,正确。这样我们就可以在我们的 App 中找到重复的库。
    • 如果项目结构的模块中没有列出依赖项怎么办?这可能是由于其他 jar 中的传递依赖关系而发生的。
    • @IgorGanapolsky,我目前遇到了这个问题。你找到解决办法了吗?
    • @ Lemuel Adane ,请查看我的更新答案。可能对你有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2017-08-18
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多