【发布时间】:2018-08-20 06:54:37
【问题描述】:
当我在项目中启用 Dexguard 时,我的 Fabric Crashlytics 崩溃报告出现问题。
我在我的项目中启用了 Dexguard,它运行良好。
然后我按照this page 中的说明进行操作,并添加了上述配置以启用结构对我的堆栈跟踪进行去混淆处理并显示正确的崩溃报告。以下是我在主模块的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
}
}
}
但是当在发布版本中遇到崩溃时,发生崩溃的文件名丢失了,但其他一切都正常工作并且堆栈跟踪几乎可以理解。这是一个示例崩溃报告:
正如您在崩溃报告中看到的,堆栈跟踪中仅缺少文件名。行号、方法名等其他描述完全OK。
虽然使用完整的方法名称,如 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,gradle插件版本更新为3.1.0,但问题依然存在。
【问题讨论】:
-
来自 Fabric 的 Mike。感谢有据可查的问题。我注意到的一件事是您使用的是非常旧的 Gradle 插件的 1.21.7。尝试更新到 1.25.1,如果有任何改变,请告诉我。
-
感谢 Mike,我将 gradle 插件更新到了 1.25.1 版,将 Crashlytics 库更新到了 2.9.1,但仍然存在问题。更诡异的是,第一行显示:
ir.resid.ui.ResidMainActivity.throwSomething (Unknown Source:87469) -
请注意,问题始于 XposedBridge - 它是 Xposed 框架(基本上是恶意软件框架)的一部分,它将组件和挂钩扩展到事件中。我看到它的主要用途是免费进行应用内购买或在游戏中作弊。这取决于您自己的看法,但根据我的经验,它会导致许多应用程序出现大量崩溃报告,如果在未受感染的设备上使用这些应用程序并不需要修复。
-
问题不在于崩溃报告,而是出现在堆栈跟踪中的“未知来源”部分而不是类名,并且它在问题内联的图片中可见。
-
请不要发布代码图片。
标签: android stack-trace google-fabric crashlytics-android dexguard