java.util.zip.ZipException: duplicate entry(重復依賴多版本的類庫)


同步SVN倉庫中的代碼,更新后,運行項目,出現如下錯誤:

這里寫圖片描述

com.android.build.api.transform.TransformException:  java.util.zip.ZipException: duplicate entry: uk/co/senab/photoview/BuildConfig.class
  • 1
  • 2
  • 3

以上大概意思:重復依賴,重復了條目。

找到原因,對症下葯。想想應該不難哦,減少重復依賴的庫貌似可以搞定了。

1.在Gradle中, 刪除photoview的依賴包

在Gradle中先注釋掉photoview的依賴庫,試驗下,是否該庫重復。

dependencies {
    // compile 'com.bm.photoview:library:1.4.1' }
  • 1
  • 2
  • 3

這下應該可以了吧,一運行,傻眼了。結果無效,依舊報錯。

注意點

除開Gradle依賴類庫之外,還可以在項目中的libs下靜態方式添加類庫。

若是使用靜態方式添加jar類庫的,請刪除重復的jar

2. 接着,在項目中根目錄中打開命令行或者AndroidStudio中的terminal窗口中運行

Mac os系統:

./gradlew clean  
  • 1

Wind系統:

gradlew clean
  • 1

執行完清除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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

神奇發現,在Module的Gradle中沒有依賴該包,這可能真是讓人無語,原來一直在坑中打轉哦。

個人猜測,可能是團隊中其他小伙伴是引入的類庫中引用了該包。

在External Libraries文件下查看,確實存在兩個不同版本的PhotoView庫,存在1.2.4和1.3.1版本。

這里寫圖片描述

這里寫圖片描述

4. 添加去除重復依賴的庫的代碼

android{
    configurations {  
        all*.exclude module: 'PhotoView' //去除重復依賴庫 } }
  • 1
  • 2
  • 3
  • 4
  • 5

歷經兩三個小時的踩坑,最后大功告成,完美脫坑。

這個坑不難,就是怕找錯方向,白白在坑中打轉。記錄下來,以免后期遇到這種奇葩問題。

資源參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM