1. 程式人生 > >java.util.zip.ZipException: duplicate entry(重複依賴多版本的類庫)

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.在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'  //去除重複依賴庫
    }
}

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

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

資源參考