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

Using a custom crash handler with Firebase installed

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

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() 方法中初始化的第一件事,因此我看不到在何处或如何防止来自 loading/initializing 本身的 Firebase 崩溃报告。

如有任何帮助,我们将不胜感激!

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

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

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'
}

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

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

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

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

dependencies {
    compile 'cat.ereza:customactivityoncrash:2.0.0'
}