默认的FirebaseApp没有初始化

我们在我们刚刚添加Firebase远程配置的Android应用程序中看到了一些例外消息Default FirebaseApp is not initialized in this process com.example.app. Make sure to call FirebaseApp.initializeApp(Context) first.

堆栈跟踪如下:

Fatal Exception: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.app. Make sure to call FirebaseApp.initializeApp(Context) first.
at com.google.firebase.FirebaseApp.getInstance(Unknown Source)
at com.google.firebase.remoteconfig.FirebaseRemoteConfig.getInstance(Unknown Source)
at com.example.app.fragments.SomeFragment.updateFooter(SourceFile:295)
at com.example.app.fragments.SomeFragment.onCreateView(SourceFile:205)
at android.support.v4.app.Fragment.performCreateView(SourceFile:2080)
at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1108)
at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1290)
at android.support.v4.app.BackStackRecord.run(SourceFile:801)
at android.support.v4.app.FragmentManagerImpl.execSingleAction(SourceFile:1638)
at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(SourceFile:679)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(SourceFile:143)
at android.support.v4.view.ViewPager.populate(SourceFile:1240)
at android.support.v4.view.ViewPager.populate(SourceFile:1088)
at android.support.v4.view.ViewPager.setAdapter(SourceFile:542)
at com.example.app.SomeActivity.onSomeAsyncCallback(SourceFile:908)
at com.example.app.SomeDataRetriever.onAsyncHttpCompleted(SourceFile:72)
at com.example.app.io.AsyncHttp.onPostExecute(SourceFile:141)
at com.example.app.io.AsyncHttp.onPostExecute(SourceFile:19)
at android.os.AsyncTask.finish(AsyncTask.java:679)
at android.os.AsyncTask.access$500(AsyncTask.java:180)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:696)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5665)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:689)

这是9.6.1版本,我们还使用了其他Firebase组件:

compile 'com.google.firebase:firebase-ads:9.6.1'
compile 'com.google.firebase:firebase-config:9.6.1'
compile 'com.google.firebase:firebase-invites:9.6.1'
compile "com.google.firebase:firebase-messaging:9.6.1"

正如我所看到的来自文档Javadoc,在我们的例子中,我们不应该做任何手动初始化。

这个异常发生在Android 4-6上的各种设备上。

编辑:

我发现这个问题引起了一些关注。我认为这个解释对你们中的一些人来说可能很有趣:https://firebase.googleblog.com/2016/12/how-does-firebase-initialize-on-android.html

329749 次浏览

确保添加到你的根级build.gradle

buildscript {
// ...
dependencies {
// ...
classpath 'com.google.gms:google-services:4.3.2'
}
}

然后,在你的模块级Gradle文件(通常是app/build.gradle)中,在文件底部添加'apply plugin'行来启用Gradle插件:

apply plugin: 'com.android.application'


android {
// ...
}


dependencies {
// ...
implementation 'com.google.firebase:firebase-core:9.6.1'
// Getting a "Could not find" error? Make sure you have
// the latest Google Repository in the Android SDK manager
}


// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'

文档所述。在上面的一个问题中,当我忘记在我的gradle文件中添加这个时,我有例外。

我前段时间也有同样的问题。

您正在尝试获得一个Firebase实例而不初始化它。 请在您的main函数或FutureBuilder中尝试获取Firebase实例之前添加这行代码:

FirebaseApp.initializeApp();

首先你需要添加com.google.gms:google-services:x.x。X在根级别build.gradle

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'com.google.gms:google-services:3.0.0'


// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}

之后,你需要应用plugin: 'com.google.gms。Google-services在app/build.gradle

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
compile 'com.android.support:cardview-v7:25.3.1'


compile 'com.google.android.gms:play-services-gcm:9.8.0'
compile 'com.google.android.gms:play-services-maps:9.8.0'
compile 'com.google.android.gms:play-services-location:9.8.0'
compile 'com.google.firebase:firebase-messaging:9.8.0'
testCompile 'junit:junit:4.12'
}




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

如果你仍然有问题,那么你需要补充

FirebaseApp.initializeApp(this);

就在你打电话之前

FirebaseInstanceId.getInstance().getToken();

虽然使用FirebaseApp.initializeApp(this);手动初始化Firebase使错误消失,但它并没有修复根本原因,一些奇怪的问题聚集在一起似乎没有解决,例如

  • FCM需要com.google.android.c2dm.permission.RECEIVE权限 仅适用于GCM
  • 令牌在发送第一个通知后变为未注册
  • message not received/ onmessagerreceived()从未被调用,

使用更新的Gradle插件(例如Android插件2.2.3和Gradle 2.14.1)修复了所有问题。(当然,根据重火力点文档设置必须正确)

我们必须在应用程序类的onCreate函数中初始化Firebase。

 package com.rocks.music.videoplayer;


import android.app.Application;
import android.content.Context;


import com.google.firebase.FirebaseApp;




/**
* Created by ashish123 on 22/8/15.
*/
public class MyApplication extends Application {


private static MyApplication mInstance;


@Override
public void onCreate() {
super.onCreate();
mInstance = this;
try {
FirebaseApp.initializeApp(this);
}
catch (Exception e) {
}
}


public static Context getInstance() {
return mInstance;
}

清单文件中的代码:-

  <application
android:name="com.rocks.music.videoplayer.MyApplication"
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

出现这种情况的原因之一可能是忘记在AndroidManifest.xml中添加android.permission.INTERNET权限

<uses-permission android:name="android.permission.INTERNET" />

你需要在构建。gradle(项目级)中添加Firebase Gradle buildscript依赖项

classpath 'com.google.gms:google-services:3.1.0'

并在app / build.gradle中为Gradle添加Firebase插件

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


build.gradle will include these new dependencies:
compile 'com.google.firebase:firebase-database:11.0.4'

来源:Android Studio Assistant

如果你根据样例在你的代码中使用FirebaseUIFirebaseApp.initializeApp(this);没有必要

确保添加到你的根级构建。gradle:

buildscript {


repositories {
google()
jcenter()
}
dependencies {
...
classpath 'com.google.gms:google-services:3.1.1'
...
}
}

然后,在你的模块级 Gradle文件中:

dependencies {


...


// 1 - Required to init Firebase automatically (THE MAGIC LINE)
implementation "com.google.firebase:firebase-core:11.6.2"


// 2 - FirebaseUI for Firebase Auth (Or whatever you need...)
implementation 'com.firebaseui:firebase-ui-auth:3.1.2'
...
}


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

就是这样。不需要更多了。

我在app / build.gradle文件中错过了下面的一行

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

和一次清洁项目并再次运行。这为我解决了问题。

这个手术并没有解决我的问题

FirebaseApp.initializeApp(this);

所以我尝试了其他的东西,现在我的火库已经成功初始化。尝试在app module.gradle中添加以下内容

BuildScript{
dependencies {..
classpath : "com.google.firebase:firebase-plugins:1.1.5"
..}
}


dependencies {...
implementation : "com.google.firebase:firebase-perf:16.1.0"
implementation : "com.google.firebase:firebase-core:16.0.3"
..}

似乎google-services:4.1.0有一个问题。要么降级为

classpath 'com.google.gms:google-services:4.0.0'

或将其升级为

classpath 'com.google.gms:google-services:4.2.0'

dependencies {
classpath 'com.android.tools.build:gradle:3.3.0-alpha08'
classpath 'com.google.gms:google-services:4.2.0'
/*classpath 'com.google.gms:google-services:4.1.0' <-- this was the problem */
}

希望能有所帮助

在我的例子中,谷歌Services gradle插件没有从google-services.json文件生成所需的values.xml文件。Firebase库使用这个生成的值文件来初始化自身,如果找不到值文件,它似乎不会抛出错误。检查values文件是否存在于以下位置,并使用来自google-sevices.json文件的适当字符串填充:

app/build/generated/res/google-services/{build_type}/values/values.xml

和/或

app/build/generated/res/google-services/{flavor}/{build_type}/xml/global_tracker.xml

更多细节见: https://developers.google.com/android/guides/google-services-plugin < / p >

我的特殊情况是由于使用gradle tools版本,对于我正在运行的Android Studio版本来说太高级了(即确保您运行grade tools v3.2)。X-YYY (Android Studio v3.2)。

另一个可能的解决方案——如果你正在使用一些测试版,尝试不同的Android Studio。帮助了我。新的Android Studio没有正确地添加Firebase。在我的情况下3.3预览

经过更多的调查,我发现问题是新的Android工作室启动项目与更新的谷歌服务版本,它看起来是原来的问题。正如@Ammar Bukhari所言,这一改变有所帮助:

classpath 'com.google.gms:google-services:4.1.0' -> 类路径的com.google.gms:谷歌服务:4.0.0 ' < / p >

单击“工具> Firebase”,打开“助手”窗口。

单击以展开列出的功能之一(例如,Analytics),然后单击提供的教程链接(例如,记录Analytics事件)。

单击“连接到Firebase”按钮以连接到Firebase并将必要的代码添加到应用程序中。

https://firebase.google.com/docs/android/setup

在更新了各种依赖关系后,我在编译中得到了一个Crashlytics错误,'Crashlytics发现了一个无效的API键:null。检查Crashlytics插件,以确保应用程序已成功添加!请联系support@fabric.io寻求帮助。”我在反复尝试support@fabric.io时得到的一个非自动回复是,Fabric和Crashlytics是两个独立的团队,所以他们不能帮助我。我避免了为Crashlytics实现额外的Fabric层,并且无法从Fabric站点获得新密钥,甚至无法让站点识别我。在试图通过从我的代码中删除Crashlytics来解决这个问题时,我得到了'默认FirebaseApp在这个过程中没有初始化com.example.app。确保在运行中首先调用FirebaseApp.initializeApp(Context)。

我从来没有添加'FirebaseApp.initializeApp(this)'的初始化行,事实上它被注释掉了。文档甚至提到,如果只在一个活动中使用Firebase,则不需要这样做。添加它没有什么不同,仍然得到了运行终止错误。

事实证明,导致这些新的模糊错误的原因是更新的google服务依赖关系。现在,我没有时间花更多的时间来修复新依赖项所导致的鸟枪错误,所以在有人提出解决方案之前,我将坚持使用旧版本。除了奇怪的初始化崩溃,新版本可能会迫使Crashlytics用户使用Fabric。用户也会被迫回到旧的依赖版本:Crashlytics发现一个无效的API键:null。更新后com.google.gms:google-services:4.1.0

//com.google.gms:google-services:4.1.0 BAD
com.google.gms:google-services:4.0.1//GOOD

EDIT 10/17/18:再次更新以下依赖项后

implementation 'com.google.firebase:firebase-ads:17.0.0'
implementation 'com.google.firebase:firebase-auth:16.0.4'
implementation 'com.google.firebase:firebase-database:16.0.3'
implementation 'com.google.firebase:firebase-core:16.0.4

我在尝试安装时立即崩溃,提示“xxx意外关闭”,就像我尝试谷歌服务依赖更新时一样。在日志中我发现了一个链接,指示我将其添加到清单中

<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxx~xxxxxx"/>

这是新的,在这里https://firebase.google.com/docs/android/setup和这里https://developers.google.com/admob/android/interstitial的设置和插页说明中没有提到。

我过去只需要为我的应用程序处理一个与广告相关的ID,即INTERSTITIAL_UNIT_ID。现在有两个问题需要解决。除了上述添加,文档指导在这里添加ADMOB_APP_ID(与ads.APPLICATION_ID在新清单代码中绑定的数字相同)

MobileAds.initialize(this, ADMOB_APP_ID);

INTERSTITIAL_UNIT_ID和ADMOB_APP_ID id可以在你的谷歌AdMob控制台中找到。我的游戏应用程序在我第一次更新firebase依赖时停止提供广告,仍然没有提供广告,在

public void onAdFailedToLoad(int errorCode){...

即使在所有这些增加的混乱之后,我仍然无法在没有初始化错误运行崩溃的情况下更新google-services依赖项。我希望在google服务:4.0.1上停留一段时间。

编辑10/24/18:mobileadssdk-advisor+support@google.com在更新后没有得到广告服务的几周通信后:

“谢谢你分享设备日志。从日志来看,这似乎是一个已经存在的问题,这是我们的优先事项,我们的团队正在努力修复,这只发生在Android O和P设备上。”

只有O和P设备?这是最后两个版本,O在2017年9月25日推出。呵。

更新8/8/21:在将google-services从4.3.8更新到4.3.9之后,我突然又遇到了将近3年前的这个问题,尽管确实调用了初始化(尽管据称不需要)。将再次不得不延迟更新实现:

//com.google.gms:google-services:4.3.9 BAD
com.google.gms:google-services:4.3.8//GOOD

正如@PSIXO在评论中提到的,这可能是google-services依赖版本的问题。为了我的改变,

buildscript {
// ...
dependencies {
// ...
classpath 'com.google.gms:google-services:4.1.0'
}
}

buildscript {
// ...
dependencies {
// ...
classpath 'com.google.gms:google-services:4.0.1'
}
}

工作。4.1.0版本可能有一些问题。因为我在这个问题上浪费了很多时间,所以我想把这个作为一个答案。


更新(2021年11月11日):


我们手动在任何地方执行不需要调用FirebaseApp.initializeApp(this);。我们也不应该这样做。

可能性1:

似乎com.google.gms:google-services:4.3.9有一个问题。

我们可以升级它到

classpath 'com.google.gms:google-services:4.3.10'

降级它到

classpath 'com.google.gms:google-services:4.3.8'

dependencies {
classpath 'com.android.tools.build:gradle:4.2.2'
classpath 'com.google.gms:google-services:4.3.9'// <-- this was the problem
}

可能性2:

确保在app / build.gradle文件中添加以下行

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

然后清洁项目并再次运行。这对我很管用。

可能性3:

我只是遇到了同样的问题,得到了一个意想不到的奇怪的解决方案。

这个答案:

我已经删除了tools:node="replace",它像魅力一样工作。

    classpath 'com.google.gms:google-services:4.1.0'

有个问题。而不是使用:

    classpath 'com.google.gms:google-services:4.2.0'
发生此情况的原因是com.google.gms:谷歌服务版本。当我使用4.1.0时,我遇到了同样的错误。然后我把版本降级。 在< / p >
classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.google.gms:google-services:4.1.0'

classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.google.gms:google-services:3.2.0'

希望它能解决这个错误。

我猜google-services和firebase版本之间存在兼容性问题。

我在项目的构建中进行了更改。Gradle文件,依赖项

类路径'com.google.gms:google-services:4.1.0'到4.2.0

然后更新模块的构建。Gradle依赖于:

实现“com.google.firebase: firebase-database: 16.0.6”

实现“com.google.firebase: firebase-core: 16.0.7”

一切都像一个魅力,不需要键入FirebaseApp.initializeApp(这个);

如果你最近将你的Android Studio更新到3.3.1,com.google。gms:google-services(低于4.2.0)依赖。Gms:google-services到4.2.0。

dependencies {
classpath 'com.android.tools.build:gradle:3.3.1'
classpath 'com.google.gms:google-services:4.2.0'
}

通过Android Studio Tools安装Firebase…

我通过Android Studio的内置工具进行安装(遵循Firebase的最新文档)。 这安装了基本的依赖项,但当我试图连接到数据库时,它总是给我一个错误,我需要首先调用初始化,即使我是:

默认的FirebaseApp在此进程中没有初始化。一定要 首先调用FirebaseApp.initializeApp(Context)

无论我做什么,都会得到这个错误。

最后,在看到其他答案中的一个评论后,我把我的gradle从4.1.0版本更改为:

classpath 'com.google.gms:google-services:4.0.1'

当我这样做的时候,我终于看到了一个帮助我的错误:

< p >文件谷歌服务。Json缺失。谷歌服务插件 没有它就不能正常工作。搜索地点: C:\Users\ %用户名% \ AndroidStudioProjects \ TxtFwd \ app \ src \ nullnull \调试\ google-services.json
C:\Users\ %用户名% \ AndroidStudioProjects \ TxtFwd \ app \ src \调试\ nullnull \ google-services.json
C:\Users\ %用户名% \ AndroidStudioProjects \ TxtFwd \ app \ src \ nullnull \ google-services.json
C:\Users\ %用户名% \ AndroidStudioProjects \ TxtFwd \ app \ src \调试\ google-services.json
C:\Users\ %用户名% \ AndroidStudioProjects \ TxtFwd \ app \ src \ nullnullDebug \ google-services.json
C:\Users\ %用户名% \ AndroidStudioProjects \ TxtFwd \ app \ google-services.json
< / p >

这就是问题所在。由于某些原因,4.1.0版本似乎没有给出这个构建错误——没有提到你有一个丢失的google服务。json文件。我没有谷歌的服务。json文件,所以我出去添加了它。

但由于这是一个升级,使用现有的实时first base数据库,我从来没有在过去生成该文件。 我去了firebase,生成并添加了它,它解决了问题

更改回4.1.0

一旦我发现了所有这些,然后我把类路径变量改回来(到4.1.0),重新构建,它再次崩溃,错误是它没有被初始化。

根源问题

  • 在预编译时,使用4.1.0构建不会为您提供有效的错误,因此您可能不知道发生了什么。
  • 在4.1.0上运行会导致初始化错误。

对我来说,这是升级com.google的依赖关系。Gms:构建内部的google服务。gradle将

buildscript {
repositories {
jcenter()
mavenCentral()
maven {
url 'https://maven.google.com/'
name 'Google'
}
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
classpath 'com.google.gms:google-services:4.2.0'


// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}

使用com.google.gms:google-services:4.0.1'而不是4.1.0

改变

classpath 'com.google.gms:google-services:4.1.0'

classpath 'com.google.gms:google-services:4.0.1'

对我有用

通过遵循@Gabriel Lidenor的回答,在我的情况下,初始化应用程序与上下文不工作。如果您试图创建没有google-service的firebase-app。json吗?所以在初始化任何数量的firebase应用程序之前,首先需要初始化为;

FirebaseOptions options = new FirebaseOptions.Builder().setApplicationId("APP_ID")
.setGcmSenderId("SENDER_ID").build();
FirebaseApp.initializeApp(context, options, "[DEFAULT]");

如果你正在使用Xamarin,并来到这里寻找这个问题的解决方案,这是微软的:

在某些情况下,您可能会看到以下错误消息: Java.Lang.IllegalStateException:默认FirebaseApp不是 在这个过程中初始化,确保调用 FirebaseApp.initializeApp(上下文)。< / p >

这是一个已知的问题,您可以通过清理 项目的解决和重建(Build >清洁解决方案,构建> 重建方案)。< / p >

我把项目gms:google_services降级为 类路径的com.google.gms:谷歌服务:4.0.1

在我的情况下,这个错误发生在我升级我的谷歌gms类路径时。 是< / p >

classpath 'com.google.gms:google-services:4.3.9'

所以我不得不降级为:

classpath 'com.google.gms:google-services:4.3.8'

它运行得很好。

在我的情况下,我在构建gradle(应用程序)中停用了服务,如下所示:

android.applicationVariants.all { variant ->
def googleTask = tasks.findByName("process${variant.name.capitalize()}GoogleServices")
googleTask.enabled = "mock" != variant.flavorName
}

由于此变体仅用于测试和模拟服务,因此被停用。在近两年的时间里,这并没有给我带来任何问题。当我在gradle文件中注意到它的时候,那是一个有点捂脸的时刻……

如果你也这样做,简单地删除它。

对我来说,问题是我没有在app/build中添加这一行。gradle文件。

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

我解决的问题: 应用插件:'com.google.gms。谷歌服务正在建设中。Gradle文件并移动文件google-service。

. Json

为最新的android工作室和sdk

——比;将这一行添加到构建:gradle(应用):插件{}

id 'com.google.gms.google-services'