最近,我发布了一个已发布的混淆的Android应用,并启用了firebase崩溃报告。应用程序崩溃,因为我没有上传映射文件,我无法正确读取堆栈跟踪。
所以我想下载堆栈跟踪并使用netsh interface ip show address | findstr /C:"Default Gateway"
但是我无法获得堆栈跟踪的原始形式......
所以我有两个问题:
答案 0 :(得分:7)
问题是,反混淆不能处理从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崩溃报告团队决定启用功能下载原始堆栈跟踪或只是放置在字符串处,而不是修剪它。
老实说,我还没能成功启用此插件,仍然被指南迷惑了。我真的希望他们能够像在Fabric Crashlytics中那样简单,只需在ext.enableCrashlytics = true
文件中添加build.gradle
即可。
另外一种方法是,在发布之前故意使应用崩溃,然后在没有错误的情况下生成新版APK,然后您可以将mapping.txt
文件上传到Firebase崩溃报告控制台。 :)