如何解決 Android Studio 上遠程依賴包重複的問題

大家是否是會常常遇到這樣的一個錯誤:com.android.dex.DexException: Multiple dex files define XXXX,通常狀況下,是咱們項目中引用了重複的庫或者jar包引發的,咱們找到去掉便可解決,可是若是你遠程依賴的兩個庫裏,同時引用了同一個庫,你該怎麼解決呢?把那兩個庫都下載下來,本身修改?去掉,再本地引入嗎?今天告訴大家一個簡單的方法。java

說實話,隨着如今輪子愈來愈多,並且不少人都樂於分享和封裝一些控件或者開源的庫,來共享給你們一塊兒使用。可是常常不少的人封裝都在本身庫裏引發不少其餘的第三方庫,這就難免有時會發生你引用的兩個庫都同時引用了同一個第三方庫,最坑人的就是他們封裝的開源庫裏使用的都是直接引用,而不是使用 Provided 的方式暴露給你,而是本身直接用了。android

我知道有不少人都用強迫症,在使用遠程依賴慣了之後,不習慣本地導入的,感受不舒服了。因此不免就得想辦法解決這個問題。程序員

舉個例子:api

好比:你在使用了一個能生成你符合需求二維碼的庫,而這個庫在內容引用了zxing。可是這裏面的掃一掃界面並很差看,你發現了另一個庫裏的掃一掃,正好符合你的需求,因此你就在掃一掃這個功能上用了另一個庫,可是這個庫也引用了zxing。微信

固然了,我只是舉了一個極端的例子,不會常常發生如上的例子,可是這個錯誤確實很常見。app

若是,就像例子中那樣作,你去編譯運行項目時,這時,你就會看到一個錯誤,大約以下意思:ide

Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexException: Multiple dex files define Lcom/google/zxing/BarcodeFormat;ui

重點看這個錯誤:google

com.android.dex.DexException
這就說明你引用的庫或者jar包有重複的地方,因此,這時,你就須要從你引用的遠程依賴或者jar中找到重複的,去刪掉一個就能夠解決了。spa

是否是很簡單,這是在你控制的前提下,若是就像我剛纔舉得例子同樣,若是你遠程依賴的兩個庫,不是本地的哈,同時引用同一個第三方,那該怎麼解決呢?

再舉個例子:

compile('com.loonggg.saoyisao.lib:1.1.0')
compile('com.timmy.qrcode.lib:1.4.1') {
        exclude group: 'com.google.zxing'
}複製代碼

com.loonggg.saoyisao.lib:1.1.0 這個依賴裏引用了第三方zxing。
com.timmy.qrcode.lib:1.4.1這個依賴裏也引用了zxing這個庫,在com.timmy.qrcode.lib:1.4.1的依賴裏添加語句 exclude group: ‘com.google.zxing’,意思是編譯的時候將group爲com.google.zxing的全部library都去除在外,這樣com.timmy.qrcode.lib:1.4.1就會自動去引用com.loonggg.saoyisao.lib:1.1.0項目裏的zxing依賴了。這樣問題就解決了。

可是,到這裏咱們就須要注意一點:這個exclude group: 'xxx.xxx.xxx'的方法,只能去除遠程依賴的庫,若是是你引用的兩個遠程依賴庫A和B,A中是本地依賴的zxing.jar,而B中也是本地依賴的zxing.jar包,那就無解了,只能把A和B這兩個庫,下載下來本身去修改了,去掉了。固然,若是你項目中同時遠程依賴的A和B這兩個庫,又都重複遠程依賴了同一個庫,那解決方法跟我上面說的就好解決了。若是一個是遠程依賴,一個是本地引用jar包的方式,那也好解決,在遠程依賴的那個庫,你引用的時候,經過exclude group: 'xxx.xxx.xxx'的方式就可以解決了。

歡迎你們關注個人技術分享公衆號:非著名程序員(smart_android)。技術文章均先首發於個人技術分享的微信公衆號。

相關文章
相關標籤/搜索