コード混同後のログの解読ツール-retrace


Androidの開発では、コード混同ツールProguardの使用により、appソースコードが逆コンパイルされても簡単に解読されないことを保護することが知られているはずですが、Crashなどのstacktraceの情報が読みにくくなり、救済策があるので、混同されたstacktraceを混同前の情報に復元するためのツール-retraceを紹介します.
Android SDKはデフォルトでretraceスクリプトを持っていますが、一般的にはパスは
./tools/proguard/bin/retrace.bat
Proguardが混同すると、mappingというファイル名のマッピングテーブルが生成されます.txt
次に、
E/AndroidRuntime(24006): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
E/AndroidRuntime(24006):    at com.example.admin.proguardsample.a.a(Utils.java:10)
E/AndroidRuntime(24006):    at com.example.admin.proguardsample.MainActivity.onCreate(MainActivity.java:22)
E/AndroidRuntime(24006):    at android.app.Activity.performCreate(Activity.java:6106)
E/AndroidRuntime(24006):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
E/AndroidRuntime(24006):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2566)
E/AndroidRuntime(24006):    ... 10 more

上の情報処理、削除E/AndroidRuntime(24006):
これらの文字列retraceは正常に動作します.に届く
の文字列は
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
at com.example.admin.proguardsample.a.a(Utils.java:10)
at com.example.admin.proguardsample.MainActivity.onCreate(MainActivity.java:22)
at android.app.Activity.performCreate(Activity.java:6106)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2566)
... 10 more

上のstacktraceをテキストファイルに保存します.たとえば、名前は
tm_stacktrace.txt
./tools/proguard/bin/retrace.bat/Users/admin/Downloads/ProguardSample/app/build/outputs/mapping/release/mapping.txt/tmp/tm_stacktrace.txt
入手した読みやすいstacktraceは
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
at com.example.admin.proguardsample.Utils.int getBitmapWidth(android.graphics.Bitmap)(Utils.java:10)
at com.example.admin.proguardsample.MainActivity.void onCreate(android.os.Bundle)(MainActivity.java:22)
at android.app.Activity.performCreate(Activity.java:6106)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2566)
... 10 more

stacktraceをより容易かつ効率的に分析するために、
SourceFileとLineNumberのプロパティの保持
-keepattributesSourceFile,LineNumberTable