當(dāng)使用maven導(dǎo)入依賴(lài)時(shí)泪勒,可能會(huì)出現(xiàn)不同的依賴(lài)包含了同一個(gè)jar昼蛀,在編譯期間不會(huì)報(bào)錯(cuò)≡泊妫可一旦run app的時(shí)候叼旋,就會(huì)報(bào)
Error:Executionfailedfortask':app:transformClassesWithJarMergingForDebug'.> com.android.build.api.transform.TransformException:java.util.zip.ZipException:duplicateentry:xxx.class
解決的方法是在引入依賴(lài)的時(shí)候把相同的jar去除掉。
比方說(shuō)沦辙,我同時(shí)引入了bmob和retrofit2的依賴(lài)
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')
因?yàn)閎mob底層也是通過(guò)引入okhttp來(lái)實(shí)現(xiàn)的夫植,所以我報(bào)的錯(cuò)是:
Error:Executionfailedfortask':app:transformClassesWithJarMergingForDebug'.> com.android.build.api.transform.TransformException:java.util.zip.ZipException:duplicateentry:com/google/gson/annotations/Expose.class
這時(shí)候我們可以發(fā)現(xiàn)
com/google/gson/annotations/Expose.class
最后面有一個(gè)Expose.class
我們可以通過(guò)Search Everywhere去定位這個(gè)類(lèi)(默認(rèn)快捷鍵是雙擊shift)。
看油讯,通過(guò)搜索的確發(fā)現(xiàn)了兩個(gè)一模一樣的類(lèi),而且來(lái)自不同的依賴(lài),而重復(fù)的類(lèi)庫(kù)正是gson详民。此時(shí)再回想起我剛剛是不是添加過(guò)一個(gè)
compile ('com.squareup.retrofit2:converter-gson:2.1.0')
好了延欠,找到問(wèn)題的根源的。那我們現(xiàn)在如何去除相同的類(lèi)庫(kù)呢沈跨,很簡(jiǎn)單:
在AS中由捎,選擇以project顯示項(xiàng)目,找到最下面的External Libraries饿凛,然后繼續(xù)找狞玛,找到相對(duì)應(yīng)的類(lèi)庫(kù):
如圖依次點(diǎn)開(kāi)之后發(fā)現(xiàn)了一個(gè)pom.xml,這里面就是關(guān)于這個(gè)jar的一些配置文件笤喳,點(diǎn)開(kāi)之后長(zhǎng)這個(gè)樣子
往下找,發(fā)現(xiàn)了一個(gè)gson的引用
沒(méi)錯(cuò)碌宴,這個(gè)就是導(dǎo)致報(bào)錯(cuò)的直接原因杀狡。復(fù)制里面groupId,到你的app的build.gradle里贰镣,找到那個(gè)依賴(lài)呜象,添加{exclude group: 'com.google.code.gson'}
把這個(gè)groudId的引用去除掉。如下圖所示
好了碑隆,到此問(wèn)題就解決了恭陡,如果你有多個(gè)重復(fù)依賴(lài)的話(huà),就按照本文所給出的方法上煤,一個(gè)一個(gè)去重休玩。