在 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
虽然行号依然是混乱的(这是无法避免的,除非不使用混淆),但是方法名都会原本打印出来。