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?
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
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.
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"
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:
Ajoutez ce code dans votre build.gradle
(module: app) dans defaultConfing
:
defaultConfig {
....
....
multiDexEnabled = true
}
Ajoutez ce code dans votre build.gradle
(module: app) dans dependencies
:
dependencies {
compile 'com.Android.support:multidex:1.0.1'
.....
.....
}
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.
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
}
}
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
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.
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); } }
Si vous utilisez MultiDex dans votre application Gradle, changez étend l'application à étend MultiDexApplication dans votre classe d'application. Cela fonctionnera avec défi
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
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.
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
Ceci est dû à MultiDex.
Étapes à résoudre:
Dans gradle-> dépendances -> (compile'com.Android.support: multidex: 1.0.1 ') Ajoutez ceci dans les dépendances
Dans votre projet, la classe d'application étend MultiDexApplication comme ceci (la classe publique MyApplication étend MultiDexApplication)
Courir et vérifier
Vous devez étendre votre classe d'applications avec MultiDexApplication
au lieu de Application
.
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.**
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.
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'
}
}
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'
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.