web-dev-qa-db-ja.com

Androidで難読化された(ProGuardを使用した)アプリケーションでデバッグする方法は?

このようなものを得たとき

ERROR/AndroidRuntime(18677): Caused by: Java.lang.NullPointerException
ERROR/AndroidRuntime(18677):     at com.companyname.a.a.a(Unknown Source)

問題の場所を知り、この問題をデバッグするにはどうすればよいですか? ProGuardからマッピングの出力しか得られず、行番号がわかりません。ありがとう。

66
shiami

Proguard構成に次の行を追加します。

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

スタックトレースに行番号が含まれるようになり、proguardに同梱されているリトレースツール(Android SDK)に含まれる)を使用して、通常のようにデバッグできます。

これら2つの構成オプションを使用しなかった場合でも、完全に明確ではないが、retraceはマッピングファイルがあれば有用な情報を出力できることに注意してください。

注:マッピングを含むファイルは、proguard構成オプションによって生成されます。

 -printmapping outputfile.txt

Android SDKに同梱されているantファイルでは、mapping.txtに設定されています。

幸運を。

111

Android Marketアカウントからのスタックトレースを使用するには、ProGuard構成の-printmappingオプションで生成されたマップファイルを使用して、ReTrace(ProGuardコンパニオンツール)でスタックトレースをデコードします。マップファイルの内容を使用して手動でデコードすることもできますが、これは面倒です。

例の下のProGuardマニュアルには、行番号を保持する方法など、有用な難読化されたスタックトレースの作成に関するセクションがあります。

残念ながら、行番号を保持するようにProGuardを設定しなかった場合、例外をスローするメソッドのみを識別できます。

15
cistearns

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によって生成された出力ファイルです。

4
karma

Android SDK: https://developer.Android.com/studio/build/shrink-code#decode-stackからのリトレースツールに関する公式ドキュメントへのリンクを次に示します。 -痕跡

この記事もいいです: https://medium.com/@maheshwar.ligade/de-obfuscate-stack-traces-6e19a52a3379

あなたが兄弟をコピーアンドペーストするすべての場合:

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