背景:

在做开发过程中,我们可能会遇到如下的几种常见现象:在集成依赖时遇到包冲突;在集成广告SDK的时候,被市场检测出广告插件;在做插件时,需要跟换依赖实现类等等。在这些场景下,我们都可能立马会想到,更换个包名就好了,所有问题都能高效迎刃而解,那么怎么去更换jar包的包名和结构呢

工具说明

Google其实给我们提供了jarjar.jar工具 获取地址:jarjar-1.4.jar 更换包名的命令:

java -jar jarjar.jar process <rulesFile> <inJar> <outJar>

Transform the <inJar> jar file, writing a new jar file to <outJar>.
Any existing file named by <outJar> will be deleted.

主要的规则在rulesFile中,这里可以新建一个文本文件,名字随意,例如 rule.txt 规则: rulesFile有三种指令,分別如下:

  1. rule用來取代Package的名称:rule pattern result
  2. zap用來移除符合名称的Package:zap pattern
  3. keep只会保留符合的Package的名称,其他的则会删除。如果和zap一起使用,将会在zap执行完之后才执行: keep pattern

备注: pattern为要比对的字串,可以使用***來表示任意的Package名稱。*可以代表一层的Package,**可以代表多层的Package。

result为要取代成的字串,可以使用@1@2这类的符号表示要使用第几个pattern的*或「**所代表的字串。

范例

如果要将Jar包內的「com.ak.torch.landingpage」名称全都替換成「com.ak.torch.landingpagehotfix」,可以编写以下的rulesFile:

rule com.ak.torch.landingpage.** com.ak.torch.landingpagehotfix.@1

在当前目录下结构

.
├── torch.jar
├── rule.txt
└── jarjar-1.4.jar

执行命令:

java -jar jarjar-1.4.jar process rule.txt torch.jar hotfixtorch.jar

命令执行完毕,同目录下会多出一下 hotfixtorch.jar,这个就是修改包名之后的 jar 文件,我们项目导入这个 jar 包使用即可。

.
├── torch.jar
├── rule.txt
├── jarjar-1.4.jar
└── hotfixtorch.jar