我在项目中使用了多个Android库和模块。每个都有自己的v4.Support库。我正在获取 java.util.zip.ZipException:重复条目 。当我在项目中搜索重复的类文件时,由于每个库中都有多个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
当我解决上述问题并找到解决方法时。 packageAllDebugClassesForMultiDex 错误的主要原因与您在Stackoverflow的所有其他帖子中发现的相同,即,您必须具有一些类文件,这些类文件在项目中可以多次使用。就我而言,我在上述项目中有很多模块,例如Facebook,谷歌付费服务和滑动菜单等。所有这些模块都有自己的v4.support jar文件副本。我所做的是从所有这些库的libs文件夹中删除所有v4.support文件。然后从我的SDK添加依赖项到v4.support库,即Android Studio项目结构中的com.android.support库。为了这..
2 *逐个选择这些模块中的每一个。
3 在最后一个名为Dependency的选项卡中,如果该模块的libs文件夹中只有v4.support lib(或有问题的一个),则删除 compile fileTree(dir:’libs’,include:’ .jar’)** 。
4 通过单击 +* 添加v4.support库, 然后添加库并从SDK中选择v4.support库。
完成。清理项目,然后重新构建。 packageAllDebugClassesForMultiDex 问题已经消失。
至于传递依赖,如果您知道在生成项目时导致dex错误中的Duplicate文件的确切依赖,则可以将其排除为belo
compile(project(':..:..:..:..:..:..:android_libraries:walletsdkandroidmodule')) { exclude group: 'com.google.code.gson' }
如果您想要任何模块中的任何传递依赖,例如
compile('com.crashlytics.sdk.android:crashlytics:2.2.3@aar') { transitive = true }