tutorial studio query para guardar example descargar datos consultas android firebase

android - studio - ¿No encontró la clase "com.google.firebase.provider.FirebaseInitProvider"?



guardar datos en firebase android (19)

Cuando su aplicación y las bibliotecas a las que hace referencia superan los 65.536 métodos, se encuentra con un error de compilación que indica que su aplicación ha alcanzado el límite de la arquitectura de compilación de Android

https://developer.android.com/studio/build/multidex.html

Si 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í:

android { defaultConfig { ... minSdkVersion 21 multiDexEnabled true } ... }

Sin embargo , si su minSdkVersion está configurado en 20 o menos, entonces debe usar la biblioteca de soporte multidex de la siguiente manera:

1. Modifique el archivo build.gradle a nivel de módulo para habilitar multidex y agregue la biblioteca multidex como una dependencia, como se muestra aquí:

android { defaultConfig { ... minSdkVersion 15 multiDexEnabled true } ... } dependencies { implementation ''com.android.support:multidex:1.0.3'' }

2. Dependiendo de si anula la clase de aplicación, realice una de las siguientes acciones:

  • Si no anula la clase de aplicación, edite su archivo de manifiesto para configurar android: name en la etiqueta de la siguiente manera:

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

  • Si anula la clase de aplicación, cámbiela para extender MultiDexApplication (si es posible) de la siguiente manera:

public class MyApplication extends MultiDexApplication { ... }

  • O si anula la clase de aplicación pero no es posible cambiar la clase base, puede anular el método attachBaseContext () y llamar a MultiDex.install (this) para habilitar multidex:

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

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?


Debe ampliar su clase de Aplicación con MultiDexApplication lugar de Application .


En el archivo build.gradle (Módulo: aplicación), inserte el siguiente código en defaultConfig:

defaultConfig { applicationId "com.***.****" minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" multiDexEnabled true }

e insertar en dependencias:

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

Luego agregue código para manifestar:

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


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

implementation ''com.google.firebase:firebase-core:16.0.8'' implementation ''com.google.firebase:firebase-database:16.0.1'' implementation ''com.google.firebase:firebase-storage:17.0.0''

a

implementation ''com.google.firebase:firebase-core:16.0.8'' implementation ''com.google.firebase:firebase-database:16.0.1'' implementation ''com.google.firebase:firebase-storage:16.0.1''


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 here .

buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile( ''proguard-android-optimize.txt''), // List additional ProGuard rules for the given build type here. By default, // Android Studio creates and includes an empty rules file for you (located // at the root directory of each module). ''proguard-rules.pro'' } }


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

-keep class com.google.firebase.** { *; } -keep class com.firebase.** { *; } -keep class org.apache.** { *; } -keepnames class com.fasterxml.jackson.** { *; } -keepnames class javax.servlet.** { *; } -keepnames class org.ietf.jgss.** { *; } -dontwarn org.apache.** -dontwarn org.w3c.dom.**


Esto se debe a MultiDex.

Pasos para resolver:

  1. En gradle-> dependencias -> (compile''com.android.support: multidex: 1.0.1 '') Agregue esto en dependencias

  2. En su proyecto, la clase de aplicación extiende MultiDexApplication de esta manera (la clase pública MyApplication extiende MultiDexApplication)

  3. Corre y comprueba


Habilitar multidex no es una buena solución porque multidex tiene otro uso en Android, vea esta respuesta ¿qué es multidex?

La solución es deshabilitar la ejecución instantánea como dijo @Shylendra Madda

Configuración → Compilación, ejecución, implementación → Ejecución instantánea y desmarque Habilitar ejecución instantánea

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 apk generado para disminuir el tiempo de construcción del proyecto porque firebase biblioteca firebase y otras bibliotecas como maps y others en servicios de juego y play Los servicios se instalan en el dispositivo Android, por lo que si la ejecución instantánea está habilitada, no es necesario que los coloque 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


Primero agregue lo siguiente en build.gradle (Módulo: aplicación) ---->

defaultConfig{ .. multiDexEnabled true .. }

Luego, en el mismo archivo, agregue lo siguiente

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

Luego, en AndroidManifest.xml escriba lo siguiente

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

Eso es. Definitivamente funcionará


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á


Si tiene> 20 minutos de versión, debe usar la última versión de Firebase Auth, es decir

implementación ''com.google.firebase: firebase-auth: 18.1.0''

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.


Simplemente anule el siguiente método en su clase de aplicación.

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


También me he enfrentado al mismo problema después de probar todas las soluciones, encontré la siguiente solución.

Si ha aplicado reglas de protección, agregue la línea siguiente en Reglas de ProGuard

-keep class com.google.firebase.provider.FirebaseInitProvider

y resuelve mi problema


Tuve el mismo error y lo resolví con MultiDex, como se describe en este enlace: https://developer.android.com/studio/build/multidex.html https://developer.android.com/studio/build/multidex.html

A veces no es suficiente solo habilitar MultiDex.

Si alguna clase que se requiere durante el inicio no se proporciona en el archivo DEX primario , entonces su aplicación se bloquea con el error java.lang.NoClassDefFoundError . https://developer.android.com/studio/build/multidex#keep

Se requiere FirebaseInitProvider durante el inicio.

Por lo tanto, debe especificar manualmente FirebaseInitProvider como se requiere en el archivo DEX primario.

archivo build.gradle

android { buildTypes { release { multiDexKeepFile file(''multidex-config.txt'') ... } } }

multidex-config.txt (en el mismo directorio que el archivo build.gradle)

com/google/firebase/provider/FirebaseInitProvider.class


Tuve el mismo problema en mi (proyecto de reproductor de YouTube) ... y lo siguiente me resolvió el problema:

  1. Agregue este código a su build.gradle (módulo: aplicación) dentro de defaultConfing :

    defaultConfig { .... .... multiDexEnabled = true }

  2. Agregue este código a su build.gradle (módulo: aplicación) dentro de las dependencies :

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

  3. Abra AndroidManifest.xml y dentro de la application :

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

    o si tiene su clase de aplicación, extiéndala desde MultiDexApplication como:

    public class MyApp extends MultiDexApplication { .....

Y finalmente, creo que debería descargar el repositorio de soporte de Android , en Extras en SDK Manager .


Yo también enfrenté el mismo problema y finalmente lo resolví deshabilitando Instant Run en el estudio de Android.

Configuración → Compilación, ejecución, implementación → Ejecución instantánea y desmarque Habilitar ejecución instantánea


agregar en la ruta raíz del proyecto google-services.json

dependencies { compile ''com.android.support:support-v4:25.0.1'' **compile ''com.google.firebase:firebase-ads:9.0.2''** compile files(''libs/StartAppInApp-3.5.0.jar'') compile ''com.android.support:multidex:1.0.1'' } apply plugin: ''com.google.gms.google-services''


1: Vaya al gradle enable multiDexEnabled y agregue la biblioteca multidex en las dependencias.

android { ... defaultConfig { multiDexEnabled true ... } } dependencies { // add dependency implementation ''com.android.support:multidex:1.0.1'' }

2: Vaya al archivo de manifiesto y escriba android: name = ". MyApplication" (El nombre de la clase (MyApplication) es opcional; puede escribir lo que quiera).

<application android:name=".MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> . . . . . </application>

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.

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

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.


Tuve el mismo problema y lo resolví solo agregue un fragmento de código . Si tiene este problema, significa que ya completó todos los pasos que necesita para 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

@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); }

y agregue MultiDex.install (esto); en ese método significa

@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }

Nota : - No olvides seguir los pasos anteriores