web-dev-qa-db-fra.com

Vous n'avez pas trouvé la classe "com.google.firebase.provider.FirebaseInitProvider"?

Je reçois l'exception ci-dessous lors du lancement de l'application.

Java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: Java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[Zip file "/data/app/com.vfirst.ifbagro-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.vfirst.ifbagro-1, /vendor/lib, /system/lib]]
at Android.app.ActivityThread.installProvider(ActivityThread.Java:4993)
at Android.app.ActivityThread.installContentProviders(ActivityThread.Java:4596)
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4536)
at Android.app.ActivityThread.access$1300(ActivityThread.Java:149)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1353)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:137)
at Android.app.ActivityThread.main(ActivityThread.Java:5214)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:525)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:739)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:555)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[Zip file "/data/app/com.vfirst.ifbagro-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.vfirst.ifbagro-1, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:53)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:501)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:461)
at Android.app.ActivityThread.installProvider(ActivityThread.Java:4978)
at Android.app.ActivityThread.installContentProviders(ActivityThread.Java:4596) 
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4536) 
at Android.app.ActivityThread.access$1300(ActivityThread.Java:149) 
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1353) 
at Android.os.Handler.dispatchMessage(Handler.Java:99) 
at Android.os.Looper.loop(Looper.Java:137) 
at Android.app.ActivityThread.main(ActivityThread.Java:5214) 
at Java.lang.reflect.Method.invokeNative(Native Method) 

Voici le build.gradle du niveau de l'application

apply plugin: 'com.Android.application'
apply plugin: 'Android-apt' 

Android {
compileSdkVersion 24
buildToolsVersion "24.0.1"

defaultConfig {
    applicationId "com.vfirst.ifbagro"
    minSdkVersion 17
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])


compile 'com.Android.support:appcompat-v7:24.2.1'
compile 'com.Android.support:design:24.2.1'
compile 'com.Android.support:support-v4:24.2.1'
compile 'com.google.Android.gms:play-services-gcm:9.4.0'
compile 'com.google.Android.gms:play-services-location:9.4.0'
compile 'com.Android.support:multidex:1.0.1'
compile 'com.google.firebase:firebase-messaging:9.4.0'
compile 'com.google.Android.gms:play-services:9.4.0'
testCompile 'junit:junit:4.12'
}

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

Ceci est mon niveau d'application build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
    jcenter()
    mavenCentral()
}
dependencies {
    classpath 'com.Android.tools.build:gradle:2.2.0'
    classpath 'com.google.gms:google-services:3.0.0'
    classpath 'com.neenbedankt.gradle.plugins:Android-apt:1.8'
    classpath 'com.google.gms:google-services:3.0.0'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
}

allprojects {
repositories {
    jcenter()
}
}

task clean(type: Delete) {
     delete rootProject.buildDir
}

Comment résoudre le problème?

113
WISHY

J'ai eu la même erreur et je l'ai résolue avec MultiDex, comme décrit sur ce lien: https://developer.Android.com/studio/build/multidex.html


Parfois, il ne suffit pas d'activer MultiDex.

Si aucune classe requise au démarrage n'est fournie dans le fichier DEX primary, votre application plante alors avec l'erreur Java.lang.NoClassDefFoundError..____. https://developer.Android.com/studio/build/multidex#keep

FirebaseInitProvider est requis lors du démarrage.

Vous devez donc spécifier manuellement FirebaseInitProvider comme requis dans le fichier DEX principal.

fichier build.gradle

Android {
    buildTypes {
        release {
            multiDexKeepFile file('multidex-config.txt')
            ...
        }
    }
}

multidex-config.txt (dans le même répertoire que le fichier build.gradle)

com/google/firebase/provider/FirebaseInitProvider.class
116
johanvs

Moi aussi j'ai fait face au même problème et finalement résolu en désactivant Instant Run dans Android studio.

Paramètres → Construire, Exécution, Déploiement → Exécuter instantanément et décochez l'option Activer l'exécution instantanée.

78
Shylendra Madda

Dans le fichier build.gradle (Module: app), insérez le code ci-dessous dans defaultConfig:

  defaultConfig {
        applicationId "com.***.****"
minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

et insérer dans les dépendances:

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

Ajoutez ensuite le code à manifester:

<application 
    Android:name="Android.support.multidex.MultiDexApplication"
41
CodeArt

J'ai eu le même problème dans mon (projet de lecteur YouTube) ... et le problème suivant a résolu le problème pour moi:

  1. Ajoutez ce code dans votre build.gradle (module: app) dans defaultConfing:

    defaultConfig {
        ....
        ....
        multiDexEnabled = true
    }
    
  2. Ajoutez ce code dans votre build.gradle (module: app) dans dependencies:

    dependencies {
        compile 'com.Android.support:multidex:1.0.1'
        .....
        .....
    }
    
  3. Ouvrez AndroidManifest.xml et dans application:

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

    ou si vous avez votre classe App, étendez-la à partir de MultiDexApplication comme:

    public class MyApp extends MultiDexApplication {
    .....
    

Et enfin, je pense que vous devriez avoir Android Support Repository téléchargé, dans Extras dans SDK Manager.

29
Firas Hashash

Remplacez simplement la méthode suivante dans votre classe d'application.

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 

    }
}
21
SilverSky

Activer multidex n’est pas une bonne solution car multidex a un autre usage sous Android voir cette réponse ce qui est multidex

La solution est en train de désactiver l'exécution instantanée comme @Shylendra Madda a déclaré

Paramètres → Construire, Exécution, Déploiement → Exécuter instantanément et décochez l'option Activer l'exécution instantanée.

Je pense que la raison de ce problème est lorsque l'exécution instantanée est activée, Android Studio ne met pas de bibliothèques telles que firebase dans un apk généré pour réduire le temps de construction du projet, car la bibliothèque firebase et d'autres bibliothèques telles que maps et autres existent Les services de jeu et les services de jeu sont installés sur un appareil Android. Par conséquent, si l'exécution instantanée est activée, il n'est pas nécessaire de les placer dans un apk généré pour accélérer le processus de création.

Donc, lorsque vous extrayez apk et l'installez sur un autre appareil, vous verrez cette exception

14
Edalat Feizi

J'ai également fait face au même problème après avoir essayé toutes les solutions, j'ai trouvé la solution ci-dessous.

Si vous avez appliqué les règles de proguard, ajoutez la ligne ci-dessous dans les règles de ProGuard.

-keep class com.google.firebase.provider.FirebaseInitProvider

et sa résoudre mon problème.

9
gunavant patel

Lorsque votre application et les bibliothèques référencées dépassent 65 536 méthodes, vous rencontrez une erreur de construction indiquant que votre application a atteint le limite de l'architecture de construction Android

Pour éviter cette limitation, vous devez configurer votre application pour multidex

Si votre minSdkVersion est réglé sur 21 ou plus, il ne vous reste plus qu'à faire Définissez multiDexEnabled sur true dans votre fichier build.gradle au niveau du module, en tant que montré ici:

Android {
    defaultConfig {
        ...
        minSdkVersion 21 
        multiDexEnabled true
    }
    ...   
}

Cependant, si votre minSdkVersion est réglé sur 20 ou moins, vous devez alors utilisez la bibliothèque de support multidex comme suit:

1 .Modifiez le fichier build.gradle au niveau du module pour activer multidex et ajoutez la bibliothèque multidex en tant que dépendance, comme illustré ci-dessous:

Android {
    defaultConfig {
        ...
        minSdkVersion 15 
        multiDexEnabled true
    }
    ...
 }

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

2. Selon que vous remplaciez ou non la classe Application, effectuez l'une des opérations suivantes:

  • Si vous ne remplacez pas la classe Application, modifiez votre fichier manifeste pour définir Android: name dans la balise comme suit:

    <application
        Android:name="Android.support.multidex.MultiDexApplication" >
        ...
    </application>
  • Si vous remplacez la classe Application, changez-la pour étendre MultiDexApplication (si possible) comme suit:

public class MyApplication extends MultiDexApplication { ... }
  • Ou si vous remplacez la classe Application mais qu'il n'est pas possible de changer la classe de base, vous pouvez alors remplacer le attachBaseContext () et appelez MultiDex.install (this) pour activer multidex:

public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}
9
Sokmean Pon

Si vous utilisez MultiDex dans votre application Gradle, changez étend l'application à étend MultiDexApplication dans votre classe d'application. Cela fonctionnera avec défi

6
Suresh kumar

Commencez par ajouter les éléments suivants dans build.gradle (Module: app) ---->

defaultConfig{
..
multiDexEnabled true
..
}

Ensuite, dans le même fichier, ajoutez ce qui suit

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

Ensuite, dans AndroidManifest.xml, écrivez ce qui suit

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

C'est tout. Cela fonctionnera certainement

5
Hirak JD

1: Accédez au dégradé, activez multiDexEnabled et ajoutez la bibliothèque multidex dans les dépendances.

Android {
   ...
   defaultConfig {
      multiDexEnabled true
      ...
   }
}

dependencies {
  // add dependency 
  implementation 'com.Android.support:multidex:1.0.1'
}

2: Accédez au fichier Manifest et écrivez Android: name = ". MyApplication" (le nom de la classe (MyApplication) est facultatif. Vous pouvez écrire ce que vous voulez).

    <application
        Android:name=".MyApplication"
        Android:allowBackup="true"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:supportsRtl="true"
        Android:theme="@style/AppTheme">
        .
        .
        .
        .
        .
    </application>

3: Comme vous avez écrit Android: name = ". MyApplication" Dans l'application dans le fichier manifeste. cela vous donnera une erreur car vous n'avez pas créé la classe MyApplication. Create MyApplication Class étendez-le de la classe "application" ou cliquez simplement sur.MyApplication, une petite bulle rouge apparaît à gauche de la syntaxe, cliquez dessus, vous verrez (créer la classe MyApplication) dans le menu, cliquez dessus et incluez under Méthode Dans cette classe.

    public class MyApplication extends Application {

    @Override 
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    } 

Si vous souhaitez obtenir plus d'informations, cliquez sur ce lien: [ https://developer.Android.com/studio/build/multidex.html]

J'espère que cela fonctionne pour vous.

4
Opriday

J'ai eu le même problème et résolu suffit d'ajouter un morceau de code , si vous obtenez ce problème signifie que vous avez déjà terminé toutes les étapes qui nécessitent l'utilisation de Firebase. Il vous suffit de créer une classe qui étend l'application (la classe publique Application_CrashReport étend l'application) et d'ajouter cette classe dansfichier principalet dans cette classe il suffit de remplacer la méthode ci-dessous. 

  @Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
}

et ajoutez MultiDex.install (this); dans cette méthode signifie

  @Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

Remarque : - N'oubliez pas de suivre les étapes ci-dessus

3
Peter

Ceci est dû à MultiDex.

Étapes à résoudre: 

  1. Dans gradle-> dépendances -> (compile'com.Android.support: multidex: 1.0.1 ') Ajoutez ceci dans les dépendances

  2. Dans votre projet, la classe d'application étend MultiDexApplication comme ceci (la classe publique MyApplication étend MultiDexApplication)

  3. Courir et vérifier

2
Sukhdeep Saini

Vous devez étendre votre classe d'applications avec MultiDexApplication au lieu de Application.

1
Ali Akram

C'est un peu tard pour ceux qui arrivent, mais vérifiez vos règles de proguard! J'ai perdu beaucoup de temps à ce sujet. Vos règles de proguard pourraient être de changer les noms en fichiers firebase importants. Cela ne prouve vraiment qu'un problème en production et en exécution instantanée :)

proguard-rules.pro

-keep class com.google.firebase.** { *; }
-keep class com.firebase.** { *; }
-keep class org.Apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.Apache.**
-dontwarn org.w3c.dom.**
0
Keith Aylwin

Si vous avez plus de 20 minutes de version, vous devez utiliser la dernière version de Firebase Auth i.e.

implémentation 'com.google.firebase: firebase-auth: 18.1.0'

et pas besoin d'installer multi-dex si vous n'en avez pas réellement besoin.

J'ai rencontré ce problème lorsque j'ai utilisé 16.0.5 à partir de l'aide de Firebase, mais j'ai pu le résoudre après la mise à jour vers 18.1.0.

0
SilverArrow

Ce problème est survenu lorsque je suis passé à Android Studio 3.4 avec le plugin Android Gradle 3.4.0. qui fonctionne avec le compilateur R8.

Le plug-in Android Gradle inclut d'autres fichiers de règles ProGuard prédéfinis, mais il est recommandé d'utiliser proguard-Android-optim.txt . Plus d'infos ici .

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile(
          'proguard-Android-optimize.txt'),
          // List additional ProGuard rules for the given build type here. By default,
          // Android Studio creates and includes an empty rules file for you (located
          // at the root directory of each module).
          'proguard-rules.pro'
    }
}
0
Levon Petrosyan

Je faisais face au même problème et j'ai résolu ce problème en modifiant la version de fireabseStorage de la même manière que la version de la base de données Firebase.

 implementation 'com.google.firebase:firebase-core:16.0.8'
 implementation 'com.google.firebase:firebase-database:16.0.1'
 implementation 'com.google.firebase:firebase-storage:17.0.0'

à

 implementation 'com.google.firebase:firebase-core:16.0.8'
 implementation 'com.google.firebase:firebase-database:16.0.1'
 implementation 'com.google.firebase:firebase-storage:16.0.1'
0
vicky khan

Si vous utilisez Xamarin.Forms, vous voudrez peut-être vérifier vous ne trouvez pas la classe "com.google.firebase.provider.FirebaseInitProvider"? car cela capture le problème de l'erreur de dex avec google firebase au démarrage (non résolu pour le moment).

Je suis revenu à ne plus utiliser de réduction à court terme et je prévois d'utiliser ProGuard jusqu'à ce que la version 8 soit plus stable.

0
Devology Ltd