当我得到这样的东西
ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException
ERROR/AndroidRuntime(18677): at com.companyname.a.a.a(Unknown Source)
我如何知道问题出在哪里并调试该问题?我仅从ProGuard获得了映射输出,并且不知道行号。谢谢。
Answers:
将以下行添加到您的proguard配置中。
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
现在,您的堆栈跟踪将包括行号,并且通过使用proguard随附的retrace工具(包含在Android SDK中),您可以像平常一样进行调试。
请注意,即使您没有使用这两个配置选项,只要您具有映射文件,即使没有完全明确的含义,retrace仍然可以输出有用的信息。
注意:带有映射的文件是由proguard配置选项生成的:
-printmapping outputfile.txt
在Android SDK随附的ant文件中,将其设置为mapping.txt。
祝好运。
要利用您的Android电子市场帐户中的所有堆栈跟踪,您可以-printmapping
将ProGuard配置中由选项生成的地图文件与ReTrace(ProGuard随行工具)一起使用,以解码堆栈跟踪。您也可以使用地图文件的内容进行手动解码,但这很繁琐。
在ProGuard手册下的示例中,有一节介绍如何生成有用的混淆堆栈跟踪信息,包括如何保留行号。
不幸的是,如果您没有设置ProGuard保留行号,那么您将只能识别引发异常的方法。
这是来自Android SDK的有关追溯工具的官方文档的链接:https : //developer.android.com/studio/build/shrink-code#decode-stack-trace
这篇文章也很好:https : //medium.com/@maheshwar.ligade/de-obfuscate-stack-traces-6e19a52a3379
对于所有您复制粘贴的兄弟:
retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]