Не вдається отримати провайдера 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
У вас є applicationID у своєму build.gradle?
Іван Барбер

1
@IanBarber: Ого, під час редагування build.gradle я його видалив. Моє ліжко.
Макарс

тільки stackoverflow.com/a/38224316/4663544 працював для мене
Jeba Ra

8
Спробуйте Android studio> Build>Clean Project
Ujjwal Сінгх

Я виправив це, змусивши мій клас додатків розширити MultiDexApplication, коли multiDexEnabled вірно в програмі GradCd 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

Це врятувало мені день. Помилка отримала, коли я намагався запустити додаток Кордова на Android-пристрій.
manosim

1
У мене така ж проблема і у застосуванні idId мого build.gradle. Що я можу зробити в такому випадку?
Марія Мерседес Вісс Альварес

@ekonstantinidis Як ви виправили це для своєї програми cordova? Чи можна його додати до конфігурації десь, що правильно додає його при створенні build.gradle? (Під час cordova platform add android)?
Зак

@Zach Я так не думаю. Я додав його після того, як я побіг cordova platform add android. Я думаю, це буде виправлено, коли cordova отримує оновлення? Пс. Я взагалі не використовую Firebase.
manosim

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 

    }
}

app / 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 (це) всередині методу onCreate () завдяки чувак
Дара

у моєму випадку я щойно оновив компіляцію 'com.android.support:multidex:1.0.1' до останньої доступної версії
Олексій Тимощенко,

Це має бути прийнятою відповіддю. Я спробував усі інші відповіді і слідкував за посібниками Google і Firebase, але це правильний варіант, ви чудовий чоловік!
blueware

Дякую, як ти його знайшов? але моє запитання - додаток для моїх кодових рядків не вище 65000, чому я повинен використовувати його мультимедіа і чому я працюю на 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"
      ...
      />

Сподіваюся, це допомагає.


Працювали чудово! Дякую багато :)
Рішення Духу

3
Звідки ти знаєш ці речі ?? Хто тобі сказав??? У мене щойно з’явилася ця проблема після оновлення до Android Studio 3 та встановлення програм «налагодження». Версія "Випуск" спрацювала добре. Тепер з вашим рішенням також працює версія "Налагодження". Я такий щасливий, як ти існуєш !!
Тон

Це ідеальна відповідь
androidXP

У всіх цих відповідях жоден насправді не пояснює, що насправді додавання мультидекса вирішує проблему (вражаюче випадкова справа перед такою проблемою)
Aditya Anand

36

Якщо у вас є та сама проблема, але ви вже applicationIdвстановили build.gradle, ви також можете спробувати наступне:

  • в Android Studio: Build>Clean Project
  • в інших IDE: очистити, відновити, що завгодно ...

3
Якщо у вас все ще виникають проблеми, видаліть каталог збірок і спробуйте ще раз. Я застряг, поки цього не зробив :)
Лоренс Мороні

buildДля мене працювала лише видалення каталогу. Здається, це було зіпсовано моїм останнім витягом з репо.
Саванюк Севастьян

17

У мене була така ж проблема в пристроях Pre Lollipop. Щоб вирішити це, я зробив наступним чином. Тим часом я використовував multiDex у проекті.

1. додайте це для build.gradle в модуль: додаток

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"

Це працює для мене. Сподіваюся, що це теж допомагає вам :)


4
Вам не слід виконувати всі три завдання (розширити MultiDexApplication, реалізувати attachcheBaseContext та змінити файл найменшого файлу), щоб зробити функцію multidex достатньо лише однієї: D. developer.android.com/studio/build/multidex.html
Hossein Shahdoost

Якщо ваш 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 , наприклад, наприклад:

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' }
Borja

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)
}

Оскільки у відповіді є багато коментарів Кордова, якщо ви працюєте з Кордовою, ви не повинні дуже редагувати build.gradleсебе, він має коментар на початку, що кажуть

// ЗАГАЛЬНИЙ ФАЙЛ! НЕ редагуйте!

Отже, якщо ви використовуєте Cordova, найкраще, що ви можете зробити, - це оновити до cordova-android 5.1.0 або новішої версії там, де ці зміни вже є.


0

Моє було тому, що для файлу SDK Firebase у файлі Gradle встановлено неправильну числову версію.

Я видалив деблоки Firebase з Gradle і знову встановив їх за допомогою Firebase Assistant


0

Перейдіть до налаштувань андроїд-студії (натискаючи Ctrl+Alt+Sу вікнах), знайдіть 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

у моєму випадку я забуваю додати (або видалити випадково) ядро ​​firebase у build gradle

implementation 'com.google.firebase:firebase-core:xx.x.x'

1
Минуло 3 місяці, і це тепер застаріло: НЕ ДОДАТИ ЦЕ! Source = firebase.google.com/support/release-notes/android (Обов'язково: Дякую Google)
Aditya Anand

0

Я отримав цю помилку лише на пристроях з API нижчим, ніж 21. У моєму випадку мені довелося працювати з проектом, у якому multiDexEnabledопція в build.gradleвже була встановлена true. Я перевірив файл Dex з APK, і кількість посилальних методів було менше 64k, тому проект не потребує мультидексації, тому я налаштований multiDexEnabledна false. Це рішення спрацювало на мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.