java.util.zip.ZipException: duplicate entry(重複依賴多版本的類庫)
阿新 • • 發佈:2019-01-04
同步SVN倉庫中的程式碼,更新後,執行專案,出現如下錯誤:
com.android.build.api.transform.TransformException:
java.util.zip.ZipException: duplicate entry: uk/co/senab/photoview/BuildConfig.class
以上大概意思:重複依賴,重複了條目。
找到原因,對症下藥。想想應該不難哦,減少重複依賴的庫貌似可以搞定了。
1.在Gradle中, 刪除photoview的依賴包:
在Gradle中先註釋掉photoview的依賴庫,試驗下,是否該庫重複。
dependencies {
// compile 'com.bm.photoview:library:1.4.1'
}
這下應該可以了吧,一執行,傻眼了。結果無效,依舊報錯。
注意點:
除開Gradle依賴類庫之外,還可以在專案中的libs下靜態方式新增類庫。
若是使用靜態方式新增jar類庫的,請刪除重複的jar。
2. 接著,在專案中根目錄中開啟命令列或者AndroidStudio中的terminal視窗中執行:
Mac os系統:
./gradlew clean
Wind系統:
gradlew clean
執行完清除gradle的命令列後。歡天喜地的去除錯,結果無效,依舊報錯。感覺有點不對經呀,怎麼還不行哦,又是找到假李逵了,還得繼續找真李逵。
3. 繼續查詢問題,檢視輸出的依賴包:
在AndroidStudio的Project檢視下,檢視.idea資料夾–>libraries資料夾–>PhotoView_1_3_1.xml(對應依賴庫的日誌)。
<component name="libraryTable">
<library name="PhotoView-1.3.1">
<CLASSES>
<root url="file://$USER_HOME$/.android/build-cache/820a5f0226a474bc3f9a23b30f05e8cad9c35149/output/res" />
<root url="jar://$USER_HOME$/.android/build-cache/820a5f0226a474bc3f9a23b30f05e8cad9c35149/output/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-
2.1/com.github.chrisbanes/PhotoView/1.3.1
/caadf2c4a254899b467496e282e7463e8726ff9f/PhotoView-1.3.1-sources.jar!/" />
</SOURCES>
</library>
</component>
神奇發現,在Module的Gradle中沒有依賴該包,這可能真是讓人無語,原來一直在坑中打轉哦。
個人猜測,可能是團隊中其他小夥伴是引入的類庫中引用了該包。
在External Libraries檔案下檢視,確實存在兩個不同版本的PhotoView庫,存在1.2.4和1.3.1版本。
4. 新增去除重複依賴的庫的程式碼:
android{
configurations {
all*.exclude module: 'PhotoView' //去除重複依賴庫
}
}
歷經兩三個小時的踩坑,最後大功告成,完美脫坑。
這個坑不難,就是怕找錯方向,白白在坑中打轉。記錄下來,以免後期遇到這種奇葩問題。
資源參考: