Не удалось получить поставщика 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

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" >
    ...

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'

    }
...

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"
      ...
      />

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


Работал отлично! Большое спасибо :)
— Solution Spirit

3
Откуда ты знаешь эти вещи ?? Кто сказал тебе??? У меня только появилась эта проблема после обновления до Android Studio 3 и установки «отладочных» приложений. Версия "Release" работала хорошо. Теперь с вашим решением также работает версия «Отладка». Я так счастлив, что такие люди, как ты, существуют!
— Тон

Это идеальный ответ
— androidXP

Во всех этих ответах ни один из них не объясняет, что на самом деле добавление мультидекса делает для решения проблемы (что вызывает удивление случайность перед лицом такой проблемы)
— Адитья Ананд,

36

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

  • в Android Studio: Build>Clean Project
  • в других средах: очистить, восстановить, что угодно ...

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"

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


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>

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. Это сработало.


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 или выше, где эти изменения уже присутствуют.


0

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

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


0

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

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


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;




0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.