减小apk的大小之 AndroResGuard

一、简介
AndroResGuard 是资源混淆工具,可以用来减少apk的大小。微信团队中的人开源出来的项目。他直接针对apk文件进行修改的。
git地址:https://github.com/shwenzhang/AndResGuard

二、简述原理
AndroResGuard通过两方面来减小apk的大小。
1)混淆资源
我们都知道,android在调用资源时,使用的都是int值,而不是直接使用res name的(由R文件可知)。这种对应的关系打包后会被储存resource.arsc文件里。AndroResGuard就是通过修改res name, 使其变短,改成a、b、c 这样的名字,从而减少文件大小。
注:a、我们平时说的混淆是针对java文件的。b、resource.ars文件在apk解压后可以找到
2)压缩
AndroResGuard采用了7z极限压限,将图片,资源文件压缩(包括上面提到的resource.arsc)来减少apk的大小(图片是直接打包进apk文件,通过unzip命令,我们可以看到经过AndroResGuard处理过的apk下的图片是压缩过的

三、实践
1)配置文件config.xml
配置文件包括了property,whitelist, keepmapping, compress,sign
property:通用属性,如是否要开启7z重新压缩apk包,是否保持路径(是否将res/drawable混淆成r/s
whitelist:白名单,即不混淆哪些资资文件名
keepmapping:主要用来指定旧的mapping文件
compress:是否压缩指定文件,如*.png,*.jpg,resource.arsc
sign:用来对处理过后的apk进行签名
2)命令行编译
下载后的文件夹下有个tool_output下文件,里面有使用命令行工具的简单例子(window端用.bat,mac端用.sh),修改文件里配置参数后即可运行
3)gradle编译
可参考:https://github.com/zouyuanfeng/AndResGuardDemo
原先4.1M,编译后3.9M,减小了近200K.
原先9M,编译后8.4M,减小了近600K
四、注意点
1)AndResGuard压缩了resources.arsc文件,而resources.arsc在安装之后仍被频繁读取,因此,压缩该文件会造成一定程度的性能损失。不过预计性能损失不大,此外compress也可以将resource.arsc去掉,不压缩
2)如果代码中有getIdentifier获取的资源,应该加入白名单中
http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=208135658&idx=1&sn=ac9bd6b4927e9e82f9fa14e396183a8f#rd

你可能感兴趣的:(减小apk的大小之 AndroResGuard)