【问题标题】:Firebase crash report contains stack trace with <OR>Firebase 崩溃报告包含带有 <OR> 的堆栈跟踪
【发布时间】:2017-04-18 12:37:32
【问题描述】:

我有一个正在生产的应用,我正在使用 Firebase 进行错误和崩溃日志记录。最近,我在异常的堆栈跟踪中看到了一些行,从&lt;OR&gt; 开始。下面是从 Firebase 报告的异常中直接获取的示例(保存包名称):

Exception java.lang.NullPointerException: Attempt to invoke interface method 'void com.mycompany.myapp.managers.b$a.f()' on a null object reference
com.mycompany.myapp.managers.PermissionManager.getInstance (PermissionManager.java)
<OR>.checkPermission (PermissionManager.java)
<OR>.onRequestPermissionsResult (PermissionManager.java)
com.mycompany.myapp.activities.ShareImageActivity.onSaveShare (ShareImageActivity.java)
com.mycompany.myapp.activities.ShareImageActivity$3.onClick (ShareImageActivity.java)

我知道这不是常规的堆栈跟踪,因为 onRequestPermissionResults 不调用 checkPermission 并且 checkPermission 不调用 PermissionManager.getInstance。 我认为这是 Android 为了安全起见混淆堆栈跟踪的方式之一,但我找不到任何关于此的文档。有谁知道如何解释这个堆栈跟踪?

【问题讨论】:

  • 你在使用 proguard 吗?
  • @IshanKhanna 是的,我已经上传了mapping.txt 文件
  • 上传到哪里?请去混淆你的堆栈跟踪
  • @cricket_007 到 Firebase。我不知道我还能做些什么来去混淆堆栈跟踪。
  • 上传映射文件时应该这样做。 support.google.com/googleplay/android-developer/answer/6295281

标签: android firebase firebase-crash-reporting


【解决方案1】:

您在此处看到的这表明崩溃报告当时无法确定实际对象。目前,Proguard 反混淆存在一种已知情况,其中哪个对象是此处的目标可能是模棱两可的。如果您要从类中删除行号,这可能就是这种情况,看起来您正在这样做。如果您能够更改 Proguard 设置以删除行号的剥离,这种情况可能会有所改善。

【讨论】:

    【解决方案2】:

    将此添加到您的proguard-rules.pro

    // obfuscate file name and keep line numbers
    -renamesourcefileattribute SourceFile
    -keepattributes SourceFile,LineNumberTable
    

    它应该消除歧义,并且您不应再在堆栈跟踪中看到&lt;OR&gt;

    【讨论】:

      猜你喜欢
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      相关资源
      最近更新 更多