Не удалось получить провайдер com.google.firebase.provider.FirebaseInitProvider
Я тестирую новый инструмент Crash:
https://firebase.google.com/docs/crash/
После выполнения шагов приложение запускается, и он выдает сообщение:
05-18 17:28:18.870 28743 28743 E AndroidRuntime: java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.IllegalStateException: Incorrect provider authority in manifest. Most likely due to a missing applicationId variable in application build.gradle.
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at android.app.ActivityThread.installProvider(ActivityThread.java:5156)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at android.app.ActivityThread.installContentProviders(ActivityThread.java:4748)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at android.app.ActivityThread.-wrap1(ActivityThread.java)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: Caused by: java.lang.IllegalStateException: Incorrect provider authority in manifest. Most likely due to a missing applicationId variable in application build.gradle.
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at com.google.firebase.provider.FirebaseInitProvider.zza(Unknown Source)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: at android.app.ActivityThread.installProvider(ActivityThread.java:5153)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: ... 10 more
Ответы
Ответ 1
1.
Добавьте applicationId в приложение build.gradle:
android {
...
defaultConfig {
applicationId "com.example.my.app"
...
}
}
И чем Чистый Проект → Построить или Перестроить Проект
2. Если ваш minSdkVersion <= 20 (https://developer.android.com/studio/build/multidex)
Используйте Multidex правильно.
приложение build.gradle
android {
...
defaultConfig {
....
multiDexEnabled true
}
...
}
dependencies {
implementation 'com.android.support:multidex:1.0.3'
...
}
manifest.xml
<application
...
android:name="android.support.multidex.MultiDexApplication" >
...
3.
Если вы используете пользовательский класс приложения
public class MyApplication extends MultiDexApplication {
@Override
protected void attachBaseContext(Context context) {
super.attachBaseContext(context);
MultiDex.install(this);
}
}
manifest.xml
<application
...
android:name="com.example.my.app.MyApplication" >
...
Ответ 2
Я был с той же проблемой в устройствах с SDK < 22, но для меня причиной является MultiDex, MultiDex.install
должен быть в методе attachBaseContext
.
Если вы используете MultiDex, попробуйте следующее:
public class YourApplication extends Application {
@Override
protected void attachBaseContext(Context context) {
super.attachBaseContext(context);
MultiDex.install(this);
}
@Override
public void onCreate() {
super.onCreate();
Realm.init(this); //initialize other plugins
}
}
Приложение/build.gradle:
android {
compileSdkVersion 24
buildToolsVersion "24.0.2"
defaultConfig {
applicationId "com.test.app"
minSdkVersion 16
targetSdkVersion 24
versionCode 1
versionName "1.0"
multiDexEnabled true
}
dexOptions {
javaMaxHeapSize "4g"
}
....
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:24.2.1'
...
compile 'com.google.firebase:firebase-messaging:9.6.1'
compile 'com.google.android.gms:play-services:9.6.1'
compile 'com.android.support:multidex:1.0.1'
}
...
Ответ 3
Принятый ответ не решил мою проблему.
Если вы используете Multidex, ваше Приложение должно MultiDexApplication
вместо Application
.
MyApplication.java
public class MyApplication extends MultiDexApplication{
...
}
AndroidManifest.xml
<application
android:name="your.package.name.MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
...
/>
Надеюсь, поможет.
Ответ 4
Если вы получаете ту же проблему, но уже имеете параметр applicationId
в build.gradle
, вы также можете попробовать следующее:
- в Android Studio:
Build
> Clean Project
- в других IDE: очистить, перестроить, что угодно...
Ответ 5
У меня была такая же проблема в устройствах Pre Lollipop. Чтобы решить это, я сделал следующее. Тем временем я использовал multiDex в проекте.
1. добавьте это для build.gradle в модуле: app
multiDexEnabled = true
dexOptions {
javaMaxHeapSize "4g"
}
2. добавьте эту зависимость
compile 'com.android.support:multidex:1.0.1'
3. Затем в MainApplication
public class MainApplication extends MultiDexApplication {
private static MainApplication mainApplication;
@Override
public void onCreate() {
super.onCreate();
mainApplication = this;
}
@Override
protected void attachBaseContext(Context context) {
super.attachBaseContext(context);
MultiDex.install(this);
}
public static synchronized MainApplication getInstance() {
return mainApplication;
}
}
4. В файле манифеста
<application
android:allowBackup="true"
android:name="android.support.multidex.MultiDexApplication"
Это работает для меня. Надеюсь, это тоже поможет:)
Ответ 6
вы должны быть уверены
чтобы добавить эту строку в ваш манифест
https://developer.android.com/studio/run/index.html#instant-run
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
Ответ 7
Добавьте это на свой модуль build.gradle:
android {
defaultConfig {
....
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
.........
}
Если вы переопределите класс Application
, то продолжите его из MultiDexApplication
:
YourApplicationClass extends MultiDexApplication
Если вы не можете расширить его из класса MultiDexApplication
, то переопределите метод attachBaseContext()
следующим образом:
protected void attachBaseContext(Context base) {
super.attachBaseContext(context);
Multidex.install(this);
}
И ничего не запускать до выполнения MultiDex.install(this)
.
Если вы не переопределите класс Application
, просто отредактируйте файл манифеста следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
.......>
<application
......
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
......
</manifest>
Ответ 8
Не включайте всю библиотеку игровых сервисов, но используйте ту, которая вам нужна. Замените строку в build.gradle:
compile 'com.google.android.gms:play-services:9.6.1'
с соответствующим из API-интерфейсов Google Play, например, например:
compile 'com.google.android.gms:play-services-gcm:9.6.1'
Ответ 9
Это должно работать:
Шаг 1:
defaultConfig {
applicationId "service.ingreens.com.gpsautoon"
minSdkVersion 17
targetSdkVersion 25
versionCode 1
versionName "1.0"
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
Шаг 2:
compile 'com.android.support:multidex:1.0.1'
Шаг 3: Возьмите другой класс
public class MyApplication extends MultiDexApplication {
}
Шаг 4: Добавьте эту строку в манифест
<application
android:name="android.support.multidex.MultiDexApplication">
</application>
Ответ 10
В моем случае проблема была решена путем добавления этой строки в модуль build.gradle:
//ДОБАВИТЬ ЭТО НА НОМЕРЕ
apply plugin: 'com.google.gms.google-services'
Источник
Ответ 11
Внесите необходимые изменения
В build (app)::
defaultConfig {
multiDexEnabled true
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
В манифесте::
<application
android:name=".BaseApplication"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
В BaseApplication::
public class BaseApplication extends Application{
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Ответ 12
В моем случае проблема произошла после того, как мы перешли на AndroidX. По какой-то причине приложение вызывало MultiDex.install() с отражением:
final Class<?> clazz = Class.forName("android.support.multidex.MultiDex");
final Method method = clazz.getDeclaredMethod("install", Context.class);
method.invoke(null, this);
Я изменил пакет с android.support.multidex.MultiDex
на androidx.multidex.MultiDex
. Это сработало.
Ответ 13
Вместо того, чтобы вручную добавлять имя пакета в build.gradle
, вы можете сделать это следующим образом:
сначала добавьте эту строку в начало
import java.util.regex.Pattern
Затем добавьте это на defaultConfig
android {
...
defaultConfig {
...
applicationId = doExtractStringFromManifest("package")
...
}
...
}
И, наконец, добавьте метод doExtractStringFromManifest
def doExtractStringFromManifest(name) {
def manifestFile = file(android.sourceSets.main.manifest.srcFile)
def pattern = Pattern.compile(name + "=\"(\\S+)\"")
def matcher = pattern.matcher(manifestFile.getText())
matcher.find()
return matcher.group(1)
}
Как есть много комментариев Кордовы о ответе, если вы работаете с Кордовой, вы не должны действительно редактировать build.gradle
самостоятельно, у него есть комментарий в начале, говорящий
//ПОЛУЧЕННЫЙ ФАЙЛ! Не редактируйте!
Итак, если вы используете Кордову, самое лучшее, что вы можете сделать, это обновить до кордовы-андроида 5.1.0 или выше, где эти изменения уже присутствуют.
Ответ 14
Шахта была потому, что Firebase SDK в файле Gradle был установлен на неверную версию номера.
Я удалил дебаты Firebase из Gradle и снова установил их с помощью Firebase Assistant
Ответ 15
Перейдите к настройке Android Studio (нажав Ctrl+Alt+S
в Windows), найдите Instant Run
и снимите флажок Enable Instant Run
.
Если вы отключите Instant Run
и снова запустите ваше приложение, проблема будет решена.
Ответ 16
Для собственного приложения " java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider"
ошибка была java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider"
Это было только для устройств с версией Android <~ 4.4
Решил это, просто заменив Application
в MainApplication.java
на MultiDexApplication
ПРИМЕЧАНИЕ: import android.support.multidex.MultiDexApplication;
Ответ 17
Я добавил следующий код в файл proguard.
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application