Saya mendapatkan pengecualian di bawah saat peluncuran aplikasi.
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)
Berikut ini adalah build.gradle tingkat aplikasi
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'
Ini adalah build.gradle tingkat aplikasi saya
// 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
}
Bagaimana cara mengatasi masalah ini?
android:name="android.support.multidex.MultiDexApplication"
? Jika MultiDex dikonfigurasi dengan benar, Anda akan melihat pesan logcat selama aplikasi init seperti ini:I/MultiDex: install done
.Jawaban:
Saya memiliki kesalahan yang sama dan saya menyelesaikannya dengan MultiDex, seperti dijelaskan pada tautan ini: https://developer.android.com/studio/build/multidex.html
Terkadang tidak cukup hanya dengan mengaktifkan MultiDex.
FirebaseInitProvider diperlukan saat startup.
Jadi, Anda harus menentukan FirebaseInitProvider secara manual seperti yang diperlukan dalam file DEX utama.
file build.gradle
multidex-config.txt (dalam direktori yang sama dengan file build.gradle)
sumber
Application
kelas Anda diperluas dariMultiDexApplication()
. Ini tidak ada dalam kasus saya.Saya juga menghadapi masalah yang sama dan akhirnya menyelesaikannya dengan menonaktifkan
Instant Run
di studio android.Memperbarui:
Tidak ada opsi Instant Run yang tersedia di Android Studio 3.5+ terbaru. Seharusnya hanya berlaku untuk versi yang lebih lama.
sumber
Dalam file build.gradle (Module: app), masukkan kode di bawah ini ke defaultConfig:
dan masukkan ke dependensi:
Kemudian tambahkan kode ke manifes:
sumber
Saya memiliki masalah yang sama di (proyek pemutar YouTube) saya ... dan yang berikut memecahkan masalah untuk saya:
Tambahkan kode ini ke dalam
build.gradle
(modul: aplikasi) Anda di dalamdefaultConfing
:Tambahkan kode ini ke dalam
build.gradle
(modul: aplikasi) Anda di dalamdependencies
:Buka
AndroidManifest.xml
dan di dalamapplication
:atau jika Anda memiliki kelas Aplikasi, perluas dari MultiDexApplication seperti:
Dan akhirnya, saya pikir Anda harus mengunduh Android Support Repository , di Extras in SDK Manager .
sumber
Cukup timpa metode berikut di kelas aplikasi Anda.
sumber
android:name
barang - barang di ManifestJika minSdkVersion Anda diatur ke 21 atau lebih tinggi, yang perlu Anda lakukan adalah mengatur multiDexEnabled menjadi true dalam file build.gradle tingkat modul Anda, seperti yang ditunjukkan di sini:
Lain , jika minSdkVersion Anda diatur ke 20 atau lebih rendah, maka Anda harus menggunakan pustaka dukungan multidex sebagai berikut:
sumber
import android.content.Context;
danimport android.support.multidex.MultiDex;
Mengaktifkan
multidex
bukanlah solusi yang baik karenamultidex
memiliki penggunaan lain di android lihat jawaban ini apa itu multidexSolusinya adalah menonaktifkan menjalankan instan seperti yang dikatakan @Shylendra Madda
Saya pikir alasan masalah ini adalah ketika menjalankan instan diaktifkan, Android Studio tidak menempatkan perpustakaan seperti
firebase
menjadi apk yang dihasilkan untuk mengurangi waktu pembangunan proyek karenafirebase
perpustakaan dan perpustakaan lain sepertimaps
dan lainnya ada di layanan bermain dan layanan bermain diinstal pada perangkat android jadi jika menjalankan instan diaktifkan tidak perlu meletakkannya di apk yang dibuat untuk membuat waktu pembuatan lebih cepatJadi ketika Anda mengekstrak apk dan menginstalnya di perangkat lain, Anda akan melihat pengecualian ini
sumber
Saya juga menghadapi masalah yang sama setelah mencoba semua solusi. Saya menemukan solusi di bawah ini.
Jika Anda telah menerapkan aturan proguard kemudian tambahkan baris di bawah ini dalam Aturan ProGuard
dan itu memecahkan masalah saya.
sumber
-keep class com.google.firebase.provider.FirebaseInitProvider
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
Bagaimana cara mengaktifkannya tolong beri tahu saya pak1: Buka gradle enable multiDexEnabled dan tambahkan pustaka multidex di dependensi.
2: Buka file Manifest dan tulis android: name = ". MyApplication" (Nama kelas (MyApplication) adalah opsional, Anda dapat menulis apa pun yang Anda inginkan).
3: Ketika Anda menulis android: name = ". MyApplication" Di dalam Aplikasi di file Manifest. itu akan memberi Anda kesalahan karena Anda tidak membuat kelas MyApplication. Buat Kelas MyApplication memperpanjangnya dengan kelas "aplikasi" atau Cukup klik pada. Aplikasi saya, balon merah kecil muncul di sisi kiri dari sintaks klik di atasnya, Anda akan melihat (membuat kelas MyApplication) di menu, klik di atasnya dan Sertakan Metode di bawah ini Di dalam kelas itu.
Jika Anda ingin mendapatkan informasi lebih lanjut, lalu Klik Tautan ini: [ https://developer.android.com/studio/build/multidex.html]
Semoga berhasil untuk Anda.
sumber
Pertama tambahkan berikut ini ke build.gradle (Modul: app) ---->
Kemudian di file yang sama tambahkan berikut ini
Kemudian di AndroidManifest.xml tulis yang berikut ini
Itu dia. Ini pasti akan berhasil
sumber
Jika Anda menggunakan MultiDex di App Gradle Anda, maka ubah aplikasi extends untuk memperluas MultiDexApplication di kelas aplikasi Anda. Ini pasti akan berhasil
sumber
Saya memiliki masalah yang sama dan diselesaikan hanya menambahkan sepotong kode , Jika Anda mendapatkan masalah ini berarti Anda telah menyelesaikan semua langkah yang perlu menggunakan Firebase. Anda hanya perlu membuat kelas yang memperluas Aplikasi (kelas publik Application_CrashReport meluas Aplikasi) dan menambahkan kelas ini dalam file mainifest dan Di kelas itu cukup timpa metode di bawah ini
dan tambahkan MultiDex.install (ini); dalam metode itu berarti
Catatan : - Jangan lupa ikuti langkah-langkah di atas
sumber
Ini karena MultiDex.
Langkah-langkah untuk menyelesaikan:
Dalam gradle-> dependencies -> (compile'com.android.support: multidex: 1.0.1 ') Tambahkan ini dalam dependensi
Di kelas aplikasi proyek Anda memperluas MultiDexApplication seperti ini (kelas publik MyApplication memperluas MultiDexApplication)
Jalankan dan periksa
sumber
Ini agak terlambat bagi mereka yang datang, tetapi periksa aturan proguard Anda! Saya membuang banyak waktu untuk ini. Aturan proguard Anda bisa mengubah nama menjadi file firebase penting. Ini benar-benar hanya membuktikan masalah dalam produksi dan proses instan :)
proguard-rules.pro
sumber
Seperti disebutkan sebelumnya, ini adalah masalah dengan
multidex
: Anda harus menambahkan implementasi kebuild.gradle
danMainApplication.java
. Tetapi apa yang Anda tambahkan benar-benar tergantung pada apakah Anda mendukung AndroidX atau tidak. Inilah yang Anda butuhkan untuk menyelesaikan masalah ini:Masukkan baris kode ini ke
build.gradle
(android / app / build.gradle) Anda:Masukkan baris-baris ini ke
MainApplication.java
(android / app / src / main / java /.../ MainApplication.java) Anda:Masukkan baris kode ini ke
build.gradle
(android / app / build.gradle) Anda:Masukkan baris-baris ini ke
MainApplication.java
(android / app / src / main / java /.../ MainApplication.java) Anda:sumber
Anda harus memperpanjang kelas Aplikasi Anda dengan
MultiDexApplication
bukanApplication
.sumber
Masalah ini terjadi ketika saya beralih ke Android Studio 3.4 dengan plugin Android Gradle 3.4.0. yang bekerja dengan kompiler R8.
Plugin Android Gradle menyertakan file aturan ProGuard tambahan yang telah ditentukan, tetapi Anda disarankan untuk menggunakan proguard-android-optim.txt . Info lebih lanjut di sini .
sumber
Saya menghadapi masalah yang sama dan saya memecahkan masalah ini dengan mengubah versi fireabseStorage sama dengan versi basis data Firebase
untuk
sumber
Jika Anda memiliki> 20 menit perubahan, Anda perlu menggunakan versi Firebase Auth terbaru yaitu
dan tidak perlu men-setup multi-dex jika Anda tidak benar-benar membutuhkannya.
Saya mengalami masalah ini ketika saya menggunakan 16.0.5 dari penolong Firebase tetapi bisa memperbaikinya ketika saya memperbarui ke 18.1.0.
sumber
Jika Anda menggunakan Xamarin.Forms Anda mungkin ingin memeriksa Tidak menemukan kelas "com.google.firebase.provider.FirebaseInitProvider"? karena ini menangkap masalah dengan kesalahan dex dengan google firebase saat startup (belum terselesaikan saat ini).
Saya telah kembali menggunakan tidak menyusut dalam jangka pendek dan berencana untuk menggunakan ProGuard sampai R8 lebih stabil.
sumber
tambahkan path root proyek google-services.json
sumber