Tidak dapat memperoleh penyedia com.google.firebase.provider.FirebaseInitProvider

160

Saya sedang menguji alat Crash baru: https://firebase.google.com/docs/crash/

Setelah melalui langkah-langkah, aplikasi meluncurkan dan crash mengatakan:

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
Makarse
sumber
1
Apakah Anda memiliki applicationID di build.gradle Anda?
Ian Barber
1
@IanBarber: Oh wow, saat mengedit build.gradle saya menghapusnya. Salahku.
Macarse
hanya stackoverflow.com/a/38224316/4663544 bekerja untuk saya
Jeba Ra
8
Coba Android studio> Build>Clean Project
Ujjwal Singh
Saya memperbaikinya dengan membuat kelas aplikasi saya memperluas MultiDexApplication ketika multiDexEnabled benar di defaultConfig standar aplikasi.
Herman

Jawaban:

145

1.

Tambahkan applicationId ke build.gradle aplikasi:

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

Dan daripada Clean Project -> Build atau Rebuild Project


2. Jika minSdkVersion Anda <= 20 ( https://developer.android.com/studio/build/multidex )

Gunakan Multidex dengan benar.

build.gradle aplikasi

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

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

manifes.xml

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

3.

Jika Anda menggunakan kelas Aplikasi khusus

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

manifes.xml

<application
    ...
    android:name="com.example.my.app.MyApplication" >
    ...
norbDEV
sumber
1
Saya mendapatkan kesalahan yang sama dan telah diperbaiki oleh solusinya. Saya tidak tahu mengapa, tetapi itu berhasil.
FUJI Goro
Ini menyelamatkan hari bagi saya. Mendapat kesalahan saat saya mencoba menjalankan aplikasi Cordova ke perangkat android.
manosim
1
Saya memiliki masalah yang sama dan applicationId di build.gradle saya. Apa yang bisa saya lakukan dalam kasus itu?
Maria Mercedes Wyss Alvarez
@ekonstantinidis Bagaimana Anda memperbaikinya untuk aplikasi cordova Anda? Bisakah itu ditambahkan ke konfigurasi di suatu tempat yang menambahkannya dengan benar ketika build.gradle dibuat? (Selama cordova platform add android)?
Zach
@ Zak, kurasa tidak. Saya menambahkannya setelah saya berlari cordova platform add android. Saya kira itu akan diperbaiki setelah cordova diperbarui? Ps. Saya tidak menggunakan Firebase sama sekali.
manosim
93

Saya dengan masalah yang sama pada perangkat dengan SDK <22, tetapi bagi saya alasannya adalah MultiDex, MultiDex.installharus dalam attachBaseContextmetode.

Jika Anda menggunakan MultiDex, coba ini:

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
sumber
4
Ini berfungsi, tetapi ada kelas khusus untuk melakukan itu alih-alih menimpa satu fungsi dan itu disebut MultiDexApplication, lihat jawaban di bawah stackoverflow.com/questions/37312103/…
GregoryK
Ya itu bekerja untuk saya juga, saya selalu menulis MultiDex.install (ini) di dalam metode onCreate () terima kasih Bung
dara
dalam kasus saya, saya baru saja memperbarui kompilasi 'com.android.support:multidex:1.0.1' untuk versi terakhir yang tersedia
Aleksey Timoshchenko
Ini harus menjadi jawaban yang diterima. Saya mencoba semua jawaban lain dan mengikuti panduan Google dan Firebase tetapi ini adalah yang benar, Anda pria yang luar biasa!
blueware
Terima kasih, bagaimana Anda bisa menemukannya? tapi pertanyaan saya adalah aplikasi baris kode saya tidak lebih dari 65000 mengapa saya harus menggunakannya multudex dan mengapa saya bekerja pada SDK> 22 dan itu tidak bekerja pada SDK <22
milad salimi
75

Jawaban yang diterima tidak menyelesaikan masalah saya.

Jika Anda menggunakan Multidex, Aplikasi Anda harus meluas MultiDexApplicationbukan 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"
      ...
      />

Semoga ini bisa membantu.

Ye Min Htut
sumber
Bekerja dengan sempurna! Terima kasih banyak :)
Solution Spirit
3
Bagaimana kamu tahu hal-hal ini ?? Siapa yang memberitahumu??? Saya baru mulai mengalami masalah ini setelah memperbarui ke Android Studio 3 dan menginstal aplikasi "debug". Versi "Release" bekerja dengan baik. Sekarang, dengan solusi Anda juga berfungsi versi "Debug". Saya sangat senang orang-orang seperti Anda ada !!
Ton
Itu jawaban sempurna
androidXP
Dalam semua jawaban ini, tidak ada yang benar-benar menjelaskan apa yang sebenarnya dilakukan dengan menambahkan multidex untuk menyelesaikan masalah (hal yang membingungkan untuk dilakukan dalam menghadapi masalah seperti itu)
Aditya Anand
36

Jika Anda mendapatkan masalah yang sama tetapi sudah applicationIdmengaturnya build.gradle, Anda juga dapat mencoba yang berikut:

  • di Android Studio: Build>Clean Project
  • di IDE lain: Bersihkan, Rebuild, apa pun ...
Barthy
sumber
3
Dan jika Anda masih memiliki masalah, hapus direktori build dan coba lagi. Saya terjebak sampai saya melakukan itu :)
Laurence Moroney
Hanya menghapus builddirektori yang berfungsi untuk saya. Sepertinya itu kacau oleh tarikan terakhir saya dari repo.
Sevastyan Savanyuk
17

Saya memiliki masalah yang sama di perangkat Pre Lollipop. Untuk menyelesaikannya saya lakukan sebagai berikut. Sementara saya menggunakan multiDex dalam proyek ini.

1. tambahkan ini untuk build.gradle di module: app

multiDexEnabled = true

dexOptions {
    javaMaxHeapSize "4g"
}

2. tambahkan ketergantungan ini

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

3.Kemudian di Aplikasi Utama

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. Dalam file manifes

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

Ini bekerja untuk saya. Semoga ini Membantu Anda juga :)

thilina Kj
sumber
4
Anda seharusnya tidak melakukan ketiga pekerjaan (perpanjang MultiDexApplication, terapkan attacheBaseContext dan ubah file menifest) untuk mengaktifkan multidex hanya satu yang cukup: D. developer.android.com/studio/build/multidex.html
Hossein Shahdoost
Jika minSdk Anda 21 atau lebih tinggi, Anda tidak harus melakukan semua ini karena dokumen mengatakan sudah diaktifkan secara default. Namun, masalah ini datang untuk saya dengan minSdk = 21, ada solusi untuk ini?
Aditya Anand
15

kamu harus yakin

untuk menambahkan baris ini di manifes Anda

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
sumber
Bekerja untuk saya juga bersama dengan multiDexEnabled true
ashishdhiman2007
7

Jangan sertakan pustaka seluruh layanan play tetapi gunakan yang Anda butuhkan. Ganti baris di build.gradle Anda :

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

dengan yang sesuai dari Google Play Services APIs , seperti misalnya:

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

Tambahkan ini ke build.gradle tingkat modul Anda:

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

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

Jika Anda mengesampingkan Applicationkelas maka perluas dari MultiDexApplication:

YourApplicationClass extends MultiDexApplication

Jika Anda tidak dapat memperluasnya dari MultiDexApplicationkelas maka timpa attachBaseContext()metode sebagai berikut:

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

Dan jangan menjalankan apa pun sebelumnya MultiDex.install(this) dieksekusi.

Jika Anda tidak mengganti Applicationkelas, cukup edit file manifes Anda sebagai berikut:

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

Ini seharusnya bekerja:

Langkah 1:

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

Langkah 2:

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

Langkah 3: Ambil kelas lain

public class MyApplication extends MultiDexApplication {
}

Langkah 4: Tambahkan baris ini pada manifes

<application
    android:name="android.support.multidex.MultiDexApplication">
</application>
Soumen Das
sumber
2

Dalam kasus saya, masalahnya diselesaikan dengan menambahkan baris ini ke modul build.gradle:

// Tambahkan INI DI BAWAH INI

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

Sumber

Borja
sumber
Saya mendapat "Plugin dengan id 'com.google.gms.play-services' tidak ditemukan."
kaleemsagard
@kaleemsagard meletakkan ini di proyek Andabuild.gradle dependencies { classpath 'com.google.gms:google-services:3.0.0' }
Borja
1

Dalam kasus saya, masalah terjadi setelah kami bermigrasi ke AndroidX. Untuk beberapa alasan, aplikasi memanggil MultiDex.install () dengan refleksi:

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

Saya mengubah paket dari android.support.multidex.MultiDexmenjadi androidx.multidex.MultiDex. Itu berhasil.

cgr
sumber
0

Alih-alih menambahkan secara manual nama paket pada build.gradle , Anda dapat melakukannya dengan cara ini:

pertama-tama tambahkan baris ini di awal

import java.util.regex.Pattern

Kemudian tambahkan ini pada konfigurasi default

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

Dan akhirnya tambahkan metode 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)
}

Karena ada banyak komentar Cordova pada jawabannya, jika Anda bekerja dengan Cordova, Anda tidak harus benar-benar mengedit build.gradlesendiri, komentar di awal yang mengatakan

// FILE GENERASI! JANGAN diedit!

Jadi, jika Anda menggunakan Cordova, hal terbaik yang dapat Anda lakukan adalah memperbarui ke cordova-android 5.1.0 atau lebih tinggi di mana perubahan ini sudah ada.

jcesarmobile
sumber
0

Milik saya karena Firebase SDK dalam file Gradle disetel ke versi nomor yang salah.

Saya menghapus utang Firebase dari Gradle dan menginstalnya kembali menggunakan Firebase Assistant

Suhaib
sumber
0

Buka pengaturan android studio (dengan menekan Ctrl+Alt+Sdi windows), cari Instant Rundan hapus centang Enable Instant Run.

Dengan menonaktifkan Instant Rundan menjalankan aplikasi Anda lagi, masalah akan teratasi.

VSB
sumber
0

Untuk aplikasi asli reaksi, kesalahannya java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" adalah Hanya untuk perangkat dengan Versi Android <~ 4.4

Dipecahkan dengan hanya mengganti Applicationdi MainApplication.javadenganMultiDexApplication

CATATAN: import android.support.multidex.MultiDexApplication;

Malith
sumber
0

Saya menambahkan kode berikut dalam file proguard.

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

dan itu berhasil dalam kasus saya.

Ananta Prasad
sumber
0

dalam kasus saya, saya lupa menambahkan (atau menghapus secara tidak sengaja) inti firebase di build gradle

implementation 'com.google.firebase:firebase-core:xx.x.x'
Alexa289
sumber
1
3 bulan telah berlalu dan ini sekarang sudah usang: JANGAN TAMBAH INI! Source = firebase.google.com/support/release-notes/android (Wajib: Terima kasih Google)
Aditya Anand
0

Saya mendapatkan kesalahan ini hanya pada perangkat dengan API lebih rendah dari 21. Dalam kasus saya, saya harus bekerja dengan proyek di mana multiDexEnabledopsi di build.gradlesudah diatur ke true. Saya memeriksa file dex dari APK dan referensi metode nomor kurang dari 64k, jadi proyek tidak perlu multidex, oleh karena itu saya mengatur multiDexEnableduntuk false. Solusi ini berhasil untuk saya.

CristianBanan
sumber