当混淆后的代码输出一个堆栈信息时,方法名是不可识别的,这使得调试变得很困难,甚至是不可能的。
幸运的是,当ProGuard运行时,它都会输出一个<project_root>/bin/proguard/mapping.txt文件,而这个文件中包含了原始的类,方法和字段名被映射成的混淆名字。
retrace.bat脚本(Window)或retrace.sh脚本(Linux,Mac OS X)可以将一个被混淆过的堆栈跟踪信息还原成一个可读的信息。它位于<sdk_root>/tools/proguard文件夹中。
执行retrace工具的语法如下:
<1>For Windows OS
retrace.bat [-verbose] <mapping_file> [<stacktrace_file>]
<2>For Mac OS
retrace.sh [-verbose] <mapping_file> [<stacktrace_file>]
例如:
retrace.bat -verbose mapping.txt obfuscated_trace.txt
如果你没有指定<stacktrace_file>,retrace工具会从标准输入读取。
[-verbose]: 可以还原更详细的信息,如方法的返回值类型等;
---------------------------------------------------------------------------------------------------
也可以使用GUI工具:在<sdk-root>/tools/proguard/bin
下,有个proguardgui.sh
GUI工具(Mac下)
- 运行
proguardgui.sh
- 从左边的菜单选择“ReTrace”
- 在上面的Mapping file中选择你的mapping文件,在下面输入框输入要还原的代码。
- 点击右下方的“ReTrace!”