【问题标题】:Android Crashlytics sending incorrect line numberAndroid Crashlytics 发送不正确的行号
【发布时间】:2016-11-26 12:37:38
【问题描述】:

我正在尝试将 Crashlytics 与我的应用程序集成并且它正在运行,但是通过的行号似乎不正确。这是我为我的测试异常获得的堆栈:

Fatal Exception: java.lang.RuntimeException: This is a test crash
   at com.myapp.testapp.activity.MainActivity.animateReveal(MainActivity.java:42453)
   at com.myapp.testapp.activity.MainActivity.onClick(MainActivity.java:1356)
   at android.view.View.performClick(View.java:5204)
   at android.view.View$PerformClick.run(View.java:21153)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:148)
   at android.app.ActivityThread.main(ActivityThread.java:5417)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

所以我的崩溃发生在第 1453 行,但由于某种原因它显示为 42453?有趣的是,栈中的下一个行号是正确的……

Proguard:

# Crashlitics

-keepattributes SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
-keepattributes *Annotation*

【问题讨论】:

    标签: android crashlytics twitter-fabric


    【解决方案1】:

    你试过了吗?

    要让 Fabric 正确地对崩溃报告进行去混淆处理,您需要 从您的配置文件中删除此行,否则我们将无法自动上传您的映射文件:

    -printmapping mapping.txt

    -keep class com.crashlytics.** { *; }

    -dontwarn com.crashlytics.**

    【讨论】:

    • 我的设置符合这个,问题仍然存在
    • 发布完整的 proguard 文件
    • 恐怕我做不到,但它是 Fabric 的标准配置(遵循他们的文档)。唯一的问题是它基于带有优化的 Android SDK 之一,我不确定问题是否没有开始出现,因为我们切换到 SDK 的优化版本作为我们的配置的默认设置。
    【解决方案2】:

    可能是因为您正在使用 release 构建,它会删除 cmets/空格。

    如果您使用的是 debug 构建,那么它可能显示正确的行,因为它不会优化您的源代码...

    我仍然猜测行号显示不正确还有另一个原因,因为 Fabric 告诉我崩溃发生在第 400 行,即使在第 300 行调用了该函数。我的意思是如果 cmets 和空格将被删除,Fabric 应该告诉 line some line less 小于 300,而不是更多!

    【讨论】:

      【解决方案3】:

      在我的情况下,从“proguard-android-optimize.txt”默认 proguard 文件切换到“proguard-android.txt”解决了这个问题。使用 proguard 文件的优化版本可能会带来一定的风险,这似乎就是其中之一。

      【讨论】:

      • 我应该试试这个!
      【解决方案4】:

      要保留 Firebase Crashlytics SDK 生成可读崩溃报告所需的信息,请将以下行添加到您的 Proguard 或 Dexguard 配置文件中:

      -keepattributes SourceFile,LineNumberTable        # Keep file names and line numbers.
      -keep public class * extends java.lang.Exception  # Optional: Keep custom exceptions.
      

      【讨论】:

        【解决方案5】:

        我有同样的问题,一个简单的观察解决了我的问题,查看 proguard-rule 并取消注释这些行 (-keepattributes SourceFile,LineNumberTable)

        (-renamesourcefile 属性源文件)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-28
          • 1970-01-01
          • 1970-01-01
          • 2017-03-28
          • 1970-01-01
          • 1970-01-01
          • 2018-05-02
          • 2012-06-10
          相关资源
          最近更新 更多