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''
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á.
deberías estar seguro
para agregar esta línea en su manifiesto
https://developer.android.com/studio/run/index.html#instant-run
multiDexEnabled = true
dexOptions {
javaMaxHeapSize "4g"
}
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" >
...