今天遇到一个第三方库里面用了另一个第三方库的包,跟原有项目里的包是同一个,但是版本不同。因为无法共用同一个版本,所以需要将其中一个库的包名修改一下,避免编译报错。

目前了解到有两种方式:

一种方法是混淆的时候打包,可以自定义类名,教程如下: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.jarrule.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包拷贝到项目里,执行编译引入。

检查:

  1. 查看和原来的jar包里除了包名以外,其他文件是否一致。
  2. 将代码里原来的老jar包引入的包名,替换成新的包名。
  3. 运行包,看是否报错,原来业务逻辑是否受影响。