如何使用Android上的混淆(带有Proguard)应用程序进行调试?
-
29-09-2019 - |
题
当我得到这样的东西
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文件中,将其设置为映射.txt。
祝你好运。
其他提示
为了利用您的Android市场帐户中的任何堆栈跟踪-printmapping
选项在Proguard配置中,并带有reatrace(Proguard Companion Tool)来解码堆栈跟踪。您也可以使用地图文件的内容手工解码,但这很乏味。
在示例中的Proguard手册中,有一个部分关于产生有用的混淆堆栈痕迹,包括如何保持线路数。
不幸的是,如果您没有设置前进以保留行号,那么您将只能识别出抛出异常的方法。
将您的堆栈跟踪粘贴在stack_trace.txt中
运行以下命令:java -jar retrace.jar class -processed.map stack_trace.txt
retace.jar在sdk tools proguard lib retace.jar class.processed.map是proguard生成的输出文件时
这是Android SDK的Retrace Tool的官方文档的链接: 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>]