如何检查 Firebase Crashlytics 是否已初始化?

daz*_*000 5 crashlytics-android

以前的 Fabric SDK 允许这样的检查

if (Fabric.isInitialized()) {
    crashSetParam(CrashParameters.ROOT_NODE, nodeInfoCompat.toString())
    Crashlytics.logException(ex)
}
Run Code Online (Sandbox Code Playgroud)

我无法确定如何在新的 Firebase Android SDK 中执行此操作,这会导致我的 junit 测试可能会遇到此问题而崩溃。我意识到我可以将它包装在一个界面中,但我也很好奇如何以上面这样的简单方式解决它。谢谢。

我也在github上记录了一个问题:

https://github.com/firebase/firebase-android-sdk/issues/1437

如果没有检查,我们在运行单元测试时会得到这样的结果:

java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process null. Make sure to call FirebaseApp.initializeApp(Context) first.
Run Code Online (Sandbox Code Playgroud)

我现在已经用以下方法修复了它:

fun logException(ex: Throwable, nodeInfoCompat: AccessibilityNodeInfoCompat?) {
    // We check to make sure Fabric is initialized or else the tests will fail - see above comment
    try {
        FirebaseCrashlytics.getInstance().setCustomKey(CrashParameters.ROOT_NODE, nodeInfoCompat.toString())
        FirebaseCrashlytics.getInstance().recordException(ex)
    } catch (e: IllegalStateException) {
        Timber.e(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 1

我发现的另一个解决方案是将其放在主应用程序类中

if (FirebaseApp.getApps(getApplicationContext()).isEmpty()) {
FirebaseApp.initializeApp(getApplicationContext());}
Run Code Online (Sandbox Code Playgroud)

我只对其进行了一些测试,但在运行测试时,isEmpty() 总是返回 true,而正常使用时它将返回 false。