Я получаю следующее исключение при запуске приложения.
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)
Вот уровень приложения build.gradle
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'
Это мой уровень приложения build.gradle
// 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
}
Как решить проблему?
android:name="android.support.multidex.MultiDexApplication"
? Если MultiDex настроен правильно , вы увидите LogCat сообщения во время приложения INIT , как это:I/MultiDex: install done
.Ответы:
У меня была та же ошибка, и я решил ее с помощью MultiDex, как описано по этой ссылке: https://developer.android.com/studio/build/multidex.html
Иногда недостаточно просто включить MultiDex.
FirebaseInitProvider требуется во время запуска.
Поэтому вы должны вручную указать FirebaseInitProvider, как это требуется в основном DEX-файле.
файл build.gradle
multidex-config.txt (в том же каталоге, что и файл build.gradle)
источник
Application
класс начинается сMultiDexApplication()
. Это отсутствовало в моем случае.Я тоже столкнулся с той же проблемой и, наконец, решил ее, отключив
Instant Run
в андроид студии.Обновить:
В последней версии Android Studio 3.5+ нет функции мгновенного запуска. Это должно быть применимо только для более старых версий.
источник
В файле build.gradle (Module: app) вставьте приведенный ниже код в defaultConfig:
и вставить в зависимости:
Затем добавьте код в манифест:
источник
У меня была такая же проблема в моем (проект плеера YouTube) ... и эта проблема решила для меня:
Добавьте этот код в ваш
build.gradle
(module: app) внутриdefaultConfing
:Добавьте этот код в ваш
build.gradle
(module: app) внутриdependencies
:Открыто
AndroidManifest.xml
и внутриapplication
:или, если у вас есть класс App, расширьте его из MultiDexApplication, например:
И, наконец, я думаю, что вы должны загрузить репозиторий поддержки Android в Extras in SDK Manager .
источник
Просто переопределите следующий метод в своем классе приложения.
источник
android:name
материал в манифестеЕсли ваш minSdkVersion установлен на 21 или выше, все, что вам нужно сделать, это установить для multiDexEnabled значение true в файле build.gradle уровня модуля, как показано здесь:
Иначе , если ваш minSdkVersion установлен на 20 или ниже, то вы должны использовать multidex библиотеку поддержки следующим образом :
источник
import android.content.Context;
иimport android.support.multidex.MultiDex;
Включение
multidex
не является хорошим решением, потому чтоmultidex
есть другое использование в Android увидеть этот ответ, что такое мультидексРешение - отключить мгновенный запуск, как сказала @Shylendra Madda.
Я думаю, что причина этой проблемы в том, что когда включен мгновенный запуск, Android Studio не помещает библиотеки, такие как
firebase
в сгенерированный apk, для уменьшения времени сборки проекта, потому чтоfirebase
библиотека и другие библиотеки, такие какmaps
и другие , существуют в сервисах воспроизведения, а сервисы воспроизведения установлены. на устройстве Android, так что если включен мгновенный запуск, не нужно помещать их в сгенерированный apk, чтобы ускорить сборку.Поэтому, когда вы извлекаете apk и устанавливаете его на другое устройство, вы увидите это исключение
источник
Я также столкнулся с той же проблемой после того, как попробовал все решения, которые я нашел ниже.
Если вы применили правила Proguard, добавьте нижнюю строку в Правила ProGuard
и это решит мою проблему.
источник
-keep class com.google.firebase.provider.FirebaseInitProvider
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
Как включить, пожалуйста, скажите мне, сэр1: Перейдите к включению gradle multiDexEnabled и добавьте мультидексную библиотеку в зависимости.
2: Перейдите в файл манифеста и напишите android: name = ". MyApplication" (имя класса (MyApplication) необязательно, вы можете написать все, что захотите).
3: Как вы написали android: name = ". MyApplication" внутри приложения в файле манифеста. это даст вам ошибку, потому что вы не создали класс MyApplication. Создайте класс MyApplication, расширьте его классом «application» или просто нажмите. MyApplication, маленький красный шарик появится слева от синтаксиса, щелкните его, вы увидите (создайте класс MyApplication) в меню, щелкните его и включите. Метод ниже Внутри этого класса.
Если вы хотите получить больше информации, нажмите на эту ссылку: [ https://developer.android.com/studio/build/multidex.html].
Надеюсь, это работает для вас.
источник
Сначала добавьте следующее в build.gradle (Модуль: приложение) ---->
Затем в том же файле добавить следующее
Затем в AndroidManifest.xml напишите следующее
Вот и все. Это точно сработает
источник
Если вы используете MultiDex в вашем затем изменения App Gradle расширяет приложение к расширяет MultiDexApplication в своем классе приложений. Это будет демонстративно работать
источник
У меня возникла та же проблема, и я решил просто добавить кусок кода. Если вы получаете эту проблему, значит, вы уже выполнили все шаги, необходимые для использования Firebase. Вам просто нужно создать класс, который расширяет приложение (открытый класс Application_CrashReport extends Application) и добавить этот класс в файл mainifest, и в этом классе просто переопределить метод ниже
и добавьте MultiDex.install (это); в этом методе означает
Примечание : - Не забудьте выполнить вышеуказанные шаги
источник
Это связано с MultiDex.
Шаги для решения:
В gradle-> зависимости -> (compile'com.android.support: multidex: 1.0.1 ') Добавьте это в зависимости
В вашем проекте класс приложения расширяет MultiDexApplication следующим образом (открытый класс MyApplication расширяет MultiDexApplication)
Запустить и проверить
источник
Это немного поздно для тех, кто входит, но проверьте свои правила защиты! Я потратил много времени на это. Ваши правила Proguard могли бы изменить имена на важные файлы Firebase. Это действительно только доказывает проблему в производстве и мгновенном запуске :)
proguard-rules.pro
источник
Как упоминалось ранее, это проблема с
multidex
: вы должны добавить реализацию к вашимbuild.gradle
иMainApplication.java
. Но то, что вы добавляете, зависит от того, поддерживаете ли вы AndroidX или нет. Вот что вам нужно для решения этой проблемы:Поместите эти строки кода в ваш
build.gradle
(android / app / build.gradle):Поместите эти строки в ваш
MainApplication.java
(android / app / src / main / java /.../ MainApplication.java):Поместите эти строки кода в ваш
build.gradle
(android / app / build.gradle):Поместите эти строки в ваш
MainApplication.java
(android / app / src / main / java /.../ MainApplication.java):источник
Вы должны расширить свой класс приложения с помощью
MultiDexApplication
вместоApplication
.источник
Эта проблема возникла, когда я переключился на Android Studio 3.4 с плагином Android Gradle 3.4.0. который работает с компилятором R8.
Плагин Android Gradle включает дополнительные предопределенные файлы правил ProGuard, но рекомендуется использовать proguard-android-optimize.txt . Больше информации здесь .
источник
Я столкнулся с той же проблемой, и я решил эту проблему, изменив версию fireabseStorage так же, как версию базы данных Firebase
в
источник
Если у вас> 20 minsdkversion, вам нужно использовать последнюю версию Firebase Auth, т.е.
и нет необходимости настраивать мультидекс, если вам это не нужно.
Я столкнулся с этой проблемой, когда использовал 16.0.5 из помощника Firebase, но смог исправить ее, когда обновился до 18.1.0.
источник
Если вы используете Xamarin.Forms, вы можете проверить не нашли класс "com.google.firebase.provider.FirebaseInitProvider"? поскольку это фиксирует проблему с ошибкой dex с Google Firebase при запуске (не решена в настоящее время).
Я вернулся к использованию сокращения в краткосрочной перспективе и планирую использовать ProGuard, пока R8 не станет более стабильным.
источник
добавить в корневой каталог проекта google-services.json
источник