Nie można uzyskać dostawcy com.google.firebase.provider.FirebaseInitProvider

160

Testuję nowe narzędzie Crash: https://firebase.google.com/docs/crash/

Po wykonaniu tych czynności aplikacja uruchamia się i ulega awarii, mówiąc:

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
Macarse
źródło
1
Czy masz identyfikator aplikacji w pliku build.gradle?
Ian Barber
1
@IanBarber: O rany, podczas edycji build.gradle usunąłem go. Mój błąd.
Macarse
tylko stackoverflow.com/a/38224316/4663544 pracował dla mnie
Jeba Ra
8
Spróbuj Android studio> Build>Clean Project
Ujjwal Singh
Naprawiłem to, rozszerzając klasę aplikacji MultiDexApplication, gdy multiDexEnabled ma wartość true w domyślnej konfiguracji graddle aplikacji.
Herman

Odpowiedzi:

145

1.

Dodaj applicationId do pliku build.gradle aplikacji:

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

A niż Clean Project -> Build or Rebuild Project


2. Jeśli Twoja minSdkVersion <= 20 ( https://developer.android.com/studio/build/multidex )

Używaj Multidex poprawnie.

plik build.gradle aplikacji

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

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

manifest.xml

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

3.

Jeśli używasz niestandardowej klasy Application

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" >
    ...
norbDEV
źródło
1
Otrzymałem ten sam błąd i został on naprawiony przez rozwiązanie. Nie wiem dlaczego, ale działa.
FUJI Goro
To uratowało mi dzień. Wystąpił błąd, gdy próbowałem uruchomić aplikację Cordova na urządzeniu z Androidem.
manosim
1
Mam ten sam problem i plik applicationId na moim build.gradle. Co mogę zrobić w takim przypadku?
Maria Mercedes Wyss Alvarez
@ekonstantinidis Jak to naprawiłeś w swojej aplikacji cordova? Czy można go dodać gdzieś do konfiguracji, która poprawnie dodaje ją podczas generowania build.gradle? (W trakcie cordova platform add android)?
Zach
@Zach, nie sądzę. Dodałem go po biegu cordova platform add android. Myślę, że zostanie to naprawione, gdy Cordova zostanie zaktualizowana? Ps. W ogóle nie używam Firebase.
manosim
93

Miałem ten sam problem w urządzeniach z SDK <22, ale dla mnie powodem jest MultiDex, MultiDex.installmusi być w attachBaseContextmetodzie.

Jeśli używasz MultiDex, spróbuj tego:

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'

    }
...
luizMello
źródło
4
Działa, ale istnieje specjalna klasa do tego zamiast zastępowania jednej funkcji i nazywa się MultiDexApplication, patrz odpowiedź poniżej stackoverflow.com/questions/37312103/ ...
GregoryK
Tak, u mnie też zadziałało, zawsze piszę MultiDex.install (this) w metodzie onCreate () dzięki stary
dara
w moim przypadku właśnie zaktualizowałem kompilację „com.android.support:multidex:1.0.1” do ostatniej dostępnej wersji
Aleksey Timoshchenko
To powinna być akceptowana odpowiedź. Wypróbowałem wszystkie inne odpowiedzi i postępowałem zgodnie z przewodnikami Google i Firebase, ale ta jest właściwa, jesteś niesamowity!
blueware
Dzięki, jak możesz to znaleźć? ale moje pytanie brzmi, że moja aplikacja linii kodu nie przekracza 65000, dlaczego powinienem jej używać multudex i dlaczego pracuję na sdk> 22 i nie działa na sdk <22
milad salimi
75

Zaakceptowana odpowiedź nie rozwiązała mojego problemu.

Jeśli używasz Multidex, Twoja aplikacja powinna rozszerzać się MultiDexApplicationzamiastApplication .

MyApplication.java

public class MyApplication extends MultiDexApplication{
     ...
}

AndroidManifest.xml

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

Mam nadzieję, że to pomoże.

Ye Min Htut
źródło
Działało idealnie! Wielkie dzięki :)
Solution Spirit
3
Skąd znasz te rzeczy? Kto ci powiedział??? Problem ten pojawił się po aktualizacji do Android Studio 3 i zainstalowaniu aplikacji do debugowania. Wersja „Release” działała dobrze. Teraz z Twoim rozwiązaniem działa również wersja „Debuguj”. Jestem tak szczęśliwy, że istnieją tacy ludzie jak ty !!
Ton
To doskonała odpowiedź
androidXP
We wszystkich tych odpowiedziach żadna z nich nie wyjaśnia, co faktycznie robi dodanie multidex, aby rozwiązać problem (zdumiewająco przypadkowa rzecz do zrobienia w obliczu takiego problemu)
Aditya Anand
36

Jeśli napotkasz ten sam problem, ale masz już applicationIdzestaw build.gradle, możesz również spróbować wykonać następujące czynności:

  • w Android Studio: Build>Clean Project
  • w innych IDE: Clean, Rebuild, cokolwiek ...
Barthy
źródło
3
Jeśli nadal masz problemy, usuń katalog kompilacji i spróbuj ponownie. Utknąłem, dopóki tego nie zrobiłem :)
Laurence Moroney
U buildmnie działało tylko usuwanie katalogu. Wygląda na to, że został zepsuty przez moje ostatnie wyciągnięcie z repozytorium.
Sevastyan Savanyuk
17

Miałem ten sam problem w urządzeniach Pre Lollipop. Aby to rozwiązać, zrobiłem w następujący sposób. W międzyczasie w projekcie korzystałem z multiDex.

1. dodaj to dla build.gradle w module: app

multiDexEnabled = true

dexOptions {
    javaMaxHeapSize "4g"
}

2. Dodaj tę zależność

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

3. Następnie w aplikacji MainApplication

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. w pliku manifestów

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

To działa dla mnie. Mam nadzieję, że to też ci pomoże :)

thilina Kj
źródło
4
Nie powinieneś wykonywać wszystkich trzech zadań (rozszerzyć MultiDexApplication, zaimplementować attacheBaseContext i zmienić plik menifest), aby włączyć multidex wystarczy tylko jedno: D. developer.android.com/studio/build/multidex.html
Hossein Shahdoost
Jeśli twój minSdk ma 21 lub więcej, nie powinieneś tego robić, ponieważ dokumentacja mówi, że jest już domyślnie włączony. A jednak ten problem przychodzi do mnie z minSdk = 21, jakieś rozwiązania?
Aditya Anand
15

powinieneś być pewien

aby dodać tę linię do swojego manifestu

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>
Juan Salamanca
źródło
Dla mnie też działał razem z multiDexEnabled true
ashishdhiman2007
7

Nie dołączaj całej biblioteki usług odtwarzania, ale użyj tej, której potrzebujesz. Wymień wiersz w pliku build.gradle :

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

odpowiednim z interfejsów API usług Google Play , na przykład:

compile 'com.google.android.gms:play-services-gcm:9.6.1'
Ayan
źródło
7

Dodaj to do build.gradle na poziomie modułu:

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

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

Jeśli przesłonisz Applicationklasę, rozszerz ją z MultiDexApplication:

YourApplicationClass extends MultiDexApplication

Jeśli nie możesz go rozszerzyć z MultiDexApplicationklasy, zastąp attachBaseContext()metodę w następujący sposób:

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

I nie uruchamiaj niczego wcześniej MultiDex.install(this) wykonaniem.

Jeśli nie zastąpisz Applicationklasy, po prostu edytuj plik manifestu w następujący sposób:

<?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>
Nurlan Sofiyev
źródło
3

To powinno działać:

Krok 1:

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

Krok 2:

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

Krok 3: Weź inne zajęcia

public class MyApplication extends MultiDexApplication {
}

Krok 4: Dodaj tę linię do manifestu

<application
    android:name="android.support.multidex.MultiDexApplication">
</application>
Soumen Das
źródło
2

W moim przypadku problem został rozwiązany poprzez dodanie tej linii do modułu build.gradle:

// DODAJ TO NA DOLE

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

Źródło

Borja
źródło
Pojawił się komunikat „Nie znaleziono wtyczki o identyfikatorze„ com.google.gms.play-services ””.
kaleemsagard
@kaleemsagard umieścił to w swoim projekciebuild.gradle dependencies { classpath 'com.google.gms:google-services:3.0.0' }
Borja
1

W moim przypadku problem pojawił się po migracji na AndroidX. Z jakiegoś powodu aplikacja wywoływała MultiDex.install () z odbiciem:

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

Zmieniłem pakiet z android.support.multidex.MultiDexna androidx.multidex.MultiDex. Zadziałało.

cgr
źródło
0

Zamiast ręcznie dodawać nazwę pakietu do build.gradle , możesz to zrobić w ten sposób:

najpierw dodaj tę linię na początku

import java.util.regex.Pattern

Następnie dodaj to do pliku defaultConfig

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

Na koniec dodaj metodę doExtractStringFromManifest

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)
}

Ponieważ jest wiele komentarzy Cordova do odpowiedzi, jeśli pracujesz z Cordovą, nie powinieneś tak naprawdę edytować build.gradlesiebie, ma komentarz na początku, który mówi

// WYGENEROWANY PLIK! NIE EDYTUJ!

Tak więc, jeśli używasz Cordova, najlepszą rzeczą, jaką możesz zrobić, jest aktualizacja do cordova-android 5.1.0 lub nowszego, gdzie te zmiany są już obecne.

jcesarmobile
źródło
0

Mój był taki, ponieważ pakiet SDK Firebase w pliku Gradle był ustawiony na nieprawidłową wersję numeryczną.

Usunąłem deby Firebase z Gradle i ponownie zainstalowałem je przy użyciu Firebase Assistant

Suhaib
źródło
0

Przejdź do ustawień studia Android (naciskając Ctrl+Alt+Sw systemie Windows), wyszukaj Instant Runi odznacz Enable Instant Run.

Po wyłączeniu Instant Runi ponownym uruchomieniu aplikacji problem zostanie rozwiązany.

VSB
źródło
0

W przypadku natywnej aplikacji React wystąpił błąd java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" pobierano ją tylko dla urządzeń z Androidem w wersji <~ 4.4

Rozwiązać go po prostu zastępując ApplicationwMainApplication.java zMultiDexApplication

UWAGA: import android.support.multidex.MultiDexApplication;

Malith
źródło
0

Dodałem następujący kod w pliku proguard.

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

i zadziałało w moim przypadku.

Ananta Prasad
źródło
0

w moim przypadku zapomniałem dodać (lub przypadkowo usunąć) rdzeń Firebase w build gradle

implementation 'com.google.firebase:firebase-core:xx.x.x'
Alexa289
źródło
1
Minęły 3 miesiące i jest to obecnie przestarzałe: NIE DODAJ TEGO! Źródło = firebase.google.com/support/release-notes/android (obowiązkowe: dzięki Google)
Aditya Anand
0

Mam ten błąd tylko na urządzeniach z API niższym niż 21. W moim przypadku musiałem pracować z projektem, w którym multiDexEnabledopcja build.gradlebyła już ustawiona na true. Sprawdziłem plik dex z APK i numer metod przywoływanych był mniejszy niż 64k, więc projekt nie musi być projektem multidex, dlatego ustawiłem multiDexEnabledna false. To rozwiązanie zadziałało dla mnie.

CristianBanan
źródło