我正在尝试将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*
答案 0 :(得分:0)
你试过这个吗?
要使Fabric能够正确地对您的崩溃报告进行去模糊处理,您需要这样做 从配置文件中删除此行,否则我们将无法自动上传您的映射文件:
-printmapping mapping.txt
和
-keep class com.crashlytics。** {*; }
-dontwarn com.crashlytics。**
答案 1 :(得分:0)
可能是因为您正在使用发布版本,这将删除评论/空格。
如果您正在使用 debug 版本,那么可能会显示正确的行,因为它不会优化您的源代码... < / p>
我仍然猜测还有另一个原因导致行号显示不正确,因为Fabric告诉我崩溃发生在第400行,即使该功能是在第300行调用的。我的意思是如果评论和要删除空格,Fabric应该告诉我们行少超过300,而不是更多!
答案 2 :(得分:0)
在我的情况下,从'proguard-android-optimize.txt'默认proguard文件切换到'proguard-android.txt'解决了这个问题。使用proguard文件的优化版本可能会带来一定的风险,而这似乎就是其中之一。
答案 3 :(得分:0)
要保留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.
答案 4 :(得分:0)
我遇到了同样的问题,一个简单的观察就解决了我的问题,请参阅 proguard-rule 并取消注释这些行 (-keepattributes SourceFile,LineNumberTable)
和
(-renamesourcefileattribute SourceFile)