2

Proguard で難読化されたリリース apk を作成しています。最初の 2 つのルールを追加して、logcat が吐き出す可能性のあるエラーをデコードできるようにしました。

-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable

-keep @io.realm.annotations.RealmModule class * 
-dontwarn javax.**
-dontwarn io.realm.**
-dontwarn rx.internal.**

#Butterknife
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}


#EventBus
-keepclassmembers class ** {
 public void onEvent*(**);
}

#JodaTime 

-dontwarn org.joda.convert.**
-dontwarn org.joda.time.**
-keep class org.joda.time.** { *; }
-keep interface org.joda.time.** { *; }

アプリのクラッシュ時のエラーは次のとおりです。

AndroidRuntime:Error at com.example.app.e.b.a(SourceFile:65)
AndroidRuntime:Error at com.example.app.e.b.doInBackground(SourceFile:21)

最初の 2 つのルールは、実際の行番号を表示するのに役立ちましたが、'eba' と 'eb' が何を示唆しているのかを理解するのに苦労しています。どんな助けでも大歓迎です。

編集:

ReTrace ツールを使用した後、次のメッセージが表示されました。

07-30 13:38:44.886 E/AndroidRuntime(5563): Process: com.example.app, PID: 5563
07-30 13:38:44.886 E/AndroidRuntime(5563):  at com.example.app.e.c$a.a(SourceFile:266)
07-30 13:38:44.886 E/AndroidRuntime(5563):  at com.example.app.e.c$a.doInBackground(SourceFile:250)
07-30 13:38:44.886 E/ActivityManager(1173): App crashed! Process: com.example.app
4

1 に答える 1

2

proguard http://developer.android.com/tools/help/proguard.htmlのドキュメントを使用すると、sdk ツールに含まれる proguard を使用してスタック トレースを難読化解除できることがわかります。

retrace.bat -verbose mapping.txt obfuscated_trace.txt

ご覧のとおり、APK (またはバニラ Java の JAR) をビルドしたときに生成された mapping.txt ファイルを使用すると、スタック トレースの難読化を解除できます。

GUI を使用したい場合は、Android SDK フォルダー内を調べることもできます<path>/sdk/tools/proguard/bin/proguardgui.{bat|sh}。GUI を使用すると、マッピング ファイルを選択し、スタック トレースをコピーしてウィンドウに貼り付けて難読化を解除できます。

于 2015-07-30T20:30:58.517 に答える