Android 引用jar 中有重複的類

折騰我一兩天了這個問題,現在也是勉強算是解決了。

因爲項目需求,需要使用Hasing 算法,然後我就一波implementation,發現可能要翻牆,半個小時都還沒下載下來,於是打開網頁maven 倉庫,搜索下載,花費之前不到1/30的時間下載好jar,20s依賴進入項目,Hasing 成功可以使用,就在我以爲一切都要向着完美結局走向的時候,意外發生了,項目提示我有重複引用的類,拋了異常

 java.lang.RuntimeException: Duplicate class com.google.common.util.concurrent.ListenableFuture
*       found in modules guava-28.2-android.jar (guava-28.2-android.jar) and listenablefuture-1.0.jar
*       (com.google.guava:listenablefuture:1.0)

初步一看,可能就是重複依賴而已,沒多在意,直接在External Libraries 中搜索到了ListenableFuture,找到期groupId準備在build.gradle中給 exclude group'' 掉

(下圖只是個例子,遇到問題時候沒想到要截圖了,哈哈)

通常情況下,這種問題基本都已經結束就像之前用攔截器json重複依賴到了一樣

可沒想到,一整build過後,大失所望,失敗了,我是百思不得其解,懵了好久,然後瘋狂百度,悄摸摸的問人,得到了一個百度到的方法 :Android{configuration{all*.exclude module:'gson'}},我是不知道你們能不能用,反正我試的用不了,但是這個方法和之前的方法對大多數情況有效。。。。還嘗試了一系列操作比如使用 provided的方式什麼的。都失敗了,這裏就不一一舉例了。

後來,我就想着看看我要用到的源碼複雜不復雜,我直接給敲出來完事了,看了點源碼後,我想到了一個好主意,我爲什麼不直接修改那個文件的名字,或者包名,不就完事了麼,然後又一陣百度,得到了使用 jarjar.jar 工具可以修改。

這個是地址,但是這個文件到12年就不維護了,我有點慌,不知道能不能成功

於是,給自己的jar降級找了個14年的,一波蛇皮操作,成功了。依賴到項目中正常使用,完美運行。

蛇皮操作

1.把你的要修改的jar 和jarjar.jar放在同一個文件夾中,方便

2.如果你是window,愉快的在地址欄輸入cmd 打開命令窗口,iOS麼,我覺得你會,就不介紹了。

3.輸入 java -jar jarjar-1.4.jar process ch.txt guava-17.0.jar out_guava17.0.jar , 這個語法應該很容易看懂把,用java 使用jarjar 工具,使用語法位ch.txt中的語法,原來的jar名稱,輸出的jar名稱。

4.ch.txt 的語法是什麼?rule com.google.common.util.concurrent** example_output.jar.@1

然後就成功生成了一個新的jar

愉快的結束了。

在這之後,我嘗試了用了最新的jar進行change,結果不言而喻,沒有成功,然後我又對具體的類進行重命名,很流暢的成功了,但是依賴到項目中時候出了問題,這次解決問題,也算是取巧了,希望日後能找到其他解決問題的方法。

中國加油,疫情早日結束。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章