Android Proguard Retrace

Posted on By Vivian Sun

Proguard Retrace

混淆过的app出现异常时,需要对应到原始的code上

Android SDK 中有一个工具可以让我们从异常堆栈中还原ProGuard 混淆过的代码

工具

Windows上可以直接使用GUI界面

也可以直接使用官方提供的在线工具 ProGuardReTrace

使用说明

在使用时要特别注意Input的写法规则和mapping文件(mapping文件通常在:build\outputs\mapping里面)

例如:

01-20 17:24:30.528931  2786  8975 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.android.contacts.g.i$a.a()' on a null object reference
01-20 17:24:30.528931  2786  8975 E AndroidRuntime: 	at com.android.contacts.g.f.h(PrepareSmartDialDataThread.java:757)
01-20 17:24:30.528931  2786  8975 E AndroidRuntime: 	at com.android.contacts.g.f.run(PrepareSmartDialDataThread.java:90)

这样直接写进去肯定是不行的,要改成下面的写法:

at com.android.contacts.g.i$a.a()
at com.android.contacts.g.f.h(PrepareSmartDialDataThread.java:757)
at com.android.contacts.g.f.run(PrepareSmartDialDataThread.java:90)

语句前要加上at,而且返回值要移除(例如第一行的java.lang.String)

还有要注意mapping文件,使用Jenkins build自动生成的mapping和本地build出的mapping不同,所以要选择对应的mapping。

正常的解析效果:

Reference

Proguard Retrace not working