java.util.zip.ZipException:重复条目:如何克服

我在我的项目中使用了多个Android库和模块。 每个人都有自己的v4.Support库。 我得到java.util.zip.ZipException:重复的条目 。 当我在项目中search重复的类文件时,这些类有多个文件,因为每个库中有多个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' } } 

我得到这样的错误。 每次我清理这个项目,它都能顺利地执行。 但是,当我尝试给运行命令时,它显示以下types的错误。

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

Solutions Collecting From Web of "java.util.zip.ZipException:重复条目:如何克服"

当我解决我的上述问题,并find一种方法来克服它。 packageAllDebugClassesForMultiDex错误的主要原因是你在Stackoverflow的所有其他post中find的相同,即你必须有一些在项目中可用的多个类文件。 在我的情况下,我有以上的项目中的Facebook,谷歌支付服务和滑动菜单等模块。 所有这些模块都有自己的v4.support jar文件副本。 我所做的是从所有这些库libs文件夹中删除所有v4.support文件。 然后从我的sdks添加依赖到v4.support lib,例如Android Studio project Structure的com.android.support libs。 为了这..

  • 1 *转到文件>项目结构。
  • 2 *逐个select这些模块中的每一个。

  • 3 *在最后一个名为Dependency的选项卡中,如果在该模块的libs文件夹中只有v4.support lib(或问题的),则删除compile fileTree(dir:'libs',include:'* .jar')

  • 4 *添加v4.support lib通过点击+然后添加库,并从您的sdksselectv4.support libs。

完成。 清理项目并重新构build。 packageAllDebugClassesForMultiDex问题已经消失。

至于传递依赖性,如果你知道在构build项目时导致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 }