171 votes

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

J'obtiens l'exception suivante au 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 niveau de l'application build.gradle

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'

Voici 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 ?

0 votes

0 votes

J'avais déjà essayé toutes ces réponses, mais rien ne fonctionne.

0 votes

Il semble y avoir un problème dans votre manifeste ou google-services.json Assurez-vous qu'ils sont corrects. Pouvez-vous afficher votre fichier manifest ?

158voto

johanvs Points 2155

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 une classe qui est nécessaire pendant le démarrage n'est pas fournie dans le fichier DEX primaire puis votre application se bloque avec l'erreur java.lang.NoClassDefFoundError . https://developer.Android.com/studio/build/multidex#keep

FirebaseInitProvider est nécessaire pendant le démarrage.

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

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

2 votes

Vous êtes incroyable <3 merci beaucoup vous avez sauvé ma journée <3

26 votes

Hé cette exception : Causée par : java.lang.ClassNotFoundException : Impossible de trouver la classe "com.google.firebase.provider.FirebaseInitProvider". n'a rien à voir avec l'activation de multidex, en fait si vous voyez les questions build.gradle multiDexEnabled est activé !

4 votes

Non cette erreur vient de multidex, il n'a juste pas complété toutes les étapes, comme vous ne pouvez pas voir son manifeste ou sa classe principale.

87voto

shylendra Points 3399

J'ai également été confronté au même problème et je l'ai finalement résolu en désactivant Instant Run dans un studio Android.

Paramètres Build, Execution, Deployment Instant Run et décocher Enable Instant Run (activer l'exécution instantanée)

Mise à jour :

Il n'y a pas d'option d'exécution instantanée disponible dans la dernière version d'Android Studio 3.5+. Elle ne devrait être applicable que pour les anciennes versions.

9 votes

Pareil pour moi. C'était la cause du problème -- pas multidex ni aucune des autres réponses.

3 votes

Il semble que ce soit un problème avec Android Studio 2.3. La désactivation de l'exécution instantanée a fonctionné pour moi aussi, mais ce n'est pas la solution idéale :(

1 votes

J'ai hérité de deux projets d'une autre entreprise. La base de code, le manifeste et les configurations gradle sont pratiquement les mêmes, à l'exception de quelques éléments mineurs. Un projet se construit et fonctionne bien, l'autre non. J'ai désactivé l'exécution instantanée et les deux s'exécutent maintenant. C'est étrange. Ceci est en utilisant Android Studio. 2.3.

50voto

CodeArt Points 579

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 :

implementation 'com.android.support:multidex:2.0.1'

Ajoutez ensuite le code au manifeste :

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

1 votes

J'essaie, si ça marche, je voterai et commenterai.

50voto

Firas Hashash Points 291

J'avais le même problème dans mon (projet de lecteur YouTube)... et ce qui suit a résolu le problème pour moi :

  1. Ajoutez ce code dans votre build.gradle (module : app) à l'intérieur defaultConfing :

    defaultConfig {
        ....
        ....
        multiDexEnabled = true
    }
  2. Ajoutez ce code dans votre build.gradle (module : app) à l'intérieur dependencies :

    dependencies {
        compile 'com.android.support:multidex:1.0.1'
        .....
        .....
    }
  3. Ouvrir 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 suit :

    public class MyApp extends MultiDexApplication {
    .....

Et enfin, je pense que vous devriez avoir Dépôt de support Android téléchargés, dans le Extras en Gestionnaire de SDK .

1 votes

J'ai fait "MultiDex.install(this) ;" mais cela n'a pas fonctionné. L'extension de la classe d'application avec MultiDexApplication a fait l'affaire.

36voto

SilverSky Points 231

Il suffit de remplacer 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 

    }
}

0 votes

Plus un pour ne pas être tombé dans le panneau android:name dans le manifeste

1 votes

La réponse la plus simple et la meilleure

0 votes

Si vous utilisez une classe d'application personnalisée, c'est la solution. Les autres réponses ne résoudront pas le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X