从 Firebase 崩溃报告中获取原始堆栈跟踪

Get raw stacktrace from Firebase crash reporting

最近我发布了一个启用了 firebase 崩溃报告的混淆 Android 应用程序。应用程序曾经崩溃,因为我没有上传映射文件,所以我无法正确读取堆栈跟踪。

所以我想下载堆栈跟踪并用 /retrace.sh -verbose mapping.txt ~/trace.txt

手动反混淆

但是我无法获得原始形式的堆栈跟踪...

所以我有两个问题:

  1. 如何从他们网站上的 firebase 崩溃报告选项卡获取原始表格?
  2. 如何在将应用发布到 Play 商店之前上传映射文件?
  1. 目前,无法从 Firebase 崩溃报告中获取原始堆栈跟踪。所以在查看每个错误的详细信息时需要手动复制它们。

问题是反混淆不适用于从 Firebase 崩溃报告复制的堆栈跟踪字符串,这是因为在每一行的开头缺少 at 语句堆栈跟踪。

例如,这是您从 Firebase 崩溃报告中获得的信息

Exception java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.models.User.getUserName()' on a null object reference
com.example.views.adapters.ExampleAdapter.a (SourceFile:110)
com.example.views.adapters.ExampleAdapter.a (SourceFile:31)
b.a.a.a.b.a (SourceFile:54)
b.a.a.a.b.a (SourceFile:54)
android.support.v7.widget.RecyclerView$a.a (SourceFile:6279)
android.support.v7.widget.RecyclerView$a.b (SourceFile:6312)

您只需在包含 SourceFile 字符串的每一行的开头添加 at。结果应该是这样的

Exception java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.models.User.getUserName()' on a null object reference
at com.example.views.adapters.ExampleAdapter.a (SourceFile:110)
at com.example.views.adapters.ExampleAdapter.a (SourceFile:31)
at b.a.a.a.b.a (SourceFile:54)
at b.a.a.a.b.a (SourceFile:54)
at android.support.v7.widget.RecyclerView$a.a (SourceFile:6279)
at android.support.v7.widget.RecyclerView$a.b (SourceFile:6312)

有了这个新字符串,您应该能够像往常一样对堆栈跟踪进行去混淆处理。

我知道,这需要大量工作,尤其是在发生多个错误时,但这是当前的解决方法,直到 Firebase 崩溃报告团队决定启用一项功能来下载原始堆栈跟踪或只是将 at 字符串在细节处而不是修剪它。

  1. Firebase 团队最近为此发布了一个崩溃报告插件。 The guide is here - Uploading ProGuard mapping files with Gradle

老实说,我还没有成功启用这个插件,仍然被指南弄糊涂了。我真的希望他们能像在 Fabric Crashlytics 中一样简单,只需在 build.gradle 文件中添加 ext.enableCrashlytics = true

还有另一种方法,在发布前故意让应用程序崩溃,然后生成一个没有错误的新发布 APK,然后您可以将 mapping.txt 文件上传到 Firebase 崩溃报告控制台。 :)