android - Firebase + RoboElectric : java. lang.IllegalStateException:名称为 [DEFAULT] 的 FirebaseApp 不存在

标签 android firebase robolectric

我在我们的 android 应用程序中使用 Firebase 进行远程配置。下面是在我的应用程序类 onCreate 方法中完成的初始化:

    FirebaseRemoteConfig remoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings settings = new FirebaseRemoteConfigSettings.Builder()
                .setDeveloperModeEnabled(BuildConfig.DEBUG)
                .build();
    remoteConfig.setConfigSettings(settings);
    setFirebaseDefault();

    Map<String, Object> defaults = new HashMap<>();
    defaults.put(FirebaseConstantsKt.BREAKING_NEWS, "");
    defaults.put(FirebaseConstantsKt.ENABLE_BREAKING_NEWS, false);
    FirebaseRemoteConfig.getInstance().setDefaults(defaults);

根据 this回答我的 build.gradle 文件也有下面一行:

apply plugin: 'com.google.gms.google-services'  

当我运行该应用程序时它工作正常但是当我尝试运行我的 Roboelectric 测试用例时它崩溃并出现以下异常:

java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist. at com.google.firebase.FirebaseApp.getInstance(Unknown Source) at com.google.firebase.FirebaseApp.getInstance(Unknown Source) at com.google.firebase.remoteconfig.FirebaseRemoteConfig.getInstance(Unknown Source) at com.woi.apppackage.android.MyApplication.initFirebase(MyApplication.java:225) at com.woi.apppackage.android.MyApplication.onCreate(MyApplication.java:107) at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:140) at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:433) at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:240) at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:188) at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:54) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:152) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

测试与 Firebase 无关。如果我在 onCreate 中注释掉 Firebase 代码,测试运行正常。我想我在 Firebase 的初始化中遗漏了一些东西

最佳答案

这可能是由 Firebase 崩溃引起的。它的当前实现创建了一个名为 background_crash 的进程。您的 Application 类实例会为您应用的每个进程创建,包括 background_crash。这在 documentation 中有描述。 .

尝试添加此代码以仅在主进程中初始化远程配置:

    if (FirebaseApp.getApps(this).isEmpty()) {
        // In the crash process
    } else {
        // Not in crash process
        // Init Remote Config here
    }

关于android - Firebase + RoboElectric : java. lang.IllegalStateException:名称为 [DEFAULT] 的 FirebaseApp 不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38713427/

相关文章:

javascript - 带有axios请求的firebase云功能CORS错误

java - Android Java 静态泛型调用

android - Robolectric 测试 Activity 创建,包括 Intent 附加功能

java - 有没有人用 couchbase-lite-android 1.02 实现了 robolectric 2.3?

android - 在 Android 中重新创建带有 leave behind 的 Material 设计列表的问题

java - Fragment 还是 MapView?

通过 gradle 更新相同的 APK 而不是创建新的 APK 的 Firebase 应用分发

android - 为什么 Firebase 版本 12.0.0 要求 PHONE_STATE 权限

Android 启动器无法启动(检查我的 XML)

android - 我应该从 build.gradle 还是 AndroidManifest.xml 管理应用版本控制?