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

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

api put for roi ado 其他 若是 rar bug

同步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

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

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

資源參考

  • StackOverFlow上重復依賴多版本的庫(解決方式):

    https://stackoverflow.com/questions/26966843/java-util-zip-zipexception-duplicate-entry-during-packagealldebugclassesformult

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