当我在项目中启用Dexguard时,我的Fabric Crashlytics崩溃报告出现了问题。
我在项目中启用了Dexguard,效果非常好。
然后我按照this page中的说明进行操作,并添加了上述配置,以使Fabric对我的堆栈跟踪进行去混淆并显示正确的崩溃报告。以下是我在主模块build.gradle
中应用fabric和dexguard插件的方法:
apply plugin: 'com.android.application'
apply plugin: 'dexguard'
apply plugin: 'io.fabric'
以下是我的proguard-project.txt
文件中的配置:
# Fabric
#############################################################################
-keepattributes *Annotation*,SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
-keepresourcexmlelements manifest/application/meta-data@name=io.fabric.ApiKey
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
#############################################################################
以下是我在发布版本中使用proguard-project.txt
的方法:
buildTypes{
debug{
proguardFile getDefaultDexGuardFile('dexguard-debug-shrink.pro')
proguardFile 'proguard-project.txt'
}
release{
proguardFile getDefaultDexGuardFile('dexguard-release.pro')
proguardFile 'proguard-project.txt'
proguardFile 'dexguard-project.txt'
if(new File("$projectDir/../local.properties").exists()){
signingConfig signingConfigs.release
}
}
}
但是当发布版本中遇到崩溃时,发生崩溃的文件名丢失了,但其他所有内容都正常工作,堆栈跟踪几乎可以理解。以下是崩溃报告示例:
正如您在崩溃报告中所看到的,堆栈跟踪中只缺少文件名。行号和方法名称等其他描述完全没问题。
虽然使用完整的方法名称(如ir.X.ui.XMainActivity.throwSomething
)和Unknown Source
前面的行号,但我可以得出错误发生的文件名,我希望我的堆栈跟踪显示文件名并完全是描述性的。我尝试了很多选项和许多试验和错误,但问题仍然存在。
有什么我想念的吗?我该如何解决这个问题?
我正在使用Dexguard的版本8.1.0.7
,Fabric插件的版本1.21.7
和Crashlytics库的版本2.9.0
。
我将Fabric插件更新为版本1.25.1
,将Crashlytics库更新为版本2.9.1
,但问题仍然存在。
我将Fabric插件更新为版本1.25.2
,将工具版本更新为27.0.3
,并将插件版本更新为3.1.0
,但问题仍然存在。
答案 0 :(得分:10)
您可以针对反混淆的崩溃报告执行以下步骤。 引自firebase crashlytics documentation
1.要保留Crashlytics对可读崩溃报告的需求,请添加 配置文件的以下行:
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
2.要让Crashlytics自动上传ProGuard或DexGuard映射文件,请从配置文件中删除此行:
-printmapping mapping.txt
答案 1 :(得分:4)
Dexguard加密代码并混淆文件和崩溃报告
根据问题,正确定义了所有内容,可以启用崩溃报告,没有任何更改。在“我的项目方案”中也是如此,使用Dexguard With Fabric。
将Dexguard集成到Project中时,Dexguard会对代码进行加密,并混淆其他库的文件和崩溃报告。
但是,如果您还使用Google Firebase Crashlytics,则无法在Firebase控制台中查看日志。您将获得Fabric提供的相同报告。
这些Crashlytics将在Google控制台中提供崩溃报告。您可以在Android Vitals的ANR和崩溃部分中查看崩溃日志。
该部分显示了从Android设备收集的所有ANR和崩溃,这些设备的用户已选择自动共享使用情况和诊断数据。只能检测到未混淆的堆栈轨迹异常。
Google对https://support.google.com/googleplay/android-developer/answer/6083203部分进行了解释
答案 2 :(得分:4)
按照以下步骤在Crashlytics中正确获取堆栈跟踪
检查此链接: https://support.google.com/googleplay/android-developer/answer/6295281?hl=en