使用安装了 Firebase 的自定义崩溃处理程序

Posted

技术标签:

【中文标题】使用安装了 Firebase 的自定义崩溃处理程序【英文标题】:Using a custom crash handler with Firebase installed 【发布时间】:2017-09-03 07:35:55 【问题描述】:

我一直在使用一个简洁的库来处理强制关闭崩溃:

https://github.com/Ereza/CustomActivityOnCrash

在我决定将 Firebase 通知添加到我的应用之前,它一直运行良好。我只选择了通知,因此我只添加了以下依赖项:

compile 'com.google.firebase:firebase-messaging:10.0.1'

由于某种原因,Firebase 崩溃报告也正在初始化,因为自定义崩溃处理程序会看到它,甚至会显示以下消息:

E/CustomActivityOnCrash: IMPORTANT WARNING! You already have an UncaughtExceptionHandler, 
are you sure this is correct? If you use ACRA, Crashlytics or similar libraries, 
you must initialize them AFTER CustomActivityOnCrash! Installing anyway, but your
original handler will not be called.

我的自定义崩溃处理程序是在我的 (Application) onCreate() 方法中初始化的第一件事,所以我看不到在哪里或如何阻止 Firebase 崩溃报告本身加载/初始化。

任何帮助将不胜感激!

【问题讨论】:

您的应用程序启动的 logcat 输出是否包含与 FirebaseCrash 相关的任何消息?当我在没有 FirebaseCrash 的情况下运行应用程序时,我看到 D/FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization。当 FirebaseCrash 出现时,我看到 I/FirebaseCrash: FirebaseCrash reporting initialized 等等,我现在真的看到了:I/FirebaseCrashApiImpl: FirebaseCrashApiImpl created by ClassLoader p[DexPathList[..... I/FirebaseCrash: FirebaseCrash reporting initialized com.google.....跨度> 【参考方案1】:

感谢@BobSnyder 的评论,我找到了答案 - 它引导我搜索并找到之前的问题/答案:

How to disable default Firebase crash reporting?

最终我使用这个答案来解决我的问题:

If you want to disable the Firebase Analytics Crash Reporting, use the below 
code inside app.gradle file.

configurations 
    all*.exclude group: 'com.google.firebase', module: 'firebase-crash'

【讨论】:

【参考方案2】:

我是那个库的开发者。最高 1.5.0 的版本会导致 Firebase 崩溃报告停止工作。应用不会崩溃,但 Firebase 内部设置的原始 UncaughtExceptionHandler 永远不会被调用,因此您不会在 Firebase 控制台中获得崩溃数据。

即使 CustomActivityOnCrash.install() 被称为 Application 类的第一行,也会发生这种情况,因为 Firebase 将其 UncaughtExceptionHandler 初始化为提供程序,因此在 Application 对象实例化之前结束。

该库的 2.0.0 版通过使用与 Firebase 相同的过程(使用提供程序)解决了此问题,但具有更高的 initOrder,因此它在 Firebase 之前执行。

更新您的依赖项以使其按预期工作(但是,请注意 API 更改,因为 2.x 版与 1.x 代码不兼容):

dependencies 
    compile 'cat.ereza:customactivityoncrash:2.0.0'

【讨论】:

以上是关于使用安装了 Firebase 的自定义崩溃处理程序的主要内容,如果未能解决你的问题,请参考以下文章

上传 1 个缺失的 DSYM 以处理 Firebase 崩溃报告中的 18 次崩溃

执行后台获取完成处理程序后应用程序崩溃

使用 Firebase 身份验证时应用程序崩溃,原因:“已配置默认应用程序。”

新的自定义组件使 IDE 崩溃

Firebase FCM 令牌和给每个用户的自定义消息

为Firebase身份验证帐户实施密码的自定义规则