Search code examples
androidfirebasefirebase-crash-reporting

Get raw stacktrace from Firebase crash reporting


Recently I have a published obfuscated Android app with firebase crash reporting enabled. App once crashes and since I haven't uploaded mapping file I cannot read stacktrace properly.

So I wanted to download stack trace and deobfuscate it manually with /retrace.sh -verbose mapping.txt ~/trace.txt

However I'm unable to get raw form of stacktrace...

So I have 2 questions:

  1. How can I get raw form from firebase crash reporting tab on their site?
  2. How can I upload mapping file before publishing app into play store?

Solution

    1. Currently, there's no way to get raw stack traces from Firebase Crash Reporting. So you need to copy them manually when viewing the detail of each error.

    The problem is the deobfuscation doesn't work with that stack trace string copied from Firebase Crash Reporting, It's because of the missing at statement at the beginning of each line of the stack trace.

    For example, this is what you get from Firebase Crash Reporting

    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)
    

    You just need to add at at the beginning of each line that contains SourceFile string. The result should look like this

    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)
    

    With this new string, you should be able to deobfuscate the stack trace as usual.

    I know, that's a lot of work especially when there are multiple errors occurred but this is the current workaround until the Firebase Crash Reporting team decided to enable a feature to download raw stack traces or just put the at string at the details instead of trimming that out.

    1. Firebase team just recently released a Crash Reporting plugin for this purpose. The guide is here - Uploading ProGuard mapping files with Gradle

    Honestly, I haven't been able to enable this plugin successfully, still confused by the guide. I really hope they will make it as simple as in Fabric Crashlytics, by just adding ext.enableCrashlytics = true in the build.gradle file.

    There's also another way, by purposely crashing the app before release, then generate a new release APK without the error, and then you can upload the mapping.txt file to Firebase Crash Reporting console. :)