通过jarjar.jar来修改jar包名

3,339 阅读1分钟

码星球 群号:172852230

有时候我们根据一些场景 需要替换第三方jar包的包名:

  • 比如Android广告平台sdk,更换他们jar包包名的话,可以防止市场检测到有广告插件;
  • android 系统 framework 层使用的库和java 冲突。

今天就介绍一下如何使用jarjar.jar工具来替换jar包的包名。

1 jarjar.jar工具下载

  1. 官网下载地址: code.google.com/p/jarjar/

  2. 公众号后台回复下载:jarjar

2 快速使用

  1. 新建一个文件夹,将jarjar.jar和需要修改包名的jar包放在该文件夹下。

  2. 在该文件夹下新建一个txt文本,取名rule.txt。

  3. 打开rule.txt,输入如下内容并保存。

rule pattern result
rule org.apache.commons.** org.apache.commons.android.@1

其中“org.apache.commons”为我们所需要修改的jar包的包名,“org.apache.commons.android”为我们修改后的包名。

  1. 通过cmd执行如下命令:
java -jar jarjar.jar process <rulesFile> <inJar> <outJar>
  • rulesFile-替换规则文件,上面新建的rule.txt;
  • inJar-指定需要替换的jar包;
  • outJar-替换后输出的jar包。

3 详细语法

rulesFile有三種指令,分別如下:

  1. rule用來取代Package的名称。
rule pattern result
  1. zap用來移除符合名称的Package。
zap pattern
  1. 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

0-2.png

码星球