Beim Start der App wird die folgende Ausnahme angezeigt.
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)
Hier ist das build.gradle auf App-Ebene
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'
Dies ist meine build.gradle auf Anwendungsebene
// 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
}
Wie kann man das Problem lösen?
android:name="android.support.multidex.MultiDexApplication"
? Wenn MultiDex korrekt konfiguriert ist, werden während der App-Initialisierung folgende Logcat-Meldungen angezeigt :I/MultiDex: install done
.Antworten:
Ich hatte den gleichen Fehler und habe ihn mit MultiDex behoben, wie unter diesem Link beschrieben: https://developer.android.com/studio/build/multidex.html
Manchmal reicht es nicht aus, nur MultiDex zu aktivieren.
FirebaseInitProvider ist beim Start erforderlich.
Daher müssen Sie FirebaseInitProvider manuell angeben, wie in der primären DEX-Datei erforderlich.
build.gradle-Datei
multidex-config.txt (im selben Verzeichnis wie die Datei build.gradle)
quelle
Application
Klasse von erstrecktMultiDexApplication()
. Dies fehlte in meinem Fall.Auch ich hatte das gleiche Problem und löste es schließlich durch Deaktivieren
Instant Run
in einem Android-Studio.Aktualisieren:
In den neuesten Versionen von Android Studio 3.5+ ist keine Sofortausführungsoption verfügbar. Es sollte nur für ältere Versionen gelten.
quelle
Fügen Sie in der Datei build.gradle (Module: app) den folgenden Code in defaultConfig ein:
und in Abhängigkeiten einfügen:
Fügen Sie dann Code zum Manifest hinzu:
quelle
Ich hatte das gleiche Problem in meinem (YouTube-Player-Projekt) ... und Folgendes löste das Problem für mich:
Fügen Sie diesen Code in Ihr
build.gradle
(Modul: App) eindefaultConfing
:Fügen Sie diesen Code in Ihr
build.gradle
(Modul: App) eindependencies
:Offen
AndroidManifest.xml
und innenapplication
:oder wenn Sie Ihre App-Klasse haben, erweitern Sie sie von MultiDexApplication wie folgt:
Und schließlich sollten Sie das Android Support Repository in den Extras im SDK Manager herunterladen .
quelle
Überschreiben Sie einfach die folgende Methode in Ihrer Anwendungsklasse.
quelle
android:name
Zeug im ManifestWenn Ihre minSdkVersion auf 21 oder höher festgelegt ist, müssen Sie multiDexEnabled in Ihrer build.gradle-Datei auf Modulebene nur auf true setzen, wie hier gezeigt:
Else , wenn Ihr minSdkVersion auf 20 oder weniger eingestellt ist, dann müssen Sie die multidex Support - Bibliothek verwenden , wie folgt:
quelle
import android.content.Context;
undimport android.support.multidex.MultiDex;
Aktivieren
multidex
ist keine gute Lösung, damultidex
eine andere Verwendung in Android diese Antwort ist, was Multidex istDie Lösung ist das Deaktivieren des Sofortlaufs, wie @Shylendra Madda sagte
Ich denke, der Grund für dieses Problem ist, wenn Android Instant Run aktiviert ist. Android Studio setzt keine Bibliotheken wie
firebase
in generierte apk ein, um die Projekterstellungszeit zu verkürzen, dafirebase
Bibliotheken und andere Bibliotheken wiemaps
und andere in Wiedergabediensten vorhanden sind und Wiedergabedienste installiert sind auf Android-Gerät also, wenn Instant Run aktiviert ist, müssen Sie sie nicht in generierte apk setzen, um die Build-Zeit zu beschleunigen.Wenn Sie apk extrahieren und auf einem anderen Gerät installieren, wird diese Ausnahme angezeigt
quelle
Ich habe auch das gleiche Problem, nachdem ich alle Lösungen ausprobiert habe. Ich habe die folgende Lösung gefunden.
Wenn Sie Proguard-Regeln angewendet haben, fügen Sie die folgende Zeile in ProGuard-Regeln hinzu
und es löst mein Problem.
quelle
-keep class com.google.firebase.provider.FirebaseInitProvider
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
Wie zu aktivieren, sagen Sie mir bitte Sir1: Gehen Sie zu gradle enable multiDexEnabled und fügen Sie die Multidex-Bibliothek in den Abhängigkeiten hinzu.
2: Gehen Sie zur Manifest-Datei und schreiben Sie android: name = ". MyApplication" (Klassenname (MyApplication) ist optional, Sie können schreiben, was Sie wollen).
3: Wie Sie geschrieben haben android: name = ". MyApplication" Inside Application at Manifest-Datei. Es wird eine Fehlermeldung angezeigt, da Sie keine MyApplication-Klasse erstellt haben. MyApplication-Klasse erstellen Erweitern Sie sie um die Klasse "application" oder klicken Sie einfach auf. MyApplication, eine kleine rote Sprechblase wird auf der linken Seite einer Syntax angezeigt. Klicken Sie darauf. Sie sehen (MyApplication-Klasse erstellen) im Menü, klicken darauf und schließen ein unten Methode Innerhalb dieser Klasse.
Wenn Sie weitere Informationen erhalten möchten, klicken Sie auf diesen Link: [ https://developer.android.com/studio/build/multidex.html]
Hoffentlich funktioniert es für Sie.
quelle
Fügen Sie zunächst Folgendes in build.gradle (Modul: App) ein ---->
Fügen Sie dann in derselben Datei Folgendes hinzu
Dann schreiben Sie in AndroidManifest.xml Folgendes
Das ist es. Es wird definitiv funktionieren
quelle
Wenn Sie MultiDex in Ihrem App Gradle verwenden, ändern Sie die Option zum Erweitern der Anwendung, um die MultiDexApplication in Ihrer Anwendungsklasse zu erweitern. Es wird trotzig funktionieren
quelle
Ich hatte das gleiche Problem und löste es einfach, indem ich einen Teil des Codes hinzufügte. Wenn dieses Problem auftritt, haben Sie bereits alle Schritte ausgeführt, die zur Verwendung von Firebase erforderlich sind. Sie müssen nur eine Klasse erstellen, die die Anwendung erweitert (öffentliche Klasse Application_CrashReport erweitert Application) und diese Klasse in die Hauptmanifestdatei einfügen. In dieser Klasse überschreiben Sie einfach die folgende Methode
und fügen Sie MultiDex.install (this) hinzu; in dieser Methode bedeutet
Hinweis : - Vergessen Sie nicht, die obigen Schritte auszuführen
quelle
Dies liegt an MultiDex.
Zu lösende Schritte:
In gradle-> Abhängigkeiten -> (compile'com.android.support: multidex: 1.0.1 ') Fügen Sie dies in Abhängigkeiten hinzu
In Ihrer Projektanwendungsklasse wird MultiDexApplication wie folgt erweitert (öffentliche Klasse MyApplication erweitert MultiDexApplication)
Ausführen und überprüfen
quelle
Dies ist ein bisschen spät für diejenigen, die hereinkommen, aber überprüfen Sie Ihre Proguard-Regeln! Ich habe viel Zeit damit verschwendet. Ihre Proguard-Regeln könnten darin bestehen, die Namen in wichtige Firebase-Dateien zu ändern. Dies ist wirklich nur ein Problem in der Produktion und im Sofortlauf :)
proguard-rules.pro
quelle
Wie bereits erwähnt, ist dies ein Problem mit
multidex
: Sie sollten Ihrembuild.gradle
und eine Implementierung hinzufügenMainApplication.java
. Aber was Sie hinzufügen, hängt wirklich davon ab, ob Sie AndroidX unterstützen oder nicht. Folgendes benötigen Sie, um dieses Problem zu lösen:build.gradle
Fügen Sie diese Codezeilen in Ihr (android / app / build.gradle) ein:MainApplication.java
Fügen Sie diese Zeilen in Ihr (android / app / src / main / java /.../ MainApplication.java) ein:build.gradle
Fügen Sie diese Codezeilen in Ihr (android / app / build.gradle) ein:MainApplication.java
Fügen Sie diese Zeilen in Ihr (android / app / src / main / java /.../ MainApplication.java) ein:quelle
Sie sollten Ihre Anwendungsklasse mit
MultiDexApplication
anstelle von erweiternApplication
.quelle
Dieses Problem trat auf, als ich mit dem Android Gradle Plugin 3.4.0 zu Android Studio 3.4 wechselte. Das funktioniert mit dem R8-Compiler.
Das Android Gradle-Plugin enthält zusätzliche vordefinierte ProGuard- Regeldateien. Es wird jedoch empfohlen, proguard-android-optimize.txt zu verwenden . Mehr Infos hier .
quelle
Ich hatte das gleiche Problem und habe dieses Problem gelöst, indem ich die fireabseStorage-Version genauso geändert habe wie die Firebase-Datenbankversion
zu
quelle
Wenn Sie> 20 minsdkversion haben, müssen Sie die neueste Firebase Auth-Version verwenden, d. H.
und Sie müssen kein Multi-Dex einrichten, wenn Sie es nicht wirklich benötigen.
Ich bin auf dieses Problem gestoßen, als ich 16.0.5 vom Firebase-Helfer verwendet habe, konnte es jedoch beheben, als ich auf 18.1.0 aktualisiert habe.
quelle
Wenn Sie Xamarin.Forms verwenden, möchten Sie vielleicht auschecken. Haben Sie die Klasse "com.google.firebase.provider.FirebaseInitProvider" nicht gefunden? da dies das Problem mit dem Dex-Fehler mit Google Firebase beim Start erfasst (derzeit ungelöst).
Ich habe kurzfristig kein Schrumpfen mehr verwendet und plane, ProGuard zu verwenden, bis R8 stabiler ist.
quelle
Fügen Sie im Projektstammpfad google-services.json hinzu
quelle