资源混淆工具AndResGuard

来源:互联网 发布:时时彩软件urssc 编辑:程序博客网 时间:2024/06/05 05:41

git地址https://github.com/shwenzhang/AndResGuard


AndResGuard是微信团队退出的资源混淆工具,其原理是将 "res/drawable/someres" 这样的长路径(字符数)转换成 "r/d/s"这样的短路径,从而缩小包体大小。

其具体的代码实现分析可以参见http://blog.csdn.net/cg_wang/article/details/70183864。

AndResGuard即可以像其Git上所展示的那样配置在项目中,也可以单独使用jar文件作为一个独立的工具使用。

我这里使用的是后者。

将Git项目下到本地后,可以看到一个tool_output的文件夹


点开后,可以看到它包含了一个jar文件、2个批处理文件(分别对应windows和linux)、一个config.xml(混淆配置文件)、1个签名文件release.keystore。


我们公司使用的是windows,点开build_apk.bat,已经有完整的填写例子,

set jdkpath=D:\Program Files\Java\jdk1.7.0_79\bin\java.exeset storepath=release.keystoreset storepass=testresset keypass=testresset alias=testresset zipalign=D:\soft\dev\android\sdk\build-tools\23.0.2\zipalign.exe"%jdkpath%" -jar AndResGuard-cli-1.2.0.jar input.apk -config config.xml -out outapk -signature "%storepath%" "%storepass%" "%keypass%" "%alias%" -zipalign "%zipalign%"pause
依次填入apk全名(input.apk),输出文件目录(outapk)还有签名文件信息。

以我们项目为例,填完后如下:

set jdkpath=C:\Program Files\Java\jdk1.8.0_11\bin\java.exeset storepath=storepathset storepass=****set keypass=*****set alias=*****set zipalign=D:\soft\dev\android\sdk\build-tools\23.0.2\zipalign.exe"%jdkpath%" -jar AndResGuard-cli-1.2.0.jar v5.0.0.apk -config config.xml -out result -signature "%storepath%" "%storepass%" "%keypass%" "%alias%" -zipalign "%zipalign%"pause
把签名文件和apk拖到tool_output目录下,双击运行.bat,就在result目录下打出了新包。

相比最初的13.7Mb,处理后的安装包为12.6Mb,包体减小了约1.1Mb。安装运行,崩溃了。日志显示资源文件找不到导致了空指针。

原因是我们的项目里有个别库调用资源文件采用的是文件名的方法(库本身没有生成R文件),混淆后文件名变了,导致空指针。

接下来就需要config.xml了,打开config.xml


一共有5项,注释很清楚

1.property

seventzip: 指定是否是使用7z压缩

metaname : meta文件名

keeproot : 根路径是否混淆(res/drawable  -->  r/s)


2.whitelist

不混淆的资源文件清单。把用文件名调用的资源文件都列到这里。


3.keepmapping

mapping文件输出路径


4.compress

指定重打包时需要压缩的文件。

path标签中填的是需要被压缩的文件。


5.sign

签名信息,会被命令行中输入的签名信息覆盖。所以如果用命令行输,可以不写。


这个工具用起来很便捷,不需要写额外代码,只需要打出包后用AndroidResGuard工具处理一下就可以减小可观的包体大小。