重複類錯誤當編譯我的應用程序,我得到以下錯誤(路徑的敏感件編輯了)安卓:在proguard的
Execution failed for task ':app:proguardDebug'.
> java.io.IOException: Can't write [/projects/app/build/intermediates/classes-proguard/debug/classes.jar] (Can't read [/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.4/4216af16d38465bbab0f3dff8efa14204f7a399a/commons-codec-1.4.jar(;;;;;;!META-INF/MANIFEST.MF)] (Duplicate zip entry [commons-codec-1.4.jar:org/apache/commons/codec/binary/Base64.class]))
這表明,我認爲編譯器看到兩個地方的應用程序試圖使用commons.codec.binary.Base64.class作爲依賴項。我再次檢查並檢查了我的庫,但只有一個庫(Amazon AWS)正在嘗試使用它。
高於這個錯誤,我得到一些其他的警告,這也提高了紅旗我:
Warning:can't write resource [META-INF/LICENSE.txt] (Duplicate zip entry [commons-lang3-3.1.jar:META-INF/LICENSE.txt])
Warning:can't write resource [META-INF/NOTICE.txt] (Duplicate zip entry [commons-lang3-3.1.jar:META-INF/NOTICE.txt])
Warning:can't write resource [META-INF/LICENSE.txt] (Duplicate zip entry [commons-codec-1.4.jar:META-INF/LICENSE.txt])
Warning:can't write resource [META-INF/NOTICE.txt] (Duplicate zip entry [commons-codec-1.4.jar:META-INF/NOTICE.txt])
我沒有明確使用commons-編解碼器1.4或公地lang3-3.1在我應用程序,以爲我以前使用lang3之前刪除它。爲什麼這些在編譯日誌中被引用?我的一個Maven庫可以使用它們嗎?我將在我的gradle文件中包含下面的maven庫列表。
這裏是我的ProGuard和gradle這個文件,以供參考:
ProGuard的
-keep class org.w3c.dom.bootstrap.** { *; }
-keep class org.joda.time.** { *; }
-keep class com.facebook.** { *; }
-keep class org.apache.commons.** { *; }
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-dontwarn org.codehaus.jackson.map.ext.**
-dontwarn oauth.**
-dontwarn com.amazonaws.**
-dontwarn org.joda.time.**
-dontwarn org.apache.commons.codec.**
-dontwarn com.fasterxml.jackson.databind.ext.**
搖籃
apply plugin: 'com.android.application'
android {
compileSdkVersion 20
buildToolsVersion '20.0.0'
defaultConfig {
applicationId 'com.my.package'
minSdkVersion 14
targetSdkVersion 20
versionCode 9
versionName '1.2'
}
buildTypes {
release {
debuggable false
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
debug {
debuggable true
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
lintOptions {
checkReleaseBuilds false
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/MANIFEST.MF'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//noinspection GradleDependency
compile 'com.google.android.gms:play-services:5.0.89'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.viewpagerindicator:library:[email protected]'
compile 'se.emilsjolander:StickyScrollViewItems:1.1.0'
compile 'se.emilsjolander:stickylistheaders:2.5.0'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.2'
compile project(':facebook')
compile 'com.tumblr:jumblr:0.0.10'
compile 'com.android.support:support-v4:20.0.0'
}
我最好的猜測是一個或多個這些庫的使用apache lang3和編解碼器作爲自己的依賴關係,這導致了衝突當我編譯應用程序。這個問題只發生在我將亞馬遜作爲必需的jar包含的時候,所以我知道這在某種程度上是罪魁禍首,但我不知道還有什麼與它衝突。
我讀了一些關於使用proguard的-injars,但根據他們的文檔,Android不需要你使用它。
任何意見將不勝感激,謝謝!
如果您想了解更多關於導致這些傳遞依賴性的信息,您可以通過運行'gradlew dependencyInsight --dependency = commons-lang3'來問Gradle。 – 2014-09-05 04:40:32
我有類似的問題。編譯過程可以完成沒有錯誤,但我得到那些META-INF相關的警告 – Guilherme 2014-09-09 13:22:18
我只有在通用圖像加載器上有相同的錯誤。運氣好的話? – akousmata 2015-05-18 15:09:31