我一直在使用proguard工具中内置的eclipse来隐藏代码,这很好用。但是,当我尝试回溯混淆代码的堆栈跟踪时,回扫不会输出未混淆的堆栈跟踪。
我仔细检查了mapping.txt以确定我使用的是正确的。
这是我的堆栈跟踪
ERROR/AndroidRuntime(19398):
FATAL EXCEPTION: Thread-35
ERROR/AndroidRuntime(19398): java.lang.NullPointerException
ERROR/AndroidRuntime(19398): at android.graphics.Canvas.throwIfRecycled(Canvas.java:954)
ERROR/AndroidRuntime(19398): at android.graphics.Canvas.drawBitmap(Canvas.java:980)
ERROR/AndroidRuntime(19398): at com.excelectronic.b.aa.a(ProGuard:535)
ERROR/AndroidRuntime(19398): at com.excelectronic.g.f.a(ProGuard:220)
ERROR/AndroidRuntime(19398): at com.excelectronic.game.GameView.a(ProGuard:198)
ERROR/AndroidRuntime(19398): at com.excelectronic.game.GameView.onDraw(ProGuard:98)
ERROR/AndroidRuntime(19398): at com.excelectronic.game.ac.run(ProGuard:121)
并使用命令
retrace.bat -verbose mapping.txt obfuscated_trace.txt
答案 0 :(得分:15)
默认情况下,ProGuard的ReTrace工具要求堆栈跟踪格式正确,这是java打印出来的方式。这意味着它期望在适当的位置换行,并且没有像“ERROR / AndroidRuntime(19398)”这样的前缀。
或者,您可以修改ReTrace用于解析堆栈跟踪的正则表达式。
答案 1 :(得分:1)
在使用ReTrace之前,使用traceview提取原始Java堆栈跟踪。