Sağlayıcı com.google.firebase.provider.FirebaseInitProvider alınamıyor


160

Yeni Crash aracını test ediyorum: https://firebase.google.com/docs/crash/

Adımlardan geçtikten sonra, uygulama başlatılır ve şunları söyleyerek kilitlenir:

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
Build.gradle dosyasında bir applicationID var mı?
Ian Barber

1
@IanBarber: Oh vay, build.gradle düzenlerken kaldırdım. Benim hatam.
Macarse

only stackoverflow.com/a/38224316/4663544 benim için çalıştı
Jeba Ra

8
Deneyin Android studio> Build>Clean Project
Ujjwal Singh

Ben app sınıf kademeli defaultConfig multiDexEnabled doğru olduğunda benim uygulama sınıfı MultiDexApplication genişletmek yaparak düzeltildi.
Herman

Yanıtlar:


145

1.

Ekle applicationID uygulamanın build.gradle için:

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

Ve Temiz Proje -> Proje Oluştur veya Yeniden Oluştur


2. minSdkVersion değeriniz <= 20 ise ( https://developer.android.com/studio/build/multidex )

Multidex'i doğru kullanın.

uygulamanın build.gradle

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

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

manifest.xml

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

3.

Özel bir Uygulama sınıfı kullanıyorsanız

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
Aynı hatayı aldım ve çözüm tarafından düzeltildi. Nedenini bilmiyorum, ama işe yarıyor.
FUJI Goro

Bu benim için günü kurtardı. Bir android cihaza bir Cordova uygulaması çalıştırmaya çalışırken hatayla karşılaştım.
manosim

1
Ben aynı sorun ve benim build.gradle üzerinde applicationId var. Bu durumda ne yapabilirim?
Maria Mercedes Wyss Alvarez

@ekonstantinidis Cordova uygulamanız için nasıl düzelttiniz? Build.gradle oluşturulduğunda doğru şekilde ekleyen bir yere bir yapılandırmaya eklenebilir mi? (Sırasında cordova platform add android)?
Zach

@Zach Ben öyle düşünmüyorum. Koştuktan sonra ekledim cordova platform add android. Sanırım cordova güncellendiğinde sabit olacak? Ps. Firebase'i hiç kullanmıyorum.
manosim

93

SDK <22 olan cihazlarda da aynı sorunla karşılaştım, ancak benim için neden MultiDex, yöntemde MultiDex.installolmalı attachBaseContext.

MultiDex kullanıyorsanız şunu deneyin:

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 

    }
}

Uygulamanın / 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
Çalışıyor, ancak bir işlevi geçersiz kılmak yerine bunu yapmak için özel bir sınıf var ve buna MultiDexApplication deniyor, aşağıdaki cevaba bakın stackoverflow.com/questions/37312103/…
GregoryK

Evet, benim için de çalıştı, her zaman MultiCex.install (this) onCreate () yönteminin içine yazıyorum teşekkürler dude
dara

benim durumumda sadece güncellemek için 'com.android.support:multidex:1.0.1' derlemek son sürümü
Aleksey Timoshchenko

Bu kabul edilen cevap olmalı. Diğer tüm cevapları denedim ve Google ve Firebase rehberlerini takip ediyordum ama bu doğru olanı, harika bir adamsın!
blueware

Teşekkürler, nasıl buldun? ama benim sorum benim kod satırları app neden multudex kullanmalıyım ve neden sdk> 22 üzerinde çalışmak ve sdk <22 üzerinde çalışmıyor 65.000 'den fazla değil
Haziran'da milad salimi

75

Kabul edilen cevap sorunumu çözmedi.

Multidex kullanıyorsanız, Uygulamanız MultiDexApplicationyerine genişletilmelidir 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"
      ...
      />

Umarım yardımcı olur.


Mükemmel çalıştı! Çok teşekkürler :)
Çözüm Ruhu

3
Bunları nasıl biliyorsun ?? Sana kim söyledi??? Android Studio 3'e güncelledikten ve "hata ayıklama" uygulamalarını yükledikten sonra bu sorunu yaşamaya başladım. "Release" sürümü iyi çalıştı. Şimdi, çözüm ile de "Debug" sürümü çalışır. Senin gibi insanlar çok mutluyum !!
Ton

Bu mükemmel cevap
androidXP

Tüm bu cevaplarda, hiçbiri aslında multidex eklemenin sorunu çözmek için gerçekte ne yaptığını açıklamıyor (böyle bir sorunun karşısında şaşırtıcı derecede rastgele bir şey)
Aditya Anand

36

Aynı sorunu alıyorsanız, ancak önceden applicationIdayarlanmışsa build.gradle, aşağıdakileri de deneyebilirsiniz:

  • Android Studio'da: Build>Clean Project
  • diğer IDE'lerde: Temiz, Yeniden oluştur, her neyse ...

3
Sorun yaşamaya devam ediyorsanız derleme dizinini silin ve tekrar deneyin. Bunu yapana kadar sıkışmıştım :)
Laurence Moroney

Yalnızca builddizini silmek benim için çalıştı. Depodan son çektiğimde berbat olmuş gibi görünüyor.
Sevastyan Savanyuk

17

Pre Lollipop cihazlarında da aynı sorunu yaşadım. Bunu çözmek için aşağıdaki gibi yaptım. Bu arada projede multiDex kullanıyordum.

1. modülde build.gradle için ekleyin: app

multiDexEnabled = true

dexOptions {
    javaMaxHeapSize "4g"
}

2. bu bağımlılığı ekleyin

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

3. daha sonra ana uygulamada

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. manifests dosyasında

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

Bu benim için çalışıyor. Umarım bu da size yardımcı olur :)


4
Multidex'i etkinleştirmek için yalnızca bir iş yeterlidir: D. developer.android.com/studio/build/multidex.html
Hossein Shahdoost

MinSdk'niz 21 veya daha yüksekse, dokümanlar varsayılan olarak zaten etkin olduğunu söylediği için bunların hiçbirini yapmanız gerekmez. Ve yine de, bu sorun benim için minSdk = 21 ile geliyor, bunun için herhangi bir çözüm var mı?
Aditya Anand


7

Bütün oyun hizmetleri kütüphane yer ancak çizgiyi need.Replace Şunu kullanmayın Do build.gradle :

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

Google Play Hizmetleri API'larından uygun olanla , örneğin:

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

7

Bunu modül düzeyindeki build.gradle'ınıza ekleyin:

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

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

ApplicationSınıfı geçersiz kılarsanız, aşağıdakilerden genişletin MultiDexApplication:

YourApplicationClass extends MultiDexApplication

Sınıftan genişletemiyorsanız yöntemi aşağıdaki gibi MultiDexApplicationgeçersiz kılın attachBaseContext():

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

Ve daha önce herhangi bir şey yapma MultiDex.install(this).

ApplicationSınıfı geçersiz kılmazsanız, manifest dosyanızı aşağıdaki gibi düzenleyin:

<?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

Bu işe yarar:

Aşama 1:

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

Adım 2:

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

3. Adım: Başka bir ders alın

public class MyApplication extends MultiDexApplication {
}

4. Adım: Bu satırı manifest'e ekleyin

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

2

Benim durumumda, build.gradle modülüne bu satırı ekleyerek sorun çözüldü:

// BUNA ALTIN ​​EKLE

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

Kaynak


"Com.google.gms.play-services" kimliğine sahip eklenti bulunamadı. "
kaleemsagard

@kaleemsagard bunu yout projesine koydubuild.gradle dependencies { classpath 'com.google.gms:google-services:3.0.0' }
Borja

1

Benim durumumda, sorun AndroidX'e taşındıktan sonra oldu. Nedense, uygulama yansıması ile MultiDex.install () çağırıyordu:

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

Paketi olarak android.support.multidex.MultiDexolarak değiştirdim androidx.multidex.MultiDex. İşe yaradı.


0

Paket adını manuel olarak build.gradle şu şekilde yapabilirsiniz:

ilk önce bu satırı başlangıçta ekleyin

import java.util.regex.Pattern

Sonra bunu defaultConfig dosyasına ekleyin

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

Ve son olarak doExtractStringFromManifest yöntemini ekleyin

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

Cevabın üzerinde çok sayıda Cordova yorumu olduğu için, Cordova ile çalışıyorsanız, build.gradlekendinizi gerçekten düzenlememelisiniz , başlangıçta bir yorum var.

// OLUŞTURULAN DOSYA! DEĞİŞTİRME!

Yani, bir Cordova kullanıyorsanız, yapabileceğiniz en iyi şey, bu değişikliklerin mevcut olduğu yerlerde cordova-android 5.1.0 veya daha üst bir sürüme güncellemektir.


0

Benimki, Graeb dosyasındaki Firebase SDK'sının yanlış sayı sürümüne ayarlanmış olmasıydı.

Firebase debs'i Gradle'dan kaldırdım ve kullanarak tekrar yükledim Firebase Assistant


0

Android stüdyo ayarına gidin ( Ctrl+Alt+Spencerelere basarak ), arayın Instant Runve işaretini kaldırınEnable Instant Run .

Instant RunUygulamanızı devre dışı bırakarak ve çalıştırarak sorun çözülecektir.


0

Yerel uygulama reaksiyonu için hata java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" yalnızca Android Sürümü <~ 4.4 olan cihazlar için alınıyordu

Sadece değiştirerek bunu çözüldü ApplicationiçindeMainApplication.java olanMultiDexApplication

NOT: import android.support.multidex.MultiDexApplication;


0

Proguard dosyasına aşağıdaki kodu ekledim.

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

ve benim durumumda çalıştı.



0

Bu hatayı sadece 21'den daha düşük API'lı cihazlarda aldım. Benim durumumda, multiDexEnabledseçeneği build.gradlezaten ayarlanmış bir proje ile çalışmak zorunda kaldım true. Proje multidex biri olmak gerekmez bu nedenle belirlediğim, ben APK'nızdan dex dosyasını kontrol ve başvurulan yöntemler sayı az 64k daha oldu multiDexEnablediçin false. Bu çözüm benim için çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.