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ツールを使用すると、通常のようにデバッグできます。
これらの2つの構成オプションを使用していなくても、マッピングファイルを持っている場合、完全に明確ではありませんが、Retraceが有用な情報を出力できることに注意してください。
注:マッピングを備えたファイルは、Proguard構成オプションによって作成されます。
-printmapping outputfile.txt
Android SDKに出荷されたANTファイルでは、Mapping.txtに設定されています。
幸運を。
他のヒント
Androidマーケットアカウントからスタックトレースを使用するには、マップファイルを使用して、-printmapping
Proguard Configのオプション、Retrace(Proguard Companion Tool)を使用して、スタックトレースをデコードします。マップファイルの内容を使用して手でデコードすることもできますが、これは退屈です。
例の下のProguardマニュアルには、ライン番号を保持する方法を含む有用な難読化されたスタックトレースの作成に関するセクションがあります。
残念ながら、ライン番号を保持するようにProguardを設定しなかった場合、例外をスローする方法のみを識別することができます。
stack_trace.txtにスタックトレースを貼り付けます
次のコマンドを実行します:java -jar retrace.jar classesprocessed.map stack_trace.txt
Retrace.jarはsdk tools proguard lib retrace.jar classes-processed.mapにあります。
Android SDKのRetraceツールに関する公式ドキュメントへのリンクを次に示します。 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>]