Android查看混淆过的调用堆栈

1,571 阅读1分钟

在 proguard 文件中加入以下字段可以显示行号,避免出现 unknown source 的问题:

-keepattributes SourceFile,LineNumberTable

但是这样显示出来的行号是混乱的,并且方法名也被混淆了,并不容易查找堆栈信息。 实际上 Android 提供了非常好用的工具 retrace,位于 sdk/tools/proguard 目录下,可以方便查看堆栈调用信息。
使用Android Studio编译签名 apk 后会在 build 目录下生成 mapping.txt 文件,当然也可以自己指定:

-printmapping mapping.txt

假如将混淆过的 log 保存为 trace.txt 文件,使用以下命令即可快速转换:

retrace mapping.txt trace.txt

虽然行号依然是混乱的(这是无法避免的,除非不使用混淆),但是方法名都会原本打印出来。