web-dev-qa-db-fra.com

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

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

Après avoir franchi 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
134
Macarse

1.

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

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

Et que Clean Project -> Construire ou 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'
    ...
}

manifeste.xml

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

3.

Si vous utilisez une classe d'application personnalisée

public class MyApplication extends MultiDexApplication {
    @Override
    protected void attachBaseContext(Context context) {
        super.attachBaseContext(context);
        MultiDex.install(this);
    }
}

manifeste.xml

<application
    ...
    Android:name="com.example.my.app.MyApplication" >
    ...
107
norbDEV

J'étais avec le même problème dans les périphériques avec SDK <22, mais pour moi la raison est le MultiDex, le MultiDex.install doit être dans la méthode attachBaseContext.

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'

    }
...
86
luizMello

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

Si vous utilisez Multidex, votre application devrait étendre MultiDexApplication au 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.

71
Ye Min Htut

Si vous rencontrez le même problème mais que la variable applicationId est déjà définie dans build.gradle, vous pouvez également procéder comme suit:

  • dans Android Studio: Build> Clean Project
  • dans d'autres IDE: Clean, Rebuild, peu importe ...
31
Barthy

J'ai eu le même problème dans les appareils Pre Lollipop. Pour résoudre cela, j'ai procédé comme 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. ajouter 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 :)

16
thilina Kj

vous devriez etre sur

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>
16
Juan Salamanca

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 celui approprié de API de services Google Play , comme par exemple:

compile 'com.google.Android.gms:play-services-gcm:9.6.1'
6
Ayan

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 classe Application, étendez-la à partir de MultiDexApplication:

YourApplicationClass extends MultiDexApplication

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

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

Et ne lancez rien avant que MultiDex.install(this) soit exécuté.

Si vous ne remplacez pas la classe Application, éditez 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>
6
Nurlan Sofiyev

Apportez des changements comme celui-ci 

Dans la construction (app) ::

  defaultConfig {
    multiDexEnabled true
  }

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

In Manifest ::

 <application
    Android:name=".BaseApplication"
    Android:icon="@mipmap/ic_launcher"
    Android:label="@string/app_name">

Dans BaseApplication ::

public class BaseApplication extends Application{
@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}
}
4
garry

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: / Prenez un autre cours

public class MyApplication extends MultiDexApplication {
}

Étape 4: / Ajoutez cette ligne sur le manifeste

<application
    Android:name="Android.support.multidex.MultiDexApplication">
</application>
3
Soumen Das

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

// AJOUTE CE AT LE BAS

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

La source

2
Borja

Le mien était dû au fait que Firebase SDK dans le fichier Gradle était configuré avec une version de numéro erronée. 

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

0
Suhaib

Dans mon cas, le problème est survenu après la migration vers AndroidX. Pour une raison quelconque, app 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é de paquet de Android.support.multidex.MultiDex à androidx.multidex.MultiDex. Ça a marché.

0
cgr

Au lieu d'ajouter manuellement le nom du paquet sur le build.gradle, vous pouvez le faire comme suit:

ajoutez d'abord cette ligne au début

import Java.util.regex.Pattern

Puis ajoutez ceci sur le 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 de Cordova sur la réponse, si vous travaillez avec Cordova, vous ne devriez pas vraiment éditer le build.gradle vous-même, il y a un commentaire au début qui dit

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

Donc, si vous utilisez un Cordova, la meilleure chose à faire est de passer à cordova-Android 5.1.0 ou une version ultérieure lorsque ces modifications sont déjà présentes.

0
jcesarmobile

Pour l’application native de réaction, l’erreur était Java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: Java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" Il s’agissait uniquement des appareils dotés de Android Version <~ 4.4.

Résolu en remplaçant simplement Application dans MainApplication.Java par MultiDexApplication

NOTE: import Android.support.multidex.MultiDexApplication;

0
Malith

Accédez au paramètre de studio Android (en appuyant sur Ctrl+Alt+S dans Windows), recherchez Instant Run et décochez Enable Instant Run.

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

0
VSB