tutorial firebase

tutorial - No se puede obtener el proveedor com.google.firebase.provider.FirebaseInitProvider



firebase php (15)

Agregue esto a su nivel de módulo build.gradle:

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

Si anula la clase de Application , MultiDexApplication desde MultiDexApplication :

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

Si no puede extenderlo desde la clase MultiDexApplication , anule el método attachBaseContext() siguiente manera:

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

Y no ejecute nada antes de ejecutar MultiDex.install(this) .

Si no anula la clase de Application , simplemente edite su archivo de manifiesto de la siguiente manera:

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

Estoy probando la nueva herramienta Crash: https://firebase.google.com/docs/crash/

Después de seguir los pasos, la aplicación se inicia y se bloquea diciendo:

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


En lugar de agregar manualmente el nombre del paquete en build.gradle , puede hacerlo de esta manera:

primero agregue esta línea al principio

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

Luego agregue esto en la configuración predeterminada

import java.util.regex.Pattern

Y finalmente agregue el método doExtractStringFromManifest

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

Como hay muchos comentarios de Cordova sobre la respuesta, si está trabajando con Cordova, no debería editar la build.gradle usted mismo, tiene un comentario al principio que dice

// ¡ARCHIVO GENERADO! ¡NO EDITAR!

Entonces, si está utilizando un Cordova, lo mejor que puede hacer es actualizar a cordova-android 5.1.0 o superior donde estos cambios ya están presentes.


En mi caso, el problema ocurrió después de que migramos a AndroidX. Por alguna razón, la aplicación estaba llamando a MultiDex.install () con reflexión:

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

Cambié el paquete de android.support.multidex.MultiDex a androidx.multidex.MultiDex . Funcionó.


En mi caso, el problema se resolvió agregando esta línea al módulo build.gradle:

// AGREGAR ESTO EN LA PARTE INFERIOR

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

Source


Estaba con el mismo problema en dispositivos con SDK <22, pero para mí la razón es MultiDex, MultiDex.install debe estar en el método attachBaseContext .

Si está utilizando MultiDex, intente esto:

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


Esto debería funcionar:

Paso 1:

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

Paso 2:

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

Paso 3: toma otra clase

public class MyApplication extends MultiDexApplication { }

Paso 4: agregue esta línea en el manifiesto

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


La mía se debió a que Firebase SDK en el archivo Gradle estaba configurado con una versión de número incorrecta.

Eliminé las deudas de Firebase de Gradle y las reinstalé nuevamente usando el Firebase Assistant


La respuesta aceptada no resolvió mi problema.

Si está utilizando Multidex, su aplicación debe extender MultiDexApplication lugar de la 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" ... />

Espero eso ayude.


No incluya toda la biblioteca de servicios de juego, pero use la que necesita. Reemplace la línea en su build.gradle :

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

con el apropiado de las API de servicios de Google Play , como por ejemplo:

YourApplicationClass extends MultiDexApplication


Para la aplicación nativa de reacción, el error fue java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn''t find class "com.google.firebase.provider.FirebaseInitProvider" Solo se estaba obteniendo para dispositivos con la versión de Android <~ 4.4

MainApplication.java MultiDexApplication simplemente reemplazando la Application en MainApplication.java con MultiDexApplication

NOTA: import android.support.multidex.MultiDexApplication;


Si tiene el mismo problema pero ya tiene el build.gradle applicationId establecido en build.gradle , también puede intentar lo siguiente:

  • en Android Studio: Build > Clean Project
  • en otros IDEs: limpiar, reconstruir, lo que sea ...

Tuve el mismo problema en los dispositivos Pre Lollipop. Para resolver eso hice lo siguiente. Mientras tanto, estaba usando multiDex en el proyecto.

1. agregue esto para build.gradle en el módulo: aplicación

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

2. agregue esta dependencia

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

3. Luego en la aplicación principal

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

4.En el archivo de manifiestos

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

Esto funciona para mi. Espero que esto le ayude también :)


Vaya a la configuración de Android Studio (presionando Ctrl+Alt+S en Windows), busque Instant Run y desactive Enable Instant Run .

Al deshabilitar Instant Run y volver a ejecutar su aplicación, el problema se resolverá.



1)

Agregue el ID de la aplicación al build.gradle de la aplicación:

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

Y que Clean Project -> Crear o reconstruir proyecto

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

Use Multidex correctamente.

build.gradle de la aplicación

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

manifest.xml

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

3)

Si usa una clase de aplicación personalizada

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

manifest.xml

<application ... android:name="com.example.my.app.MyApplication" > ...