同步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上重復依賴多版本的庫(解決方式):
-