webentwicklung-frage-antwort-db.com.de

Klasse "com.google.firebase.provider.FirebaseInitProvider" nicht gefunden?

Ich bekomme die folgende Ausnahme beim Start der App.

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 App-Level 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'

Dies ist meine Anwendungsebene 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
}

Wie löse ich das Problem?

113
WISHY

Ich hatte den gleichen Fehler und habe ihn mit MultiDex gelöst, wie auf diesem Link beschrieben: https://developer.Android.com/studio/build/multidex.html


Manchmal reicht es nicht aus, MultiDex zu aktivieren.

Wenn eine Klasse, die während des Startens nicht in der primary DEX-Datei benötigt wird, vorhanden ist, stürzt Ihre App mit dem Fehler Java.lang.NoClassDefFoundError..__ ab. https://developer.Android.com/studio/build/multidex#keep

FirebaseInitProvider ist beim Start erforderlich.

Daher müssen Sie FirebaseInitProvider in der primären DEX-Datei manuell angeben.

build.gradle -Datei

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

multidex-config.txt (im selben Verzeichnis wie die Datei build.gradle)

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

Auch ich hatte das gleiche Problem und konnte es schließlich lösen, indem ich Instant Run in Android Studio deaktivierte.

Einstellungen → Erstellen, Ausführen, Bereitstellen → Sofortausführung und deaktivieren Sie die Option "Sofortausführung aktivieren"

78
Shylendra Madda

Fügen Sie in der build.gradle-Datei (Module: app) den folgenden Code in defaultConfig ein:

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

und in Abhängigkeiten einfügen:

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

Fügen Sie dann Code zum Manifest hinzu:

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

Ich hatte das gleiche Problem in meinem (YouTube-Player-Projekt) ... und Folgendes hat das Problem für mich gelöst:

  1. Fügen Sie diesen Code in Ihren build.gradle (Modul: App) in defaultConfing ein:

    defaultConfig {
        ....
        ....
        multiDexEnabled = true
    }
    
  2. Fügen Sie diesen Code in Ihren build.gradle (Modul: App) in dependencies ein:

    dependencies {
        compile 'com.Android.support:multidex:1.0.1'
        .....
        .....
    }
    
  3. Öffnen Sie AndroidManifest.xml und innerhalb von application:

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

    wenn Sie über eine App-Klasse verfügen, erweitern Sie sie von MultiDexApplication wie folgt:

    public class MyApp extends MultiDexApplication {
    .....
    

Und schließlich denke ich, Sie sollten Android Support Repository heruntergeladen haben, im Extras in SDK Manager .

29
Firas Hashash

Überschreiben Sie einfach die folgende Methode in Ihrer Anwendungsklasse.

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

Die Aktivierung von multidex ist keine gute Lösung, da multidex eine andere Verwendung in Android hat. Siehe diese Antwort was ist multidex

Die Lösung deaktiviert den sofortigen Lauf, wie @Shylendra Madda sagte

Einstellungen → Erstellen, Ausführen, Bereitstellen → Sofortausführung und deaktivieren Sie die Option "Sofortausführung aktivieren"

Ich denke, der Grund für dieses Problem ist, wenn Instant Run aktiviert ist. In Android Studio werden Bibliotheken wie firebase nicht in generierte APK-Dateien eingefügt, da die firebase-Bibliothek und andere Bibliotheken wie maps und andere in sind play services und play services sind auf einem Android-Gerät installiert. Wenn also der Instant Run-Modus aktiviert ist, müssen sie nicht in generierte apk-Dateien eingefügt werden, um die Build-Zeit zu verkürzen.

Wenn Sie also apk extrahieren und auf einem anderen Gerät installieren, wird diese Ausnahme angezeigt

14
Edalat Feizi

Ich habe auch das gleiche Problem, nachdem ich alle Lösungen ausprobiert hatte. Ich fand die Lösung unten.

Wenn Sie die Proguard-Regeln angewendet haben, fügen Sie in ProGuard Rules die folgende Zeile hinzu

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

und es ist mein Problem lösen.

9
gunavant patel

Wenn Ihre App und die von ihr referenzierten Bibliotheken 65.536 Methoden überschreiten, wird ein Build-Fehler angezeigt, der darauf hinweist, dass Ihre App das .__ erreicht hat. Limit der Android-Build-Architektur

Um diese Einschränkung zu vermeiden, musst du deine App für multidex konfigurieren

Wenn Ihre minSdkVersion auf 21 oder höher eingestellt ist, brauchen Sie nur Setzen Sie multiDexEnabled in Ihrer build.gradle-Datei auf Modulebene als hier gezeigt:

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

Allerdings, wenn Ihre minSdkVersion auf 20 oder niedriger eingestellt ist, müssen Sie Verwenden Sie die Multidex-Support-Bibliothek wie folgt:

1 .Modifizieren Sie die build.gradle-Datei auf Modulebene, um multidex zu aktivieren und die multidex-Bibliothek als Abhängigkeit hinzuzufügen, wie hier gezeigt:

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

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

2. Abhängig davon, ob Sie die Application-Klasse überschreiben, führen Sie einen der folgenden Schritte aus:

  • Wenn Sie die Application-Klasse nicht überschreiben, bearbeiten Sie die Manifestdatei, um den Namen Android: im Tag wie folgt festzulegen:

    <application
        Android:name="Android.support.multidex.MultiDexApplication" >
        ...
    </application>
  • Wenn Sie die Application-Klasse überschreiben, ändern Sie sie, um MultiDexApplication (falls möglich) wie folgt zu erweitern:

public class MyApplication extends MultiDexApplication { ... }
  • Wenn Sie die Application-Klasse überschreiben, die Basisklasse jedoch nicht geändert werden kann, können Sie stattdessen die .__-Anweisung überschreiben. attachBaseContext () -Methode und rufen Sie MultiDex.install (this) auf, um .__ zu aktivieren. multidex:

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

Wenn Sie MultiDex in Ihrem App Gradle verwenden, ändern Sie erweitert die Anwendung zu und erweitert MultiDexApplication in Ihrer Anwendungsklasse. Es wird trotzig funktionieren

6
Suresh kumar

Fügen Sie zunächst Folgendes in build.gradle (Module: app) ----> ein

defaultConfig{
..
multiDexEnabled true
..
}

Fügen Sie dann in derselben Datei Folgendes hinzu

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

Dann schreiben Sie in AndroidManifest.xml folgendes

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

Das ist es. Es wird definitiv funktionieren

5
Hirak JD

1: Wechseln Sie zu gradle enable multiDexEnabled und fügen Sie die multidex-Bibliothek in die Abhängigkeiten ein.

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

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

2: Gehen Sie zur Manifest-Datei und schreiben Sie Android: name = ". MyApplication" (Klassenname (MyApplication) ist optional, Sie können schreiben, was Sie möchten).

    <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: Wie Sie Android: name = ". MyApplication" in der Anwendung "Manifest" geschrieben haben. Sie erhalten einen Fehler, weil Sie keine MyApplication-Klasse erstellt haben. Erstellen Sie die MyApplication-Klasse, erweitern Sie sie um die Klasse "application" oder klicken Sie einfach auf.MyApplication. Auf der linken Seite einer Syntax wird eine kleine rote Sprechblase angezeigt. Klicken Sie darauf (Sie werden im Menü "MyApplication-Klasse erstellen") und klicken Sie auf "Include" unterhalb der Methode In dieser Klasse.

    public class MyApplication extends Application {

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

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.

4
Opriday

Ich hatte das gleiche Problem und löste einfach einen Code , Wenn Sie dieses Problem erhalten, bedeutet dies, dass Sie bereits alle Schritte ausgeführt haben, die Firebase verwenden müssen. Sie müssen nur eine Klasse erstellen, die die Application (öffentliche Klasse Application_CrashReport) erweitert und diese Klasse inmainifest-Dateihinzufügen 

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

und fügen Sie MultiDex.install (this) hinzu; in dieser Methode bedeutet

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

Hinweis : - Vergessen Sie nicht, die obigen Schritteauszuführen.

3
Peter

Dies liegt an MultiDex.

Schritte zu lösen: 

  1. In Grad-> Abhängigkeiten -> (compile'com.Android.support: multidex: 1.0.1 ') Fügen Sie dies in Abhängigkeiten hinzu

  2. In Ihrer Projektanwendungsklasse erweitert MultiDexApplication so (öffentliche Klasse MyApplication erweitert MultiDexApplication)

  3. Ausführen und überprüfen

2
Sukhdeep Saini

Sie sollten Ihre Application-Klasse mit MultiDexApplication anstelle von Application erweitern.

1
Ali Akram

Dies ist etwas spät für die, die kommen, aber überprüfen Sie Ihre Proguard-Regeln! Ich habe viel Zeit damit verschwendet. Ihre Proguard-Regeln könnten die Namen in wichtige Firebase-Dateien ändern. Das beweist wirklich nur ein Problem in der Produktion und im Sofortlauf :)

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

Wenn Sie über eine Version von> 20 Minuten verfügen, müssen Sie die neueste Firebase Auth-Version verwenden, d. H.

implementierung 'com.google.firebase: firebase-auth: 18.1.0'

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 aus dem Firebase-Hilfsprogramm verwendet habe, konnte es jedoch beheben, als ich auf 18.1.0 aktualisiert habe.

0
SilverArrow

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. Weitere Infos hier .

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

Ich hatte das gleiche Problem und löste dieses Problem, indem ich die fireabseStorage-Version genauso änderte wie die Firebase-Datenbankversion

 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'

zu

 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

Wenn Sie Xamarin.Forms verwenden, sollten Sie Folgendes überprüfen: Klasse "com.google.firebase.provider.FirebaseInitProvider" wurde nicht gefunden? Dies erfasst das Problem mit dem Dex-Fehler in Google Firebase beim Start (zu diesem Zeitpunkt ungelöst).

Ich habe kurzfristig auf die Verwendung von No Shrinking zurückgegriffen und beabsichtige, ProGuard zu verwenden, bis R8 stabiler ist.

0
Devology Ltd