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

160

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
Macarse
fuente
1
¿Tiene un ID de aplicación en su build.gradle?
Ian Barber
1
@IanBarber: Oh wow, mientras editaba build.gradle lo eliminé. Culpa mía.
Macarse
solo stackoverflow.com/a/38224316/4663544 funcionó para mí
Jeba Ra
8
Trate Android studio> Build>Clean Project
Ujjwal Singh
Lo arreglé haciendo que mi clase de aplicación extendiera MultiDexApplication cuando multiDexEnabled es verdadero en la configuración predeterminada de graddle de la aplicación.
Herman

Respuestas:

145

1)

Añadir el applicationId a build.gradle de la aplicación:

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

Y que Clean Project -> Construir 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" >
    ...
norbDEV
fuente
1
Obtuve el mismo error y la solución lo solucionó. No sé por qué, pero funciona.
FUJI Goro
Esto me salvó el día. Recibí el error mientras intentaba ejecutar una aplicación Cordova en un dispositivo Android.
manosim
1
Tengo el mismo problema y el ID de aplicación en mi build.gradle. ¿Qué puedo hacer en ese caso?
Maria Mercedes Wyss Alvarez
@ekonstantinidis ¿Cómo lo arreglaste para tu aplicación cordova? ¿Se puede agregar a una configuración en algún lugar que la agregue correctamente cuando se genera build.gradle? (Durante cordova platform add android)
Zach
@Zach No lo creo. Lo agregué después de correr cordova platform add android. ¿Supongo que se solucionará una vez que Córdoba se actualice? PD. No estoy usando Firebase en absoluto.
manosim
93

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

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'

    }
...
luizMello
fuente
44
Funciona, pero hay una clase especial para hacerlo en lugar de anular una función y se llama MultiDexApplication, vea la respuesta a continuación stackoverflow.com/questions/37312103/…
GregoryK
Sí, también funcionó para mí, siempre escribo MultiDex.install (this) dentro del método onCreate () gracias amigo
dara
en mi caso, acabo de actualizar la compilación 'com.android.support:multidex:1.0.1' a la última versión disponible
Aleksey Timoshchenko,
Esta debería ser la respuesta aceptada. Intenté todas las otras respuestas y seguí las guías de Google y Firebase, pero esta es la correcta, ¡eres un hombre increíble!
blueware
Gracias, ¿cómo puedes encontrarlo? pero mi pregunta es mi aplicación de líneas de código no es superior a 65000 por qué debería usar multudex y por qué trabajo en SDK> 22 y no funciona en SDK <22
milad salimi
75

La respuesta aceptada no resolvió mi problema.

Si está utilizando Multidex, su aplicación debería extenderse en MultiDexApplicationlugar deApplication .

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.

Ye Min Htut
fuente
Funcionó perfectamente! Muchas gracias :)
Solution Spirit
3
¿Cómo sabes estas cosas? ¿¿¿Quien te lo dijo??? Acabo de comenzar a tener este problema después de actualizar a Android Studio 3 e instalar aplicaciones de "depuración". La versión "Release" funcionó bien. Ahora, con su solución también funciona la versión "Debug". ¡Estoy tan feliz de que existan personas como tú!
Ton
Esa es la respuesta perfecta
androidXP
En todas estas respuestas, ninguna explica realmente lo que realmente hace la adición de multidex para resolver el problema (algo desconcertantemente aleatorio para hacer frente a tal problema)
Aditya Anand
36

Si tiene el mismo problema pero ya tiene el applicationIdconjunto configurado build.gradle, también puede intentar lo siguiente:

  • en Android Studio: Build>Clean Project
  • en otros IDEs: limpiar, reconstruir, lo que sea ...
Barthy
fuente
3
Y si aún tiene problemas, elimine el directorio de compilación e intente nuevamente. Estaba atrapado hasta que hice eso :)
Laurence Moroney
Solo eliminar el builddirectorio funcionó para mí. Parece que fue arruinado por mi último tirón del repositorio.
Sevastyan Savanyuk
17

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

multiDexEnabled = true

dexOptions {
    javaMaxHeapSize "4g"
}

2. agregue esta dependencia

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

3. Luego en la aplicación principal

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

4.En el archivo de manifiestos

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

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

thilina Kj
fuente
44
No debe hacer los tres trabajos (extender MultiDexApplication, implementar attacheBaseContext y cambiar el archivo de manifiesto) para habilitar multidex, solo uno es suficiente: D. developer.android.com/studio/build/multidex.html
Hossein Shahdoost
Si su minSdk es 21 o superior, no debería tener que hacer nada de esto, ya que los documentos dicen que ya está habilitado de forma predeterminada. Y sin embargo, este problema viene para mí con minSdk = 21, ¿alguna solución para esto?
Aditya Anand
15

deberías estar seguro

para agregar esta línea en su manifiesto

https://developer.android.com/studio/run/index.html#instant-run

<?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>
Juan salamanca
fuente
También funcionó para mí junto con multiDexEnabled true
ashishdhiman2007
7

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

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

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

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

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

android {               
defaultConfig {
    ....
    multiDexEnabled true
}
...
}

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

Si anula la Applicationclase, extiéndala desde MultiDexApplication:

YourApplicationClass extends MultiDexApplication

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

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

Y no corras nada antes MultiDex.install(this) se ejecute.

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

<?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>
Nurlan Sofiyev
fuente
3

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>
Soumen Das
fuente
2

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'

Fuente

Borja
fuente
Obtuve "No se encontró el complemento con la identificación 'com.google.gms.play-services'".
kaleemsagard
@kaleemsagard puso esto en su proyectobuild.gradle dependencies { classpath 'com.google.gms:google-services:3.0.0' }
Borja
1

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:

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

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

cgr
fuente
0

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

primero agregue esta línea al principio

import java.util.regex.Pattern

Luego agregue esto en la configuración predeterminada

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

Y finalmente agregue el método doExtractStringFromManifest

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

Como hay muchos comentarios de Cordova sobre la respuesta, si está trabajando con Cordova, realmente no debería editar el 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.

jcesarmobile
fuente
0

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 Firebase Assistant

Suhaib
fuente
0

Vaya a la configuración de Android Studio (presionando Ctrl+Alt+Sen Windows), busque Instant Runy desmarque Enable Instant Run.

Al deshabilitar Instant Runy ejecutar su aplicación nuevamente, el problema se resolverá.

VSB
fuente
0

Para la aplicación nativa de reacción, el error fue que 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 estaba obteniendo dispositivos con la versión de Android <~ 4.4

Resuelto por sólo la sustitución Applicationde MainApplication.javalaMultiDexApplication

NOTA: import android.support.multidex.MultiDexApplication;

Malith
fuente
0

Agregué el siguiente código en el archivo proguard.

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application

y funcionó en mi caso.

Ananta Prasad
fuente
0

en mi caso, me olvido de agregar (o eliminar accidentalmente) núcleo de firebase en build gradle

implementation 'com.google.firebase:firebase-core:xx.x.x'
Alexa289
fuente
1
Han pasado 3 meses y ahora está en desuso: ¡NO AGREGUE ESTO! Fuente = firebase.google.com/support/release-notes/android (Obligatorio: Gracias Google)
Aditya Anand
0

Recibí este error solo en dispositivos con API inferior a 21. En mi caso, tuve que trabajar con un proyecto donde la multiDexEnabledopción build.gradleya estaba configurada true. Revisé el archivo APK de Dex y se hace referencia número de métodos era menos de 64k, por lo que el proyecto no tiene por qué ser una multidex, por lo tanto, me puse multiDexEnableda false. Esta solución funcionó para mí.

CristianBanan
fuente