Android Studio中如何解決重復依賴導致的app:transformClassesWithJarMergingForDebug

Android Studio中如何解決重復依賴導致的app:transformClassesWithJarMergingForDebug

2016年10月11日 10:59:31

閱讀數:16103

當使用maven導入依賴時,可能會出現不同的依賴包含了同一個jar,在編譯期間不會報錯。可一旦run app的時候,就會報

Error:Execution?failed for?task ':app:transformClassesWithJarMergingForDebug'.

> com.android.build.api.transform.TransformException:?java.util.zip.ZipException:?duplicate entry:?xxx.class

[if !supportLists]·?[endif]1

[if !supportLists]·?[endif]2

解決的方法是在引入依賴的時候把相同的jar去除掉

比方說,我同時引入了bmob和retrofit2的依賴

compile ('cn.bmob.android:bmob-sdk:3.5.1')

compile ('com.squareup.retrofit2:retrofit:2.1.0')

compile ('com.squareup.retrofit2:converter-gson:2.1.0')

[if !supportLists]·?[endif]1

[if !supportLists]·?[endif]2

[if !supportLists]·?[endif]3

因為bmob底層也是通過引入okhttp來實現的,所以我報的錯是:

Error:Execution?failed for?task ':app:transformClassesWithJarMergingForDebug'.

> com.android.build.api.transform.TransformException:?java.util.zip.ZipException:?duplicate entry:?com/google/gson/annotations/Expose.class

[if !supportLists]·?[endif]1

[if !supportLists]·?[endif]2

這時候我們可以發現

?com/google/gson/annotations/Expose.class

[if !supportLists]·?[endif]1

最后面有一個Expose.class?我們可以通過Search Everywhere去定位這個類(默認快捷鍵是雙擊shift)。


看,通過搜索的確發現了兩個一模一樣的類,而且來自不同的依賴,而重復的類庫正是gson。此時再回想起我剛剛是不是添加過一個

compile ('com.squareup.retrofit2:converter-gson:2.1.0')

[if !supportLists]·?[endif]1

好了,找到問題的根源的。那我們現在如何去除相同的類庫呢,很簡單:在AS中,選擇以project顯示項目,找到最下面的External Libraries,然后繼續找,找到相對應的類庫:


如圖依次點開之后發現了一個pom.xml,這里面就是關于這個jar的一些配置文件,點開之后長這個樣子


往下找,發現了一個gson的引用


沒錯,這個就是導致報錯的直接原因。復制里面groupId,到你的app的build.gradle里,找到那個依賴,添加{exclude group: 'com.google.code.gson'}?把這個groudId的引用去除掉。如下圖所示


好了,到此問題就解決了,如果你有多個重復依賴的話,就按照本文所給出的方法,一個一個去重。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。