最近我发布了一个已发布的混淆的Android应用程序,启用了firebase崩溃报告.应用程序崩溃,因为我没有上传映射文件,我无法正确读取堆栈跟踪.
所以我想下载堆栈跟踪并手动反混淆它 /retrace.sh -verbose mapping.txt ~/trace.txt
但是我无法获得堆栈跟踪的原始形式......
所以我有两个问题:
如何从其网站上的firebase崩溃报告选项卡获取原始表单?
如何在将应用程序发布到Play商店之前上传映射文件?
Wilik.. 7
目前,无法从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字符串放在详细信息而不是修剪出.
Firebase团队最近刚刚发布了一个Crash Reporting插件.指南在这里 - 使用Gradle上传ProGuard映射文件
老实说,我还没能成功启用这个插件,仍然被指南搞糊涂了.我真的希望他们将它作为简单的面料Crashlytics,只需添加ext.enableCrashlytics = true
了在build.gradle
文件中.
还有另一种方法,通过在发布前故意崩溃应用程序,然后在没有错误的情况下生成新版APK,然后您可以将mapping.txt
文件上传到Firebase崩溃报告控制台.:)
目前,无法从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字符串放在详细信息而不是修剪出.
Firebase团队最近刚刚发布了一个Crash Reporting插件.指南在这里 - 使用Gradle上传ProGuard映射文件
老实说,我还没能成功启用这个插件,仍然被指南搞糊涂了.我真的希望他们将它作为简单的面料Crashlytics,只需添加ext.enableCrashlytics = true
了在build.gradle
文件中.
还有另一种方法,通过在发布前故意崩溃应用程序,然后在没有错误的情况下生成新版APK,然后您可以将mapping.txt
文件上传到Firebase崩溃报告控制台.:)