今天遇到一个第三方库里面用了另一个第三方库的包,跟原有项目里的包是同一个,但是版本不同。因为无法共用同一个版本,所以需要将其中一个库的包名修改一下,避免编译报错。
目前了解到有两种方式:
一种方法是混淆的时候打包
,可以自定义类名,教程如下:https://blog.csdn.net/weixin_29053577/article/details/117494680
另一种是把jar包文件进行转换
。
原理是解压之后修包目录结构(也是包名)然后再生成新的jar包。
感觉这种方式简洁明了,且解放双手,目前测试下来没有功能问题,推荐使用。
参考:https://blog.csdn.net/Ycocol/article/details/120015967
下面详细说下方法二的操作。
一、准备
1、 准备一个名为rule.txt
的文件(名字随便取),内容如下:
rule org.greenrobot.eventbus.** com.xxx.eventbus.@1
说明:
- 这里的
org.greenrobot.eventbus.**
是指原有jar的包名目录下的所有文件。 com.xxx.eventbus
是新的jar的包名目录。.@1
是固定语法,用于文件重命名
2、准备工具jar包
点击下载:jarjar.jar
下载jarjar.jar
到rule.txt
同目录。
3、准备源jar包
准备需要修改包名的jar包。也是到rule.txt
同目录。
二、转换
将老jar包转换成修改包名后的新jar包
打开命令行,cd到rule.txt
同目录,执行如下命令:
java -jar jarjar.jar process rule.txt eventbus-3.2.0.jar eventbusnew-3.2.0.jar
说明:
eventbus-3.2.0.jar
eventbusnew-3.2.0.jar
你可以根据时机情况修改,前面是原来的需要改包名的jar包,后面是改好包名之后的新jar包名字。
执行完,没有任何提示就说明成功了。
去rule.txt
同目录下查看是否新增了jar包。
三、替换&检查
将新增的jar包拷贝到项目里,执行编译引入。
检查:
- 查看和原来的jar包里除了包名以外,其他文件是否一致。
- 将代码里原来的老jar包引入的包名,替换成新的包名。
- 运行包,看是否报错,原来业务逻辑是否受影响。
??这是哪位大侠?哈哈哈
222222 33113131313
22222222
333333333
121212121312331231
1111