最近我发布了一个已发布的混淆的Android应用程序,启用了firebase崩溃报告.应用程序崩溃,因为我没有上传映射文件,我无法正确读取堆栈跟踪.
所以我想下载堆栈跟踪并使用/retrace.sh -verbose mapping.txt~ / trace.txt手动对其进行反混淆处理.
但是我无法获得堆栈跟踪的原始形式……
所以我有两个问题:
>如何从其网站上的firebase崩溃报告选项卡获取原始表单?
>在将应用程序发布到Play商店之前,如何上传映射文件?
解决方法:
>目前,无法从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字符串的每一行的开头添加.结果应该是这样的
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字符串放在详细信息而不是修剪出.
老实说,我还没能成功启用这个插件,仍然被指南搞糊涂了.我真的希望他们能够像在Fabric Crashlytics中那样简单,只需在build.gradle文件中添加ext.enableCrashlytics = true即可.
还有另一种方法,通过在发布前故意崩溃应用程序,然后在没有错误的情况下生成新版APK,然后您可以将mapping.txt文件上传到Firebase崩溃报告控制台.
标签:android,firebase,firebase-crash-reporting
来源: https://codeday.me/bug/20190611/1218204.html