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,结果不言而喻,没有成功,然后我又对具体的类进行重命名,很流畅的成功了,但是依赖到项目中时候出了问题,这次解决问题,也算是取巧了,希望日后能找到其他解决问题的方法。

中国加油,疫情早日结束。

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