Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android上调试模糊(带有ProGuard)应用程序?_Android_Debugging_Obfuscation_Proguard - Fatal编程技术网

如何在Android上调试模糊(带有ProGuard)应用程序?

如何在Android上调试模糊(带有ProGuard)应用程序?,android,debugging,obfuscation,proguard,Android,Debugging,Obfuscation,Proguard,当我得到这样的东西时 ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException ERROR/AndroidRuntime(18677): at com.companyname.a.a.a(Unknown Source) 如何知道问题所在并调试此问题? 我只从ProGuard获得映射输出,不知道行号。 谢谢。要使用Android Market帐户中的任何堆栈跟踪,您可以使用ProGuard配置中的-pri

当我得到这样的东西时

ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException
ERROR/AndroidRuntime(18677):     at com.companyname.a.a.a(Unknown Source)
如何知道问题所在并调试此问题? 我只从ProGuard获得映射输出,不知道行号。
谢谢。

要使用Android Market帐户中的任何堆栈跟踪,您可以使用ProGuard配置中的
-printmapping
选项生成的地图文件,并使用ReTrace(ProGuard companion tool)解码堆栈跟踪。您也可以使用地图文件的内容手动解码,但这很繁琐

在ProGuard手册的“示例”下,有一节介绍如何生成有用的模糊堆栈跟踪,包括如何保留行号


不幸的是,如果没有将ProGuard设置为保留行号,则只能识别引发异常的方法。

将以下行添加到ProGuard配置中

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable
现在,堆栈跟踪将包括行号,通过使用proguard附带的回溯工具(包括在Android SDK中),您可以像正常情况一样进行调试

请注意,即使您没有使用这两个配置选项,只要您有映射文件,回溯仍然可以输出有用的信息,尽管不是完全明确的

注意:带有映射的文件由proguard配置选项生成:

 -printmapping outputfile.txt
在Android SDK附带的ant文件中,它被设置为mapping.txt


祝你好运。

将堆栈跟踪粘贴到stack_trace.txt中

运行以下命令:java-jar retrace.jar classes-processed.map stack\u trace.txt

retrace.jar位于sdk\tools\proguard\lib\retrace.jar
classes-processed.map是proguard在您进行模糊处理时生成的输出文件

这里有一个链接,指向Android SDK中有关回溯工具的官方文档:

这篇文章也很好:

对于所有复制粘贴兄弟:

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]
retrace.bat | retrace.sh[-verbose]mapping.txt[]

要回溯模糊的ProGuard文件,请执行以下步骤:

  • 您需要安装Proguard

  • Proguard为您提供了一个UI模式,这是一个很好的追溯工具

  • 打开在MAC machine中找到的proguardgui.sh

    /Users/{name}/Library/Android/sdk/tools/proguard/bin/proguardgui.sh
    
    你可以通过终端运行它

  • 然后,您可以输入您的映射文件和要回溯且应该回溯的被剪断部分

  • ADT 17(目前是预览版)中也解释了这一过程,这是对PorGuard在Android上配置方式的进一步更改。它不会更改使用打印映射进行调试的方式,但会更改您最初配置ProGuard的方式。@cistearns我尝试了相同的方法,但结果与编码值相同:(有什么帮助吗?我不知道如何使用它。你能提供更多信息吗?甚至可以调试模糊的应用程序吗?这只适用于我在活动中的情况,但不会命中片段中的断点。你知道为什么会发生吗?)