Recibo la siguiente excepción al iniciar la aplicación.
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)
Aquí está el nivel de aplicación 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'
Este es mi nivel de aplicación 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
}
¿Cómo resolver el problema?
android:name="android.support.multidex.MultiDexApplication"
:? Si MultiDex está configurado correctamente verá mensajes LogCat durante la aplicación init como éste:I/MultiDex: install done
.Respuestas:
Tuve el mismo error y lo resolví con MultiDex, como se describe en este enlace: https://developer.android.com/studio/build/multidex.html
A veces no es suficiente habilitar MultiDex.
Se requiere FirebaseInitProvider durante el inicio.
Por lo tanto, debe especificar manualmente FirebaseInitProvider como se requiere en el archivo DEX primario.
archivo build.gradle
multidex-config.txt (en el mismo directorio que el archivo build.gradle)
fuente
Application
clase se extienda desdeMultiDexApplication()
. Esto faltaba en mi caso.Yo también enfrenté el mismo problema y finalmente lo resolví deshabilitando
Instant Run
en un estudio de Android.Actualizar:
No hay una opción de Ejecución instantánea disponible en la última versión de Android Studio 3.5+. Debería ser aplicable solo para versiones anteriores.
fuente
En el archivo build.gradle (Módulo: aplicación), inserte el siguiente código en defaultConfig:
e insertar en dependencias:
Luego agregue código para manifestar:
fuente
Tuve el mismo problema en mi (proyecto de reproductor de YouTube) ... y lo siguiente me resolvió el problema:
Agregue este código en su
build.gradle
(módulo: aplicación) dentro dedefaultConfing
:Agregue este código en su
build.gradle
(módulo: aplicación) dentro dedependencies
:Abierto
AndroidManifest.xml
y dentro deapplication
:o si tiene su clase de aplicación, extiéndala desde MultiDexApplication como:
Y finalmente, creo que debería descargar el repositorio de soporte de Android , en Extras en SDK Manager .
fuente
Simplemente anule el siguiente método en su clase de aplicación.
fuente
android:name
del ManifiestoSi su minSdkVersion está configurado en 21 o superior, todo lo que necesita hacer es configurar multiDexEnabled en verdadero en su archivo build.gradle de nivel de módulo, como se muestra aquí:
De lo contrario , si su minSdkVersion está configurado en 20 o menos, entonces debe usar la biblioteca de soporte multidex de la siguiente manera:
fuente
import android.content.Context;
yimport android.support.multidex.MultiDex;
La habilitación
multidex
no es una buena solución porque, paramultidex
tener otro uso en Android, vea esta respuesta ¿Qué es multidex?La solución es deshabilitar la ejecución instantánea como dijo @Shylendra Madda
Creo que la razón de este problema es que cuando la ejecución instantánea está habilitada, Android Studio no coloca bibliotecas como
firebase
en el apk generado para disminuir el tiempo de construcción del proyecto porque lafirebase
biblioteca y otras bibliotecas comomaps
y otras existen en los servicios de reproducción y los servicios de reproducción están instalados en el dispositivo Android, por lo que si la ejecución instantánea está habilitada, no es necesario ponerlos en el apk generado para acelerar el tiempo de compilación.Entonces, cuando extraigas apk e lo instales en otro dispositivo, verás esta excepción
fuente
También me he enfrentado al mismo problema después de probar todas las soluciones, encontré la solución a continuación.
Si ha aplicado reglas de protección, agregue la línea siguiente en Reglas de ProGuard
y resuelve mi problema
fuente
-keep class com.google.firebase.provider.FirebaseInitProvider
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
Cómo habilitarlo, por favor dígame señor1: Vaya al gradle enable multiDexEnabled y agregue la biblioteca multidex en las dependencias.
2: Vaya al archivo de manifiesto y escriba android: name = ". MyApplication" (El nombre de la clase (MyApplication) es opcional; puede escribir lo que quiera).
3: Como escribió android: name = ". MyApplication" Aplicación interna en el archivo de manifiesto. le dará un error porque no creó la clase MyApplication. Crear clase MyApplication extiéndalo por clase de "aplicación" o simplemente haga clic en. MyApplication, aparecerá un pequeño globo rojo en el lado izquierdo de una sintaxis, haga clic en él, verá (crear clase MyApplication) en el menú, haga clic en él e incluya debajo Método dentro de esa clase.
Si desea obtener más información, haga clic en este enlace: [ https://developer.android.com/studio/build/multidex.html]
Esperemos que funcione para usted.
fuente
Primero agregue lo siguiente en build.gradle (Módulo: aplicación) ---->
Luego, en el mismo archivo, agregue lo siguiente
Luego, en AndroidManifest.xml escriba lo siguiente
Eso es. Definitivamente funcionará
fuente
Si está utilizando MultiDex en su aplicación Gradle, entonces el cambio extiende la aplicación para extender MultiDexApplication en su clase de aplicación. Definitivamente funcionará
fuente
Tuve el mismo problema y lo resolví solo agregue un fragmento de código . Si obtiene este problema, significa que ya ha completado todos los pasos que deben usar Firebase. Solo necesita crear una clase que extienda la aplicación (clase pública Application_CrashReport extiende la aplicación) y agregar esta clase en el archivo mainifest y en esa clase simplemente anule el método a continuación
y agregue MultiDex.install (esto); en ese método significa
Nota : - No olvides seguir los pasos anteriores
fuente
Esto se debe a MultiDex.
Pasos para resolver:
En gradle-> dependencias -> (compile'com.android.support: multidex: 1.0.1 ') Agregue esto en dependencias
En su proyecto, la clase de aplicación extiende MultiDexApplication de esta manera (la clase pública MyApplication extiende MultiDexApplication)
Corre y comprueba
fuente
Esto es un poco tarde para los que vienen, ¡pero revisa tus reglas de protección! Perdí mucho tiempo en esto. Sus reglas de protección podrían estar cambiando los nombres a archivos importantes de Firebase. Esto realmente solo demuestra un problema en la producción y la ejecución instantánea :)
proguard-rules.pro
fuente
Como se mencionó anteriormente, este es un problema con
multidex
: debe agregar implementación a subuild.gradle
yMainApplication.java
. Pero lo que agrega realmente depende de si es compatible con AndroidX o no. Esto es lo que necesita para resolver este problema:Ponga estas líneas de código en su
build.gradle
(android / app / build.gradle):Ponga estas líneas en su
MainApplication.java
(android / app / src / main / java /.../ MainApplication.java):Ponga estas líneas de código en su
build.gradle
(android / app / build.gradle):Ponga estas líneas en su
MainApplication.java
(android / app / src / main / java /.../ MainApplication.java):fuente
Debe ampliar su clase de aplicación con en
MultiDexApplication
lugar deApplication
.fuente
Este problema ocurrió cuando cambié a Android Studio 3.4 con el complemento Android Gradle 3.4.0. que funciona con el compilador R8.
El complemento Android Gradle incluye archivos de reglas de ProGuard predefinidos adicionales, pero se recomienda que use proguard-android-optimizar.txt . Más información aquí .
fuente
Estaba enfrentando el mismo problema y resolví este problema cambiando la versión de fireabseStorage igual que la versión de la base de datos Firebase
a
fuente
Si tiene> 20 minutos de versión, necesita usar la última versión de Firebase Auth, es decir
y no es necesario configurar multi-dex si realmente no lo necesita.
Encontré este problema cuando utilicé 16.0.5 del ayudante de Firebase pero pude solucionarlo cuando actualicé a 18.1.0.
fuente
Si está utilizando Xamarin.Forms, puede consultar ¿No encontró la clase "com.google.firebase.provider.FirebaseInitProvider"?ya que esto captura el problema con el error dex con google firebase en el inicio (no resuelto en este momento).
He vuelto a usar no reducir en el corto plazo y planeo usar ProGuard hasta que R8 sea más estable.
fuente
agregar en la ruta raíz del proyecto google-services.json
fuente