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

时间:2017-01-14 10:41:55

标签: android firebase firebase-crash-reporting

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

所以我想下载堆栈跟踪并使用netsh interface ip show address | findstr /C:"Default Gateway"

手动对其进行反混淆处理

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

所以我有两个问题:

  1. 如何从其网站上的firebase崩溃报告标签中获取原始表单?
  2. 如何在将应用发布到Play商店之前上传映射文件?

1 个答案:

答案 0 :(得分:7)

  1. 目前,无法从Firebase崩溃报告中获取原始堆栈跟踪。因此,您需要在查看每个错误的详细信息时手动复制它们。
  2. 问题是,反混淆不能处理从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字符串的每一行的开头添加 。结果应如下所示

    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崩溃报告团队决定启用功能下载原始堆栈跟踪或只是放置字符串处,而不是修剪它。

    1. Firebase团队最近刚刚发布了一个Crash Reporting插件。 The guide is here - Uploading ProGuard mapping files with Gradle
    2. 老实说,我还没能成功启用此插件,仍然被指南迷惑了。我真的希望他们能够像在Fabric Crashlytics中那样简单,只需在ext.enableCrashlytics = true文件中添加build.gradle即可。

      另外一种方法是,在发布之前故意使应用崩溃,然后在没有错误的情况下生成新版APK,然后您可以将mapping.txt文件上传到Firebase崩溃报告控制台。 :)