以前的Fabric SDK允许这样的检查
if (Fabric.isInitialized()) {
crashSetParam(CrashParameters.ROOT_NODE, nodeInfoCompat.toString())
Crashlytics.logException(ex)
}
我无法确定如何在新的Firebase Android SDK中做到这一点,这导致我的junit测试可能会触及这个问题而崩溃。我意识到我可以把它包裹在一个接口中,但我也很好奇如何像上面那样用简单的方式解决。谢谢你。
我也在github上记录了一个问题。
https:/github.comfirebasefirebase-android-sdkissues1437。
如果没有检查,我们在运行单元测试时就会得到这样的东西。
java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process null. Make sure to call FirebaseApp.initializeApp(Context) first.
我已经用下面的方法解决了这个问题。
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);
}
}
我发现的另一个解决方案是把这个放在主应用程序类中。
if (FirebaseApp.getApps(getApplicationContext()).isEmpty()) {
FirebaseApp.initializeApp(getApplicationContext());}
我只测试了一下,但是在运行测试的时候,对于isEmpty()总是会返回true,而在正常使用的时候,会返回false。