Impossible d'obtenir le fournisseur com.google.firebase.provider.FirebaseInitProvider

160

Je teste le nouvel outil Crash: https://firebase.google.com/docs/crash/

Après avoir parcouru les étapes, l'application se lance et se bloque en disant:

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
la source
1
Avez-vous un applicationID dans votre build.gradle?
Ian Barber
1
@IanBarber: Oh wow, lors de l'édition de build.gradle, je l'ai supprimé. Ma faute.
Macarse
seul stackoverflow.com/a/38224316/4663544 a fonctionné pour moi
Jeba Ra
8
Essayez Android studio> Build>Clean Project
Ujjwal Singh
Je l'ai corrigé en faisant en sorte que ma classe d'application étende MultiDexApplication lorsque multiDexEnabled est true dans graddle defaultConfig de l'application.
Herman

Réponses:

145

1.

Ajoutez l' applicationId au build.gradle de l'application:

android {
    ...
    defaultConfig {
        applicationId "com.example.my.app"
        ...
    }
}

Et que Clean Project -> Build or Rebuild Project


2. Si votre minSdkVersion <= 20 ( https://developer.android.com/studio/build/multidex )

Utilisez Multidex correctement.

build.gradle de l'application

android {
...               
    defaultConfig {
    ....
        multiDexEnabled true
    }
    ...
}

dependencies {
    implementation 'com.android.support:multidex:1.0.3'
    ...
}

manifest.xml

<application
    ...
    android:name="android.support.multidex.MultiDexApplication" >
    ...

3.

Si vous utilisez une classe Application personnalisée

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
la source
1
J'ai eu la même erreur et elle a été corrigée par la solution. Je ne sais pas pourquoi, mais ça marche.
FUJI Goro
Cela m'a sauvé la journée. J'ai eu l'erreur alors que j'essayais d'exécuter une application Cordova sur un appareil Android.
manosim
1
J'ai le même problème et l'applicationId sur mon build.gradle. Que puis-je faire dans ce cas?
Maria Mercedes Wyss Alvarez
@ekonstantinidis Comment avez-vous résolu le problème pour votre application cordova? Peut-il être ajouté à une configuration quelque part qui l'ajoute correctement lorsque build.gradle est généré? (Pendant cordova platform add android)?
Zach
@Zach je ne pense pas. Je l'ai ajouté après avoir couru cordova platform add android. Je suppose que cela sera corrigé une fois que cordova sera mis à jour? Ps. Je n'utilise pas du tout Firebase.
manosim
93

J'étais avec le même problème dans les appareils avec SDK <22, mais pour moi la raison est le MultiDex, le MultiDex.installdoit être dans la attachBaseContextméthode.

Si vous utilisez MultiDex, essayez ceci:

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'

    }
...
luizMello
la source
4
Cela fonctionne, mais il y a une classe spéciale pour le faire au lieu de remplacer une fonction et elle s'appelle MultiDexApplication, voir la réponse ci-dessous stackoverflow.com/questions/37312103/...
GregoryK
Ouais cela a fonctionné pour moi aussi, j'écris toujours MultiDex.install (this) dans la méthode onCreate () merci mec
dara
dans mon cas, je viens de mettre à jour compile 'com.android.support:multidex:1.0.1' à la dernière version disponible
Aleksey Timoshchenko
Cela devrait être la réponse acceptée. J'ai essayé toutes les autres réponses et suivais les guides Google et Firebase, mais c'est la bonne, vous êtes un homme génial!
blueware
Merci, comment pouvez-vous le trouver? mais ma question est que mon application de lignes de code n'est pas supérieure à 65000 pourquoi je devrais l'utiliser multudex et pourquoi je travaille sur sdk> 22 et cela ne fonctionne pas sur sdk <22
milad salimi
75

La réponse acceptée n'a pas résolu mon problème.

Si vous utilisez Multidex, votre application doit s'étendre MultiDexApplicationau lieu de 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"
      ...
      />

J'espère que ça aide.

Ye Min Htut
la source
A parfaitement fonctionné! Merci beaucoup :)
Solution Spirit
3
Comment savez-vous ces choses? Qui te l'a dit??? Je viens de commencer à avoir ce problème après la mise à jour vers Android Studio 3 et l'installation des applications de «débogage». La version "Release" a bien fonctionné. Désormais, avec votre solution fonctionne également la version "Debug". Je suis tellement heureux que vous existez !!
Ton
C'est la réponse parfaite
androidXP
Dans toutes ces réponses, aucune n'explique réellement ce que l'ajout de multidex fait réellement pour résoudre le problème (une chose étonnamment aléatoire à faire face à un tel problème)
Aditya Anand
36

Si vous rencontrez le même problème mais que vous disposez déjà de l' applicationIdensemble build.gradle, vous pouvez également essayer ce qui suit:

  • dans Android Studio: Build>Clean Project
  • dans d'autres IDE: Clean, Rebuild, peu importe ...
Barthy
la source
3
Et si vous rencontrez toujours des problèmes, supprimez le répertoire de construction et réessayez. J'étais coincé jusqu'à ce que je fasse ça :)
Laurence Moroney
Seule la suppression du buildrépertoire a fonctionné pour moi. On dirait qu'il a été gâché par mon dernier retrait du repo.
Sevastyan Savanyuk
17

J'ai eu le même problème dans les appareils Pre Lollipop. Pour résoudre cela, j'ai fait ce qui suit. En attendant, j'utilisais multiDex dans le projet.

1. ajoutez ceci pour build.gradle dans le module: app

multiDexEnabled = true

dexOptions {
    javaMaxHeapSize "4g"
}

2. ajoutez cette dépendance

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

3. puis dans l'application principale

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.Dans le fichier manifestes

<application
    android:allowBackup="true"
    android:name="android.support.multidex.MultiDexApplication"

Cela fonctionne pour moi. J'espère que ça va t'aider aussi :)

Thilina Kj
la source
4
Vous ne devez pas effectuer les trois tâches (étendre MultiDexApplication, implémenter attacheBaseContext et modifier le fichier menifest) afin d'activer le multidex, un seul suffit: D. developer.android.com/studio/build/multidex.html
Hossein Shahdoost
Si votre minSdk est de 21 ou plus, vous ne devriez pas avoir à faire quoi que ce soit, car la documentation indique qu'il est déjà activé par défaut. Et pourtant, ce problème vient pour moi avec minSdk = 21, des solutions pour cela?
Aditya Anand le
15

tu devrais être sûr

pour ajouter cette ligne à votre manifeste

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>
Juan Salamanque
la source
A travaillé pour moi aussi avec multiDexEnabled true
ashishdhiman2007
7

N'incluez pas toute la bibliothèque de services de jeu mais utilisez celle dont vous avez besoin. Remplacez la ligne dans votre build.gradle :

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

avec celle appropriée des API des services Google Play , comme par exemple:

compile 'com.google.android.gms:play-services-gcm:9.6.1'
Ayan
la source
7

Ajoutez ceci à votre build.gradle au niveau du module:

android {               
defaultConfig {
    ....
    multiDexEnabled true
}
...
}

dependencies {
    compile 'com.android.support:multidex:1.0.1'
    .........
}

Si vous remplacez la Applicationclasse, étendez-la à partir de MultiDexApplication:

YourApplicationClass extends MultiDexApplication

Si vous ne pouvez pas l'étendre à partir de la MultiDexApplicationclasse, remplacez la attachBaseContext()méthode comme suit:

protected void attachBaseContext(Context base) {
     super.attachBaseContext(context);
     Multidex.install(this);
  }

Et ne rien exécuter avant d' MultiDex.install(this)être exécuté.

Si vous ne remplacez pas la Applicationclasse, modifiez simplement votre fichier manifeste comme suit:

<?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>
Nurlan Sofiyev
la source
3

Cela devrait fonctionner:

Étape 1:

defaultConfig {
    applicationId "service.ingreens.com.gpsautoon"
    minSdkVersion 17
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

Étape 2:

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

Étape 3: Suivez un autre cours

public class MyApplication extends MultiDexApplication {
}

Étape 4: ajoutez cette ligne au manifeste

<application
    android:name="android.support.multidex.MultiDexApplication">
</application>
Soumen Das
la source
2

Dans mon cas, le problème a été résolu en ajoutant cette ligne au module build.gradle:

// AJOUTER CECI EN BAS

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

La source

Borja
la source
J'ai "Plugin avec l'ID" com.google.gms.play-services "introuvable."
kaleemsagard
@kaleemsagard a mis ça dans votre projetbuild.gradle dependencies { classpath 'com.google.gms:google-services:3.0.0' }
Borja
1

Dans mon cas, le problème est survenu après la migration vers AndroidX. Pour une raison quelconque, l'application appelait MultiDex.install () avec réflexion:

    final Class<?> clazz = Class.forName("android.support.multidex.MultiDex");
    final Method method = clazz.getDeclaredMethod("install", Context.class);
    method.invoke(null, this);

J'ai changé le package de android.support.multidex.MultiDexà androidx.multidex.MultiDex. Ça a marché.

cgr
la source
0

Au lieu d'ajouter manuellement le nom du package sur le build.gradle, vous pouvez le faire de cette façon:

ajoutez d'abord cette ligne au début

import java.util.regex.Pattern

Ajoutez ensuite ceci sur defaultConfig

android {
    ...
    defaultConfig {
        ...
        applicationId = doExtractStringFromManifest("package")
        ...
    }
    ...
}

Et enfin, ajoutez la méthode 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)
}

Comme il y a beaucoup de commentaires Cordova sur la réponse, si vous travaillez avec Cordova, vous ne devriez pas vraiment éditer le build.gradlevous - même, il a un commentaire au début qui dit

// FICHIER GÉNÉRÉ! NE PAS MODIFIER!

Donc, si vous utilisez un Cordova, la meilleure chose que vous pouvez faire est de mettre à jour vers cordova-android 5.1.0 ou supérieur là où ces changements sont déjà présents.

jcesarmobile
la source
0

Le mien était parce que le SDK Firebase dans le fichier Gradle était défini sur une version de numéro incorrect.

J'ai supprimé les debs Firebase de Gradle et les ai réinstallés à nouveau en utilisant Firebase Assistant

Suhaib
la source
0

Accédez aux paramètres du studio Android (en appuyant Ctrl+Alt+Ssur Windows), recherchez Instant Runet décochez Enable Instant Run.

En désactivant Instant Runet en exécutant à nouveau votre application, le problème sera résolu.

VSB
la source
0

Pour l'application native react, l'erreur était que java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" cela ne se produisait que pour les appareils avec la version Android <~ 4.4

Résolu par simple remplacement Applicationdans MainApplication.javadesMultiDexApplication

REMARQUE: import android.support.multidex.MultiDexApplication;

Malith
la source
0

J'ai ajouté le code suivant dans le fichier proguard.

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

et cela a fonctionné dans mon cas.

Ananta Prasad
la source
0

dans mon cas, j'oublie d'ajouter (ou de supprimer accidentellement) le noyau firebase dans build gradle

implementation 'com.google.firebase:firebase-core:xx.x.x'
Alexa289
la source
1
3 mois se sont écoulés et ceci est maintenant obsolète: NE PAS AJOUTER! Source = firebase.google.com/support/release-notes/android (obligatoire: Merci Google)
Aditya Anand
0

J'ai cette erreur uniquement sur les appareils avec une API inférieure à 21. Dans mon cas, j'ai dû travailler avec un projet où l' multiDexEnabledoption dans build.gradleétait déjà définie sur true. J'ai vérifié le fichier dex à partir de l'APK et le nombre de méthodes référencées était inférieur à 64k, donc le projet n'a pas besoin d'être un multidex, donc je me suis mis multiDexEnabledà false. Cette solution a fonctionné pour moi.

CristianBanan
la source