##资源清理
### 反编译apk
1. 下载最新[apktool_x.jar], 并保存为***apktool.jar***
2. 下载apktool运行[脚本],并保存为***apktool.sh***
3. 将两个文件的权限设为可执行
4. 环境变量配置
5. 执行反编译apk命令`[在apktool文件目录下执行]`
```
在.bash_profile 加入如下配置
export PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:$"
```
```
$ #!/usr/bin/python
$ sudo chmod a+x apktool.jar
$ sudo chmod a+x apktool.sh
$ ./apktool.sh d ./yizhangtong/build/outputs/apk/ yizhangtong-PingAn-debug-0.apk -o /Users/wangguodong581/Downloads/abc/outputs/yizhangtong
```
[脚本]: http://www.jianshu.com/p/c90024f61653
[apktool_x.jar]: https://bitbucket.org/iBotPeaches/apktool/downloads/
### 资源清理脚本运行与分析
#####如何运行资源清理python脚本
* 在Terminal执行命令`[需要注意的是需要先反编译apk]`
```
$ traversal.py xxx
"xxx" 代表apk反编译后的路径,比如:/Users/wangguodong581/Downloads/abc/outputs/xxxxx/
```
##### 脚本分析
* 清除log文件中日志`_cleanLog()`
* 遍历反编译出来smali*文件中的资源,并存入相对应的字典中 `_verifyRes()` `_readRFile`
* 校验字典中的资源文件名 `_verifyRes()` `_loopFolder`
* 是否有被在java, layout, vaule下文件引用
* 是否有被反射使用
* 如果存在以上使用,则从字典中移除
* 过滤白名单资源,把对应资源字典中含有白名单的文件remove掉 `_readwhitelist()`
* 去除字典中R.drawable.xxx, R.String.xxx开头等规则的元素 `_checkSrc()`
* 删除字典中的资源 `_deleteFiles()`
```
移除字典中白名单资源文件脚本修改 _deleteFiles()函数
if x.find("**drawable**") >= 0:
_writeLog(x + " ---- " + x[12:].strip())
_writeLog("---has key--" + str(drawableDic.has_key(x[12:].strip())))
if drawableDic.get(x[12:].strip()):
drawableDic.__delitem__(x[12:].strip())
```
领取专属 10元无门槛券
私享最新 技术干货