android - support - java util zip ZipException:重复条目
exclude group com android support module support v4 (3)
运行该项目时,我得到这个错误
错误:任务':..........'的执行失败。 com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:javax / annotation / CheckForNull.class
这是我的app:gradle的样子:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.3"
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "com.sample.Example"
minSdkVersion 15
targetSdkVersion 24
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile (project(':library')){
exclude module: 'support-v4'
}
compile (project(':facebookLib')){
exclude module: 'support-v4'
}
compile 'com.google.http-client:google-http-client-gson:1.20.0'
compile 'com.google.code.gson:gson:2.4'
compile files('libs/CWAC-SackOfViewsAdapter.jar')
compile files('libs/FlurryAgent.jar')
compile files('libs/google-api-client-1.15.0-rc.jar')
compile files('libs/google-api-client-android-1.15.0-rc.jar')
compile files('libs/google-api-services-androidpublisher-v1-rev15-1.15.0-rc.jar')
compile files('libs/google-http-client-1.15.0-rc.jar')
compile files('libs/google-http-client-android-1.15.0-rc.jar')
compile files('libs/google-http-client-jackson-1.15.0-rc.jar')
compile files('libs/google-http-client-jackson2-1.15.0-rc.jar')
compile files('libs/google-oauth-client-1.15.0-rc.jar')
compile files('libs/google-oauth-client-java6-1.15.0-rc.jar')
compile files('libs/httpmime-4.2.jar')
compile files('libs/in-app-purchasing-1.0.3.jar')
compile files('libs/jackson-core-2.1.3.jar')
compile files('libs/jackson-core-asl-1.9.11.jar')
compile files('libs/json_simple-1.1.jar')
compile files('libs/jsr305-1.3.9.jar')
compile files('libs/picasso-2.1.1.jar')
compile files('libs/signpost-commonshttp4-1.2.1.1.jar')
compile files('libs/signpost-core-1.2.1.1.jar')
compile files('libs/signpost-jetty6-1.2.1.1.jar')
compile files('libs/twitter4j-core-4.0.1.jar')
compile files('libs/amazon-device-messaging-1.0.1.jar')
compile 'com.google.android.gms:play-services:9.6.1'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
compile 'com.android.support:design:24.2.1'
compile 'com.android.support:recyclerview-v7:24.2.1'
compile 'com.android.support:cardview-v7:24.2.1'
compile 'com.android.support:multidex:1.0.1'
}
凌空:gradle这个
android {
compileSdkVersion 17
buildToolsVersion "24.0.3"
defaultConfig {
minSdkVersion 8
targetSdkVersion 8
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
库:gradle这个
android {
compileSdkVersion 16
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 4
targetSdkVersion 4
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:support-v4:18.0.0'
}
facebookLib:gradle这个
android {
compileSdkVersion 17
buildToolsVersion "24.0.3"
defaultConfig {
minSdkVersion 8
targetSdkVersion 8
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:support-v4:18.0.0'
}
有人可以提出一个出路这个错误? 提前致谢。
您不需要在每个单独的模块中编译相同的依赖关系,就像您的应用程序一样:gradle正在编译已经在您的库gradle中编译的'com.android.support:support-v4:24.2.1'
为'com.android.support:support-v4:18.+
'我可以看到你已经添加了库模块作为app:gradle的依赖项,在这里你试图复制它。 其他模块也一样。 除非他们是独立的。
提示:也不要使用像'com.android.support:support-v4:18.+'
这样'com.android.support:support-v4:18.+'
匿名版本,而要使用适当的版本。
com.android.support:support-v4:_____
这个库被多次使用。 所以这是你可以做的。 在图书馆的gradle或facebooklib的gradle上执行以下操作:
compile(project(':facebookLib')) {
exclude module: 'support-v4'
}
要么
compile(project(':library')) {
exclude module: 'support-v4'
}
提示:在构建和查看它时,您应该制作一个gradle任务来打印您的依赖关系。 看看是否有任何你可以删除/改善
编辑:
在Android Studio的终端标签中运行这个命令。
./gradlew app:dependencies
这将打印出所有的依赖和他们的(子)依赖。 仔细看看它,看哪个依赖项被调用两次。
每次看到同一个库两次时,都必须使用上面显示的exclude
方法来排除该模块或组。
在这里看到更多的细节。 这是很好和简单的解释。 https://www.linkedin.com/pulse/how-find-dependencies-particular-dependency-gradle-hesamedin-kamalan-1
运行以下来找到重复项
task findDuplicates {
doLast {
String findMe = 'javax/annotation/CheckForNull.class'
configurations.compile.files.each { file ->
if (file.name.endsWith('.jar')) {
def classMatches = zipTree(file).matching {
include findMe
}.files
if (!classMatches.empty) {
println "Found $findMe in $file ${classMatches.size()} time(s)"
}
}
}
}
}