Der Anbieter com.google.firebase.provider.FirebaseInitProvider kann nicht abgerufen werden


160

Ich teste das neue Crash-Tool: https://firebase.google.com/docs/crash/

Nachdem Sie die Schritte ausgeführt haben, wird die App gestartet und stürzt ab und sagt:

05-18 17:28:18.870 28743 28743 E AndroidRuntime: java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.IllegalStateException: Incorrect provider authority in manifest. Most likely due to a missing applicationId variable in application's build.gradle.
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.installProvider(ActivityThread.java:5156)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4748)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.-wrap1(ActivityThread.java)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:102)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:148)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:5417)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: Caused by: java.lang.IllegalStateException: Incorrect provider authority in manifest. Most likely due to a missing applicationId variable in application's build.gradle.
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at com.google.firebase.provider.FirebaseInitProvider.zza(Unknown Source)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.installProvider(ActivityThread.java:5153)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    ... 10 more

1
Haben Sie eine Anwendungs-ID in Ihrem build.gradle?
Ian Barber

1
@ IanBarber: Oh wow, während ich build.gradle bearbeite, habe ich es entfernt. Mein Fehler.
Macarse


8
Versuchen Android studio> Build>Clean Project
Ujjwal Singh

Ich habe das Problem behoben, indem meine Anwendungsklasse MultiDexApplication erweitert hat, wenn multiDexEnabled in graddle defaultConfig der App wahr ist.
Herman

Antworten:


145

1.

Fügen Sie die applicationId zum build.gradle der Anwendung hinzu:

android {
    ...
    defaultConfig {
        applicationId "com.example.my.app"
        ...
    }
}

Und dann Projekt bereinigen -> Projekt erstellen oder neu erstellen


2. Wenn Ihre minSdkVersion <= 20 ist ( https://developer.android.com/studio/build/multidex )

Verwenden Sie Multidex richtig.

build.gradle der Anwendung

android {
...               
    defaultConfig {
    ....
        multiDexEnabled true
    }
    ...
}

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

manifest.xml

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

3.

Wenn Sie eine benutzerdefinierte Anwendungsklasse verwenden

public class MyApplication extends MultiDexApplication {
    @Override
    protected void attachBaseContext(Context context) {
        super.attachBaseContext(context);
        MultiDex.install(this);
    }
}

manifest.xml

<application
    ...
    android:name="com.example.my.app.MyApplication" >
    ...

1
Ich habe den gleichen Fehler erhalten und er wurde durch die Lösung behoben. Ich weiß nicht warum, aber es funktioniert.
FUJI Goro

Das hat mir den Tag gerettet. Ich habe den Fehler erhalten, als ich versucht habe, eine Cordova-App auf einem Android-Gerät auszuführen.
Manosim

1
Ich habe das gleiche Problem und die applicationId auf meinem build.gradle. Was kann ich in diesem Fall tun?
Maria Mercedes Wyss Alvarez

@ekonstantinidis Wie haben Sie das Problem für Ihre Cordova-App behoben? Kann es irgendwo zu einer Konfiguration hinzugefügt werden, die es beim Generieren von build.gradle korrekt hinzufügt? (Während cordova platform add android)?
Zach

@ Zach Ich glaube nicht. Ich habe es hinzugefügt, nachdem ich gelaufen bin cordova platform add android. Ich denke, es wird behoben, sobald Cordova aktualisiert wird? Ps. Ich benutze Firebase überhaupt nicht.
Manosim

93

Ich hatte das gleiche Problem bei Geräten mit SDK <22, aber für mich ist der Grund der MultiDex, der MultiDex.installin der attachBaseContextMethode sein muss.

Wenn Sie MultiDex verwenden, versuchen Sie Folgendes:

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 

    }
}

app / build.gradle:

android {

    compileSdkVersion 24
    buildToolsVersion "24.0.2"

    defaultConfig {
        applicationId "com.test.app"
        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        multiDexEnabled true

    }

    dexOptions {
        javaMaxHeapSize "4g"
    }

....
}

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

        compile 'com.android.support:appcompat-v7:24.2.1'
        ...
        compile 'com.google.firebase:firebase-messaging:9.6.1'
        compile 'com.google.android.gms:play-services:9.6.1'
        compile 'com.android.support:multidex:1.0.1'

    }
...

4
Es funktioniert, aber es gibt eine spezielle Klasse, die dies tut, anstatt eine Funktion zu überschreiben. Sie heißt MultiDexApplication. Siehe Antwort unten stackoverflow.com/questions/37312103/…
GregoryK

Ja, es hat auch bei mir funktioniert, ich schreibe immer MultiDex.install (this) in der onCreate () -Methode, danke Kumpel
dara

In meinem Fall habe ich gerade die Kompilierung 'com.android.support:multidex:1.0.1' auf die letzte verfügbare Version aktualisiert
Aleksey Timoshchenko

Dies sollte die akzeptierte Antwort sein. Ich habe alle anderen Antworten ausprobiert und bin den Google- und Firebase-Anleitungen gefolgt, aber dies ist die richtige, du bist ein großartiger Mann!
Blueware

Danke, wie kannst du es finden? Aber meine Frage ist, dass meine Codezeilen-App nicht höher als 65000 ist, warum ich sie als Multudex verwenden sollte und warum ich an SDK> 22 arbeite und sie nicht an SDK <22
Milad Salimi

75

Die akzeptierte Antwort hat mein Problem nicht gelöst.

Wenn Sie Multidex verwenden, sollte Ihre Anwendung MultiDexApplicationanstelle von erweitert werden Application.

MyApplication.java

public class MyApplication extends MultiDexApplication{
     ...
}

AndroidManifest.xml

<application
      android:name="your.package.name.MyApplication"
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      ...
      />

Ich hoffe es hilft.


Hat perfekt funktioniert! Vielen Dank :)
Solution Spirit

3
Woher weißt du diese Dinge? Wer hat Ihnen gesagt??? Ich hatte gerade dieses Problem, nachdem ich auf Android Studio 3 aktualisiert und "Debug" -Apps installiert hatte. Die "Release" -Version hat gut funktioniert. Jetzt funktioniert mit Ihrer Lösung auch die "Debug" -Version. Ich bin so glücklich, dass es Menschen wie dich gibt !!
Ton

Das ist die perfekte Antwort
androidXP

In all diesen Antworten erklärt keiner wirklich, was das Hinzufügen von Multidex tatsächlich bewirkt, um das Problem zu lösen (eine verwirrend zufällige Sache, die angesichts eines solchen Problems zu tun ist)
Aditya Anand,

36

Wenn Sie das gleiche Problem haben, aber das applicationIdSet bereits installiert haben build.gradle, können Sie auch Folgendes versuchen:

  • in Android Studio: Build>Clean Project
  • in anderen IDEs: Reinigen, neu erstellen, was auch immer ...

3
Wenn Sie weiterhin Probleme haben, löschen Sie das Build-Verzeichnis und versuchen Sie es erneut. Ich steckte fest, bis ich das tat :)
Laurence Moroney

Nur das Löschen eines buildVerzeichnisses hat bei mir funktioniert. Scheint, als wäre es durch meinen letzten Zug aus dem Repo durcheinander gebracht worden.
Sevastyan Savanyuk

17

Ich hatte das gleiche Problem bei Pre Lollipop-Geräten. Um das zu lösen, habe ich Folgendes getan. In der Zwischenzeit habe ich multiDex im Projekt verwendet.

1. Fügen Sie dies für build.gradle in module: app hinzu

multiDexEnabled = true

dexOptions {
    javaMaxHeapSize "4g"
}

2. Fügen Sie diese Abhängigkeit hinzu

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

3. Dann in der Hauptanwendung

public class MainApplication extends MultiDexApplication {

private static MainApplication mainApplication;

@Override
public void onCreate() {
    super.onCreate();
    mainApplication = this;
}

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


public static synchronized MainApplication getInstance() {
    return mainApplication;
}
}

4.In der Manifestdatei

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

Das funktioniert bei mir. Hoffe das hilft dir auch :)


4
Sie sollten nicht alle drei Jobs ausführen (MultiDexApplication erweitern, attacheBaseContext implementieren und die Menifest-Datei ändern), damit Multidex aktiviert wird. Nur einer reicht aus: D. developer.android.com/studio/build/multidex.html
Hossein Shahdoost

Wenn Ihr minSdk 21 oder höher ist, sollten Sie dies nicht tun müssen, da in den Dokumenten angegeben ist, dass es standardmäßig bereits aktiviert ist. Und doch kommt dieses Problem für mich mit minSdk = 21, irgendwelche Lösungen dafür?
Aditya Anand

15

du solltest dir sicher sein

um diese Zeile in Ihrem Manifest hinzuzufügen

https://developer.android.com/studio/run/index.html#instant-run

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>

Arbeitete auch für mich zusammen mit multiDexEnabled true
ashishdhiman2007

7

Schließen Sie nicht die gesamte Play Services-Bibliothek ein, sondern verwenden Sie die benötigte. Ersetzen Sie die Zeile in Ihrem build.gradle :

compile 'com.google.android.gms:play-services:9.6.1'

mit der entsprechenden API von Google Play Services , wie zum Beispiel:

compile 'com.google.android.gms:play-services-gcm:9.6.1'

7

Fügen Sie dies Ihrem build.gradle auf Modulebene hinzu:

android {               
defaultConfig {
    ....
    multiDexEnabled true
}
...
}

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

Wenn Sie die ApplicationKlasse überschreiben , erweitern Sie sie von MultiDexApplication:

YourApplicationClass extends MultiDexApplication

Wenn Sie es nicht von der MultiDexApplicationKlasse aus erweitern können, überschreiben Sie die attachBaseContext()Methode wie folgt:

protected void attachBaseContext(Context base) {
     super.attachBaseContext(context);
     Multidex.install(this);
  }

Und führen Sie nichts aus, bevor MultiDex.install(this)es ausgeführt wird.

Wenn Sie die ApplicationKlasse nicht überschreiben, bearbeiten Sie Ihre Manifestdatei einfach wie folgt:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    .......>
     <application
         ......
            android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
    ......
</manifest>

3

Das sollte funktionieren:

Schritt 1:

defaultConfig {
    applicationId "service.ingreens.com.gpsautoon"
    minSdkVersion 17
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

Schritt 2:

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

Schritt 3: Nehmen Sie an einer anderen Klasse teil

public class MyApplication extends MultiDexApplication {
}

Schritt 4: Fügen Sie diese Zeile im Manifest hinzu

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

2

In meinem Fall wurde das Problem durch Hinzufügen dieser Zeile zum Modul build.gradle gelöst:

// HINZUFÜGEN

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

Quelle


Ich habe "Plugin mit der ID 'com.google.gms.play-services' nicht gefunden."
Kaleemsagard

@ kaleemsagard legte dies in Ihr Projektbuild.gradle dependencies { classpath 'com.google.gms:google-services:3.0.0' }
Borja

1

In meinem Fall trat das Problem nach der Migration auf AndroidX auf. Aus irgendeinem Grund rief die App MultiDex.install () mit Reflexion auf:

    final Class<?> clazz = Class.forName("android.support.multidex.MultiDex");
    final Method method = clazz.getDeclaredMethod("install", Context.class);
    method.invoke(null, this);

Ich habe das Paket von android.support.multidex.MultiDexauf geändert androidx.multidex.MultiDex. Es funktionierte.


0

Anstatt den Paketnamen manuell auf dem hinzuzufügen build.gradle, können Sie dies folgendermaßen tun:

Fügen Sie diese Zeile zuerst am Anfang hinzu

import java.util.regex.Pattern

Fügen Sie dies dann in der defaultConfig hinzu

android {
    ...
    defaultConfig {
        ...
        applicationId = doExtractStringFromManifest("package")
        ...
    }
    ...
}

Fügen Sie abschließend die Methode doExtractStringFromManifest hinzu

def doExtractStringFromManifest(name) {
     def manifestFile = file(android.sourceSets.main.manifest.srcFile)
     def pattern = Pattern.compile(name + "=\"(\\S+)\"")
     def matcher = pattern.matcher(manifestFile.getText())
     matcher.find()
     return matcher.group(1)
}

Da es viele Cordova-Kommentare zu der Antwort gibt, sollten Sie, wenn Sie mit Cordova arbeiten, diese nicht wirklich selbst bearbeiten build.gradle, da sie am Anfang einen Kommentar enthält, der besagt

// GENERIERTE DATEI! NICHT BEARBEITEN!

Wenn Sie also eine Cordova verwenden, können Sie am besten auf Cordova-Android 5.1.0 oder höher aktualisieren, wenn diese Änderungen bereits vorhanden sind.


0

Meins war, weil das Firebase SDK in der Gradle-Datei auf eine falsche Nummernversion eingestellt war.

Ich habe die Firebase-Debs von Gradle entfernt und sie mit erneut installiert Firebase Assistant


0

Gehen Sie zur Android Studio-Einstellung (durch Drücken Ctrl+Alt+Sin Windows), suchen Sie nach Instant Runund deaktivieren Sie Enable Instant Run.

Durch Deaktivieren Instant Runund erneutes Ausführen Ihrer Anwendung wird das Problem behoben.


0

Für die reaktionsfähige native App war der Fehler, dass java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" sie nur für Geräte mit Android-Version <~ 4.4 angezeigt wurde

Gelöst es nur durch Austausch Applicationin MainApplication.javamitMultiDexApplication

HINWEIS: import android.support.multidex.MultiDexApplication;


0

Ich habe den folgenden Code in die Proguard-Datei eingefügt.

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application

und es hat in meinem Fall funktioniert.



0

Ich habe diesen Fehler nur auf Geräten mit einer API unter 21 erhalten. In meinem Fall musste ich mit einem Projekt arbeiten, für das multiDexEnabledOption in build.gradlebereits festgelegt war true. Ich habe dex - Datei von APK und referenzierten Methoden Zahl war weniger als 64k, so Projekt kein multidex man sein muss, damit ich festgelegt multiDexEnabledauf false. Diese Lösung hat bei mir funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.