当我得到这样的东西
ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException
ERROR/AndroidRuntime(18677): at com.companyname.a.a.a(Unknown Source)
我怎样才能知道问题出在哪里并调试这个问题?我只得到了 ProGuard 的映射输出,不知道行号。谢谢。
当我得到这样的东西
ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException
ERROR/AndroidRuntime(18677): at com.companyname.a.a.a(Unknown Source)
我怎样才能知道问题出在哪里并调试这个问题?我只得到了 ProGuard 的映射输出,不知道行号。谢谢。
将以下行添加到您的 proguard 配置中。
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
现在您的堆栈跟踪将包含行号,并且通过使用 proguard 附带的回溯工具(包含在 Android SDK 中),您可以像往常一样进行调试。
请注意,即使您没有使用这两个配置选项,只要您拥有映射文件,retrace 仍然可以输出有用的信息,尽管并非完全明确。
注意:带有映射的文件是由 proguard 配置选项生成的:
-printmapping outputfile.txt
在 Android SDK 附带的 ant 文件中,它被设置为 mapping.txt。
祝你好运。
要使用您的 Android Market 帐户中的任何堆栈跟踪,您可以使用-printmapping
通过 ProGuard 配置中的选项生成的映射文件和 ReTrace(ProGuard 配套工具)来解码堆栈跟踪。您也可以使用地图文件的内容手动解码,但这很乏味。
在示例下的 ProGuard 手册中,有一节关于生成有用的混淆堆栈跟踪,包括如何保留行号。
不幸的是,如果您没有将 ProGuard 设置为保留行号,那么您将只能识别引发异常的方法。
要回溯混淆的 ProGuard 文件,请执行以下步骤:
您需要安装 Proguard。
Proguard 为您提供了一个 UI 模式,这是一个很好的回溯工具。
打开你在 MAC 机器中找到的 proguardgui.sh
/Users/{name}/Library/Android/sdk/tools/proguard/bin/proguardgui.sh
您可以通过终端运行它。
将堆栈跟踪粘贴到 stack_trace.txt
运行以下命令: java -jar retrace.jar classes-processed.map stack_trace.txt
retrace.jar 位于 sdk\tools\proguard\lib\retrace.jar classes-processed.map 是 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>]