Proguard 混淆导致神秘错误

Proguard obfuscation causing cryptic error

我正在构建一个使用 Proguard 混淆的发布 apk。我添加了前两个规则来帮助我解码 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)

前两条规则帮助我显示了实际的行号,但我无法弄清楚 'e.b.a' 和 'e.b' 暗示的是什么。任何帮助将不胜感激。

编辑:

使用 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

使用 proguard 文档 http://developer.android.com/tools/help/proguard.html 您会发现可以使用 sdk 工具中包含的 proguard 对堆栈跟踪进行去混淆处理。

retrace.bat -verbose mapping.txt obfuscated_trace.txt

如您所见,如果您使用构建 APK 时生成的 mapping.txt 文件(或 vanilla 中的 JAR Java),您可以取消混淆堆栈跟踪。

如果您更喜欢使用 GUI,您还可以查看 Android SDK 文件夹 <path>/sdk/tools/proguard/bin/proguardgui.{bat|sh}。 GUI 允许您 select 您的映射文件,然后 copy/paste 堆栈跟踪到 window 去混淆。