Android混淆异常处理还原混淆代码
一、寻找 mapping.txt
文件
Google一番后发现了 mapping.txt
这个东东。要想知道mapping.txt
在哪,就先要弄清楚它是怎么来的。我们每次build
,ProGuard
就会输出下面几个文件:
dump.txt
介绍了APK中所有的class文件的内部结构。mapping.txt
提供原文件对应混淆后的类、方法和字段名称。seeds.txt
列出没有混淆的类和成员。usage.txt
列出从apk中删除的代码。
既然是 build
后输出的,那么位置也很清楚了:<module-name>/build/outputs/mapping/release/
有了 mapping.txt
,也知道这个文件就是源代码与混淆后的类,方法和属性名字之间的映射。那怎么能看到源代码呢?
二、还原混淆后的代码
首先要注意的一点是:每次混淆打包后,都会覆盖之前的 mapping.txt
,所以最好每次发版都保存下当前的mapping.txt
,并做好标注区分出版本,以便以后使用。
ProGuard 提供了命令行和 GUI 工具来还原混淆后的代码。
1.命令行
通过retrace工具(windows版本是retrace.bat,Mac/Linux上是retrace.sh),它的位置在<sdk-root>/tools/proguard/
。把需要还原的堆栈信息保存在obfuscated_trace
文件中
你可以再终端下输入:
retrace.bat -verbose mapping.txt obfuscated_trace.txt
2.GUI 工具
如果不用终端也可以,在 <sdk-root>/tools/proguard/bin
下,有个proguardgui.bat
GUI工具
运行
proguardgui.bat
从左边的菜单选择“ReTrace”
在上面的Mapping file中选择你的mapping文件,在下面输入框输入要还原的代码。
点击右下方的“ReTrace!”
如果还有疑问可以查看 Shrink Your Code and Resources