Подтвердить что ты не робот

Не удалось получить провайдер 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
4b9b3361

Ответ 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