Не удалось получить поставщика com.google.firebase.provider.FirebaseInitProvider

160

Я тестирую новый инструмент 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's 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's 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
Macarse
источник
1
У вас есть идентификатор приложения в вашем build.gradle?
Ян Барбер
1
@IanBarber: Ого, во время редактирования build.gradle я удалил его. Виноват.
Macarse
у меня работал только stackoverflow.com/a/38224316/4663544
Джеба Ра
8
Попробуйте Android studio> Build>Clean Project
Ujjwal Сингх
Я исправил это, заставив мой класс приложения расширять MultiDexApplication, когда multiDexEnabled имеет значение true в градиенте приложения defaultConfig.
Герман

Ответы:

145

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" >
    ...
norbDEV
источник
1
Я получил ту же ошибку, и это было исправлено решением. Я не знаю почему, но это работает.
FUJI Goro
Это спасло день для меня. Получил ошибку, когда я пытался запустить приложение Cordova на устройстве Android.
Маносим
1
У меня та же проблема и идентификатор приложения на моем build.gradle. Что я могу сделать в этом случае?
Мария Мерседес Висс Альварес
@ekonstantinidis Как вы исправили это для своего приложения Cordova? Может ли он быть добавлен в конфигурацию где-то, что правильно добавляет его при создании build.gradle? (Во время cordova platform add android)?
Зак
@ Зак, я так не думаю. Я добавил его после того, как побежал cordova platform add android. Я думаю, это будет исправлено, как только Кордова получит обновление? Ps. Я вообще не использую Firebase.
Маносим
93

У меня была такая же проблема в устройствах с 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'

    }
...
luizMello
источник
4
Это работает, но есть специальный класс, который делает это вместо переопределения одной функции, и она называется MultiDexApplication, см. Ответ ниже stackoverflow.com/questions/37312103/…
GregoryK
Да, у меня это тоже сработало, я всегда пишу MultiDex.install (this) внутри метода onCreate (), спасибо, чувак
Дара,
в моем случае я только что обновил компиляцию 'com.android.support:multidex:1.0.1' до последней доступной версии
Алексей Тимощенко
Это должен быть принятый ответ. Я попробовал все остальные ответы и следовал инструкциям Google и Firebase, но это правильный ответ, ты потрясающий человек!
blueware
Спасибо, как ты это нашел? но мой вопрос - мое приложение строк кода не выше 65000, почему я должен использовать его multudex и почему я работаю над sdk> 22, а оно не работает над sdk <22
milad salimi
75

Принятый ответ не решил мою проблему.

Если вы используете 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"
      ...
      />

Надеюсь, поможет.

Ye Min Htut
источник
Работал отлично! Большое спасибо :)
Solution Spirit
3
Откуда ты знаешь эти вещи ?? Кто сказал тебе??? У меня только появилась эта проблема после обновления до Android Studio 3 и установки «отладочных» приложений. Версия "Release" работала хорошо. Теперь с вашим решением также работает версия «Отладка». Я так счастлив, что такие люди, как ты, существуют!
Тон
Это идеальный ответ
androidXP
Во всех этих ответах ни один из них не объясняет, что на самом деле добавление мультидекса делает для решения проблемы (что вызывает удивление случайность перед лицом такой проблемы)
Адитья Ананд,
36

Если у вас возникла та же проблема, но у вас уже есть applicationIdнабор build.gradle, вы также можете попробовать следующее:

  • в Android Studio: Build>Clean Project
  • в других средах: очистить, восстановить, что угодно ...
Barthy
источник
3
И если у вас все еще есть проблемы, удалите каталог сборки и попробуйте снова. Я застрял, пока я не сделал это :)
Лоуренс Морони
У buildменя работал только удаление каталога. Похоже, это было испорчено моим последним изъятием из репо.
Севастян Саванюк,
17

У меня была такая же проблема в устройствах Pre Lollipop. Чтобы решить это я сделал следующим образом. Тем временем я использовал multiDex в проекте.

1. добавить это для build.gradle в модуль: app

multiDexEnabled = true

dexOptions {
    javaMaxHeapSize "4g"
}

2. добавить эту зависимость

compile 'com.android.support:multidex:1.0.1'

3. Затем в главном приложении

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"

Это работает для меня. Надеюсь, это поможет вам тоже :)

Thilina Kj
источник
4
Вам не следует выполнять все три задания (расширять MultiDexApplication, реализовывать attacheBaseContext и изменять файл манифеста), чтобы включить multidex, достаточно только одного: D. developer.android.com/studio/build/multidex.html
Хоссейн Шахдуст
Если ваш minSdk 21 или выше, вам не нужно ничего делать, поскольку в документах сказано, что он уже включен по умолчанию. И все же, эта проблема подходит для меня с minSdk = 21, какие-нибудь решения для этого?
Адитья Ананд
15

ты должен быть уверен

добавить эту строку в свой манифест

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>
Хуан Саламанка
источник
У меня тоже работал вместе с multiDexEnabled true
ashishdhiman2007
7

Не включайте всю библиотеку сервисов воспроизведения, а используйте ту, которая вам нужна. Замените строку в вашем build.gradle :

compile 'com.google.android.gms:play-services:9.6.1'

с соответствующим из API Google Play Services , например:

compile 'com.google.android.gms:play-services-gcm:9.6.1'
Аян
источник
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>
Нурлан Софиев
источник
3

Это должно работать:

Шаг 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>
Soumen Das
источник
2

В моем случае проблема была решена добавлением этой строки в модуль build.gradle:

// ДОБАВЛЯЕМ ЭТО ВНУТРИ

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

Источник

Борха
источник
Я получил "Плагин с идентификатором com.google.gms.play-services" не найден ".
kaleemsagard
@kaleemsagard поместил это в свой проектbuild.gradle dependencies { classpath 'com.google.gms:google-services:3.0.0' }
Борха,
1

В моем случае проблема возникла после перехода на 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. Это сработало.

CGR
источник
0

Вместо того, чтобы вручную добавлять имя пакета в 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)
}

Поскольку есть много комментариев Cordova к ответу, если вы работаете с Cordova, вам не следует редактировать build.gradleсами, в начале есть комментарий, который говорит:

// Генерируемый файл! НЕ РЕДАКТИРОВАТЬ!

Так что, если вы используете Cordova, лучшее, что вы можете сделать, это обновить ее до cordova-android 5.1.0 или выше, где эти изменения уже присутствуют.

jcesarmobile
источник
0

Мой был, потому что Firebase SDK в файле Gradle был установлен с неверной версией номера.

Я удалил дабы Firebase из Gradle и заново установил их, используя Firebase Assistant

Suhaib
источник
0

Зайдите в настройки Android Studio (нажав Ctrl+Alt+Sв Windows), найдите Instant Runи снимите флажок Enable Instant Run.

Если Instant Runснова отключить и запустить приложение, проблема будет решена.

VSB
источник
0

Для приложения «Нативная реакция» ошибка была 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;

Malith
источник
0

Я добавил следующий код в файл proguard.

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application

и это сработало в моем случае.

Ананта Прасад
источник
0

в моем случае я забываю добавить (или удалить случайно) ядро ​​Firebase в сборке Gradle

implementation 'com.google.firebase:firebase-core:xx.x.x'
Alexa289
источник
1
Прошло 3 месяца, и это устарело: НЕ ДОБАВЛЯЙТЕ ЭТОГО! Source = firebase.google.com/support/release-notes/android (Обязательно: спасибо Google)
Адитья Ананд
0

Я получил эту ошибку только на устройствах с API ниже 21. В моем случае мне приходилось работать с проектом, в котором multiDexEnabledопция in build.gradleуже была установлена true. Я проверил DEX файл из APK и ссылки число методов было меньше 64к, поэтому проект не должен быть multidex один, поэтому я поставил multiDexEnabledв false. Это решение сработало для меня.

CristianBanan
источник