有时候我们根据一些场景 需要替换第三方jar包的包名:
- 比如Android广告平台sdk,更换他们jar包包名的话,可以防止市场检测到有广告插件;
- android 系统 framework 层使用的库和java 冲突。
今天就介绍一下如何使用jarjar.jar工具来替换jar包的包名。
1 jarjar.jar工具下载
-
官网下载地址: code.google.com/p/jarjar/
-
公众号后台回复下载:
jarjar
2 快速使用
-
新建一个文件夹,将jarjar.jar和需要修改包名的jar包放在该文件夹下。
-
在该文件夹下新建一个txt文本,取名rule.txt。
-
打开rule.txt,输入如下内容并保存。
rule pattern result
rule org.apache.commons.** org.apache.commons.android.@1
其中“org.apache.commons”为我们所需要修改的jar包的包名,“org.apache.commons.android”为我们修改后的包名。
- 通过cmd执行如下命令:
java -jar jarjar.jar process <rulesFile> <inJar> <outJar>
- rulesFile-替换规则文件,上面新建的rule.txt;
- inJar-指定需要替换的jar包;
- outJar-替换后输出的jar包。
3 详细语法
rulesFile有三種指令,分別如下:
- rule用來取代Package的名称。
rule pattern result
- zap用來移除符合名称的Package。
zap pattern
- keep只会保留符合的Package的名称,其他的則會刪除。如果和zap一起使用,將會在zap执行完之后才執行。
keep pattern
备注: pattern为要对比的字串,可以使用「* 」和「** 」來表示任意的Package名称。「* 」可以代表一层的Package,「** 」可以代表多层的Package。result为要取代成的字串,可以使用「@1」、「@2」这类的符号表示要使用第几个pattern的「* 」或「** 」所代表的字串。
例:如果要将Jar包內的「cn.domob」名称全都替換成「com.google」,可以编写以下的rulesFile:
rule cn.domob.** com.google.@1