Ответ 1
У меня была эта же проблема некоторое время назад.
Вы пытаетесь получить экземпляр Firebase без его инициализации. Пожалуйста, добавьте эту строку кода, прежде чем пытаться получить экземпляр Firebase:
FirebaseApp.initializeApp(this);
Мы видим несколько исключений с сообщением Default FirebaseApp is not initialized in this process com.example.app. Make sure to call FirebaseApp.initializeApp(Context) first.
в нашем приложении для Android, в котором мы просто добавили Firebase Remote Config.
Трассировка стека выглядит следующим образом:
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 на различных устройствах.
Edit:
Я вижу, что этот вопрос получает немного внимания. Я думаю, что это объяснение может быть интересно для некоторых из вас: https://firebase.googleblog.com/2016/12/how-does-firebase-initialize-on-android.html
У меня была эта же проблема некоторое время назад.
Вы пытаетесь получить экземпляр Firebase без его инициализации. Пожалуйста, добавьте эту строку кода, прежде чем пытаться получить экземпляр Firebase:
FirebaseApp.initializeApp(this);
Обязательно добавьте в свой корневой уровень build.gradle
buildscript {
// ...
dependencies {
// ...
classpath 'com.google.gms:google-services:3.0.0'
}
}
Затем на вашем уровне модуля Gradle (обычно это приложение /build.gradle) добавьте строку "применить плагин" в нижней части файла, чтобы включить плагин Gradle:
apply plugin: 'com.android.application'
android {
// ...
}
dependencies {
// ...
compile '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.
Похоже, у 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 */
}
Надеюсь, поможет
Мне не хватало следующую строку в файле app/build.gradle
apply plugin: 'com.google.gms.google-services'
и как только чистый проект и снова запустите. Это исправило это для меня.
classpath 'com.google.gms:google-services:4.1.0'
есть проблема. вместо этого используйте:
classpath 'com.google.gms:google-services:4.2.0'
Прежде всего вам нужно добавить com.google.gms: google-services: x.x.x на уровне root 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
}
}
После этого вам необходимо применить плагин: "com.google.gms.google-services" в приложении /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();
После обновления различных зависимостей я получил ошибку Crashlytics во время компиляции: "Crashlytics обнаружил недопустимый ключ API: null. Проверьте плагин Crashlytics, чтобы убедиться, что приложение было успешно добавлено! Свяжитесь с [email protected] для получения помощи. ' Единственный неавтоматический ответ, который я получил от неоднократных попыток [email protected], на которые вас направляет ошибка, заключался в том, что Fabric и Crashlytics - это отдельные команды, поэтому они не могли мне помочь. Я избегал внедрения дополнительного слоя Fabric в Crashlytics и не смог получить новый ключ с сайта Fabric или даже заставить сайт узнать меня. Пытаясь обойти это, просто удалив Crashlytics из моего кода, я получил "По умолчанию FirebaseApp не инициализируется в этом процессе com.example.app. Обязательно вызовите FirebaseApp.initializeApp(Context) первым 'сбой во время выполнения.
Мне никогда не приходилось добавлять строку инициализации 'FirebaseApp.initializeApp(this)', и фактически она была закомментирована. В документации даже упоминается, что это не нужно, если только использовать Firebase для одного действия. Добавление не имело никакого значения, все еще получил ошибку запуска убийства.
Оказывается, что причиной новых неясных ошибок была обновленная зависимость google-services. На данный момент у меня нет времени проводить больше дней, пытаясь исправить ошибки ружья, вызванные новой зависимостью, поэтому, пока кто-то не найдет решения, я буду придерживаться старой версии. Помимо странного сбоя при инициализации, новая версия может принуждать пользователей Fabric к Crashlytics. Для этого пользователи также вынуждены возвращаться к старой версии зависимости: 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
РЕДАКТИРОВАТЬ 17/10/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 неожиданно закрылся", как, например, когда я пытался обновить зависимость google-services. Покопавшись в журнале, я нашел ссылку, указывающую мне добавить это в манифест
<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.
Раньше мне приходилось иметь дело только с одним идентификатором, связанным с рекламой, для моего приложения, INTERSTITIAL_UNIT_ID. Теперь нужно разобраться с двумя. Помимо вышеприведенного добавления, документация предписывает добавить здесь ADMOB_APP_ID (тот же номер, который вы связываете с ads.APPLICATION_ID в новом коде манифеста)
MobileAds.initialize(this, ADMOB_APP_ID);
Идентификаторы INTERSTITIAL_UNIT_ID и ADMOB_APP_ID можно найти в консоли Google AdMob. Мое игровое приложение перестало показывать рекламу при моем первом обновлении зависимостей Firebase и до сих пор не показывает рекламу, выдав код ошибки 0 в
public void onAdFailedToLoad(int errorCode){...
Даже после всего этого добавленного беспорядка я все еще не могу обновить зависимость google-services без сбоя запуска инициализированной ошибки. Я ожидаю, что застряну в google-services: 4.0.1 на некоторое время.
РЕДАКТИРОВАТЬ 24/24/18: из [email protected] после нескольких недель переписки о том, что реклама не показывается после обновлений:
"Спасибо за обмен журналами устройства. Из журналов это выглядит как существующая проблема, и она находится в нашем списке приоритетов, и наша команда работает над исправлением, и это происходит только на устройствах Android O и P ".
Только устройства O и P? Именно последние две версии O вышли 25 сентября 2017 года.
Как уже упоминалось в комментарии @PSIXO, это может быть проблема с версией google-сервисов зависимостей. Для меня изменение,
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. Поскольку я потратил много времени на это, я решил написать это как ответ.
Если вы используете FirebaseUI, нет необходимости в FirebaseApp.initializeApp(this);
в вашем коде согласно образцу.
Не забудьте добавить к корневому уровню build.gradle:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
...
classpath 'com.google.gms:google-services:3.1.1'
...
}
}
Затем на вашем уровне модуля Gradle file:
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'
Это. Больше не нужно.
Другое возможное решение - попробуйте использовать другую Android-студию, если вы используете некоторые бета-версии. Помог мне. Новая Android-студия просто не добавила Firebase должным образом. В моем случае 3.3preview
После еще нескольких исследований я обнаружил, что проблема заключается в том, что новая студия Android начинает проект с новой версией Google Services, и похоже, что это была оригинальная проблема. Как сказал @Ammar Bukhari, это изменение помогло:
classpath 'com.google.gms: google-services: 4.1.0' → classpath 'com.google.gms: google-services: 4.0.0'
Я предполагаю, что есть проблемы совместимости с версией google-сервисов и версий firebase.
Я изменил в файле Project build.gradle, зависимость
classpath 'com.google.gms: google-services: 4.1.0' до 4.2.0
а затем обновил зависимости модуля build.gradle:
реализация 'com.google.firebase: база данных firebase: 16.0.6'
реализация "com.google.firebase: firebase-core: 16.0.7"
Все работает как шарм, нет необходимости вводить FirebaseApp.initializeApp (это);
Вам нужно добавить зависимость Firebase Gradle buildscript в build.gradle(уровень проекта)
classpath 'com.google.gms:google-services:3.1.0'
и добавьте плагин Firebase для Gradle в app/build.gradle
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
В моем случае плагин Google для плагинов не генерировал требуемый файл values.xml
из файла google-services.json
. Библиотека Firebase использует этот файл сгенерированных значений для инициализации, и кажется, что он не выдает ошибку, если файл значений не найден. Убедитесь, что файл значений существует в следующем местоположении и заполняется соответствующими строками из файла 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.
Мой конкретный случай был вызван использованием версии инструментов gradle, которая была слишком продвинута для версии Android Studio, которую я запускал (т.е. убедитесь, что вы запускаете инструменты класса v3.2.X-YYY с Android Studio v3.2).
Если вы недавно обновили Android Studio до версии 3.3.1, в которой есть проблема с зависимостями com.google.gms: google-services (ниже 4.2.0), обновите com.google.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'
}
Нам не нужно вызывать FirebaseApp.initializeApp(this);
где угодно вручную. и мы не должны тоже.
Я просто столкнулся с той же проблемой и получил неожиданное и странное решение.
Я удалил tools:node="replace"
и он работает как шарм.
Причиной этого является com.google.gms: версия google-services. Когда я использовал 4.1.0, я столкнулся с той же ошибкой. Тогда я понижаю версию. До
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'
Надеюсь, это решит ошибку.
для меня это было обновление зависимостей com.google.gms: google-services внутри build.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
}
Хотя вручную инициализировать Firebase с помощью FirebaseApp.initializeApp(this);
, ошибка исчезает, она не устраняет основную причину, некоторые нечетные проблемы собираются вместе, кажется, не решены, например
com.google.android.c2dm.permission.RECEIVE
, которое
только для GCMИспользовать новый плагин Gradle (например, Android-плагин 2.2.3 и Gradle 2.14.1) исправил все. (Конечно, настройка должна быть правильной согласно Документация Firebase)
Нам нужно будет инициализировать Firebase в функции onCreate класса Application.
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">
Одной из причин этого может быть забвение добавления разрешений android.permission.INTERNET
в AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
Моя проблема не была решена с помощью этой процедуры
FirebaseApp.initializeApp(this);
Поэтому я попробовал что-то еще, и теперь моя firebase была успешно инициализирована. Попробуйте добавить следующее в 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"
..}
Нажмите "Сервис"> "Firebase", чтобы открыть окно "Помощник".
Нажмите, чтобы развернуть одну из перечисленных функций (например, Google Analytics), затем нажмите на предоставленную ссылку на учебное пособие (например, Log an Analytics event).
Нажмите кнопку "Подключиться к Firebase", чтобы подключиться к Firebase и добавить в свой код необходимый код.
Установленная Firebase через Android Studio Tools... Firebase...
Я сделал установку с помощью встроенных инструментов из Android Studio (следуя последним документам от Firebase). Это установило основные зависимости, но когда я пытался подключиться к базе данных, это всегда давало мне ошибку, которую мне нужно было сначала вызвать инициализировать, хотя я и был:
FirebaseApp по умолчанию не инициализируется в этом процессе. Не забудьте сначала вызвать FirebaseApp.initializeApp(Context).
Я получал эту ошибку независимо от того, что я сделал.
Наконец, увидев комментарий в одном из других ответов, я изменил следующее в своем Gradle с версии 4.1.0 на:
classpath 'com.google.gms:google-services:4.0.1'
Когда я сделал это, я наконец увидел ошибку, которая помогла мне:
Файл google-services.json отсутствует. Плагин Google Services не может функционировать без него. Место поиска: C:\Users\%username%\AndroidStudioProjects\TxtFwd\app\src\nullnull\debug\google-services.json
C:\Users\%имя пользователя%\AndroidStudioProjects\TxtFwd\приложение\SRC\Debug\nullnull\Google-services.json
C:\Users\%имя пользователя%\AndroidStudioProjects\TxtFwd\приложение\SRC\nullnull\Google-services.json
C:\Users\%имя пользователя%\AndroidStudioProjects\TxtFwd\приложение\SRC\Debug\Google-services.json
C:\Users\%имя пользователя%\AndroidStudioProjects\TxtFwd\приложение\SRC\nullnullDebug\Google-services.json
C:\Users\%имя пользователя%\AndroidStudioProjects\TxtFwd\приложение\Google-services.json
Это проблема. Кажется, что версия 4.1.0 по какой-то причине не дает этой ошибки сборки - не говоря уже о том, что у вас отсутствует файл google-services.json. В моем приложении нет файла google-services.json, поэтому я вышел и добавил его.
Но так как это было обновление, которое использовало существующую базу данных firsbase в реальном времени, мне никогда не приходилось создавать этот файл в прошлом. Я пошел в firebase, сгенерировал и добавил, и это решило проблему.
Вернулся на 4.1.0
Как только я обнаружил все это, я изменил переменную classpath обратно (на 4.1.0) и перестроил, и она снова вылетела с ошибкой, что она не была инициализирована.
Коренные проблемы
используйте 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'
Работает для меня
Причина и решение: это распространенная ошибка, которую вы получите в большинстве случаев. Причина: когда вы интегрируете свой проект с Firebase, он добавляет зависимости
implementation 'com.google.firebase:firebase-auth:16.1.0'
implementation 'com.google.android.gms:play-services-auth:16.0.1'
и classpath
classpath 'com.google.gms:google-services:4.1.0'
вам просто нужно обновить их
Вот как вы можете обновить
обновить версию
classpath 'com.google.gms:google-services:4.2.0'