最近,我发布了一个已混淆的Android应用,其中启用了Firebase崩溃报告。应用程序一旦崩溃,由于我还没有上传映射文件,因此无法正确读取stacktrace。
所以我想下载堆栈跟踪并使用/retrace.sh -verbose mapping.txt ~/trace.txt
对其进行模糊处理
但是我无法获取原始形式的stacktrace ...
所以我有两个问题:
最佳答案
问题是,去模糊处理不适用于从Firebase崩溃报告中复制的堆栈跟踪字符串,这是由于堆栈跟踪每一行开头的语句缺少所致。
例如,这是您从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 Crash Reporting团队决定启用某个功能来下载原始堆栈跟踪或只是将放在字符串的详细信息上,而不是修剪掉。
老实说,我一直无法成功启用此插件,但仍然被指南弄糊涂了。我真的希望他们通过在
ext.enableCrashlytics = true
文件中添加build.gradle
来使其像在Fabric Crashlytics中一样简单。还有另一种方法,在发行前故意使应用程序崩溃,然后生成没有错误的新发行版APK,然后可以将
mapping.txt
文件上传到Firebase Crash Reporting控制台。 :)关于android - 从Firebase崩溃报告中获取原始的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41649046/