Impossibile ottenere il provider com.google.firebase.provider.FirebaseInitProvider


160

Sto testando il nuovo strumento Crash: https://firebase.google.com/docs/crash/

Dopo aver eseguito i passaggi, l'app si avvia e si arresta in modo anomalo dicendo:

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

1
Hai un applicationID nel tuo build.gradle?
Ian Barber,

1
@IanBarber: Oh wow, durante la modifica di build.gradle l'ho rimosso. Colpa mia.
Macarse,


8
Prova Android studio> Build>Clean Project
Ujjwal Singh

L'ho risolto facendo in modo che la mia classe di applicazione estendesse MultiDexApplication quando multiDexEnabled è true in graddle defaultConfig dell'app.
Herman,

Risposte:


145

1.

Aggiungi applicationId al build.gradle dell'applicazione:

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

E di Clean Project -> Build o Rebuild Project


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

Usa Multidex correttamente.

build.gradle dell'applicazione

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

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

manifest.xml

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

3.

Se si utilizza una classe di applicazione personalizzata

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

1
Ho avuto lo stesso errore ed è stato risolto dalla soluzione. Non so il perché, ma funziona.
FUJI Goro,

Questo mi ha salvato la giornata. Ho ricevuto l'errore mentre cercavo di eseguire un'app Cordova su un dispositivo Android.
Manosim,

1
Ho lo stesso problema e applicationId sul mio build.gradle. Cosa posso fare in quel caso?
Maria Mercedes Wyss Alvarez,

@ekonstantinidis Come l'hai risolto per la tua app Cordova? Può essere aggiunto a una configurazione da qualche parte che lo aggiunge correttamente quando viene generato build.gradle? (Durante cordova platform add android)?
Zach,

@Zach Non la penso così. L'ho aggiunto dopo aver corso cordova platform add android. Immagino che verrà corretto una volta che Cordova verrà aggiornato? Ps. Non sto usando Firebase.
Manosim,

93

Ero con lo stesso problema nei dispositivi con SDK <22, ma per me il motivo è il MultiDex, MultiDex.installdeve essere nel attachBaseContextmetodo.

Se si utilizza MultiDex, provare questo:

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'

    }
...

4
Funziona, ma c'è una classe speciale per farlo, invece di override una funzione e si chiama MultiDexApplication, vedi risposta qui sotto stackoverflow.com/questions/37312103/...
GregoryK

Sì, ha funzionato anche per me, scrivo sempre MultiDex.install (questo) all'interno del metodo onCreate () grazie amico
dara

nel mio caso ho appena aggiornato compilare 'com.android.support:multidex:1.0.1' all'ultima versione disponibile
Aleksey Timoshchenko,

Questa dovrebbe essere la risposta accettata. Ho provato tutte le altre risposte e seguivo le guide di Google e Firebase ma questa è quella corretta, sei un uomo fantastico!
progetto

Grazie, come hai trovato? ma la mia domanda è che la mia app per le righe di codice non è superiore a 65000 perché dovrei usarla multudex e perché lavoro su sdk> 22 e non funziona su sdk <22
milad salimi

75

La risposta accettata non ha risolto il mio problema.

Se si utilizza Multidex, l'applicazione dovrebbe estendersi MultiDexApplicationinvece di 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"
      ...
      />

Spero che sia d'aiuto.


Ha funzionato perfettamente! Grazie mille :)
Soluzione Spirito

3
Come fai a sapere queste cose ?? Chi vi ha detto??? Ho appena iniziato a riscontrare questo problema dopo l'aggiornamento ad Android Studio 3 e l'installazione di app "debug". La versione "Release" ha funzionato bene. Ora, con la tua soluzione funziona anche la versione "Debug". Sono così felice che esistano persone come te !!
Ton

Questa è la risposta perfetta
androidXP

In tutte queste risposte, nessuna in realtà spiega cosa faccia effettivamente l'aggiunta di multidex per risolvere il problema (una cosa perplessa e casuale da fare di fronte a un tale problema)
Aditya Anand,

36

Se riscontri lo stesso problema ma hai già applicationIdimpostato build.gradle, puoi anche provare quanto segue:

  • in Android Studio: Build>Clean Project
  • in altri IDE: Clean, Rebuild, qualunque cosa ...

3
E se i problemi persistono, eliminare la directory di generazione e riprovare. Rimasi bloccato finché non lo feci :)
Laurence Moroney,

Solo l'eliminazione della builddirectory ha funzionato per me. Sembra che sia stato incasinato dal mio ultimo pull dal repository.
Sevastyan Savanyuk,

17

Ho avuto lo stesso problema nei dispositivi Pre Lollipop. Per risolverlo ho fatto come segue. Nel frattempo stavo usando multiDex nel progetto.

1. aggiungilo per build.gradle nel modulo: app

multiDexEnabled = true

dexOptions {
    javaMaxHeapSize "4g"
}

2. aggiungere questa dipendenza

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

3. Quindi nell'applicazione principale

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. Nel file manifest

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

Questo funziona per me. Spero che questo ti aiuti anche :)


4
Non dovresti fare tutti e tre i lavori (estendi MultiDexApplication, implementa attacheBaseContext e modifica il file manifest) per rendere abilitato multidex solo uno è sufficiente: D. developer.android.com/studio/build/multidex.html
Hossein Shahdoost

Se il tuo minSdk è 21 o superiore, non dovresti fare nulla del genere poiché i documenti dicono che è già abilitato per impostazione predefinita. Eppure, questo problema sta arrivando per me con minSdk = 21, qualche soluzione per questo?
Aditya Anand,

15

dovresti esserne sicuro

per aggiungere questa riga al tuo manifest

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>

Ha funzionato anche per me insieme a multiDexEnabled true
ashishdhiman2007

7

Non includere l'intera libreria dei servizi di gioco, ma usa quella di cui hai bisogno. Sostituisci la riga nel tuo build.gradle :

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

con quello appropriato dalle API di Google Play Services , come ad esempio:

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

7

Aggiungi questo al tuo build.gradle a livello di modulo:

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

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

Se si sovrascrive la Applicationclasse, estenderla da MultiDexApplication:

YourApplicationClass extends MultiDexApplication

Se non puoi estenderlo dalla MultiDexApplicationclasse, sostituisci il attachBaseContext()metodo come segue:

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

E non eseguire nulla prima che MultiDex.install(this)venga eseguito.

Se non esegui l'override della Applicationclasse, modifica semplicemente il tuo file manifest come segue:

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

3

Questo dovrebbe funzionare:

Passo 1:

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

Passo 2:

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

Passaggio 3: segui un'altra lezione

public class MyApplication extends MultiDexApplication {
}

Passaggio 4: aggiungere questa riga su manifest

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

2

Nel mio caso, il problema è stato risolto aggiungendo questa riga al modulo build.gradle:

// AGGIUNGI QUESTO IN FONDO

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

fonte


Ho trovato "Plugin con ID" com.google.gms.play-services "non trovato."
Kaleemsagard,

@kaleemsagard lo ha inserito nel tuo progettobuild.gradle dependencies { classpath 'com.google.gms:google-services:3.0.0' }
Borja,

1

Nel mio caso il problema si è verificato dopo la migrazione ad AndroidX. Per qualche ragione, l'app stava chiamando MultiDex.install () con reflection:

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

Ho cambiato il pacchetto da android.support.multidex.MultiDexa androidx.multidex.MultiDex. Ha funzionato.


0

Invece di aggiungere manualmente il nome del pacchetto su build.gradle , è possibile farlo in questo modo:

prima aggiungi questa riga all'inizio

import java.util.regex.Pattern

Quindi aggiungilo su defaultConfig

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

E infine aggiungi il metodo 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)
}

Poiché ci sono molti commenti su Cordova sulla risposta, se stai lavorando con Cordova, non dovresti davvero modificare build.gradlete stesso, ha un commento all'inizio che dice

// FILE GENERATO! NON MODIFICARE!

Quindi, se stai usando un Cordova, la cosa migliore che puoi fare è aggiornare a cordova-android 5.1.0 o versioni successive dove sono già presenti queste modifiche.


0

Il mio era perché Firebase SDK nel file Gradle era impostato su una versione numerica errata.

Ho rimosso i detriti Firebase da Gradle e li ho reinstallati nuovamente usando Firebase Assistant


0

Vai alle impostazioni di Android Studio (premendo Ctrl+Alt+Ssu Windows), cerca Instant Rune deseleziona Enable Instant Run.

Disabilitando Instant Runed eseguendo nuovamente l'applicazione, il problema verrà risolto.


0

Per reagire all'app nativa, l'errore era che java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" si stava ottenendo solo per dispositivi con versione Android <~ 4.4

Risolto semplicemente sostituendo Applicationin MainApplication.javaconMultiDexApplication

NOTA: import android.support.multidex.MultiDexApplication;


0

Ho aggiunto il seguente codice nel file proguard.

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

e ha funzionato nel mio caso.



0

Ho questo errore solo su dispositivi con API inferiore a 21. Nel mio caso, ho dovuto lavorare con un progetto in cui l' multiDexEnabledopzione build.gradleera già impostata su true. Ho controllato il file dex da APK e il numero di metodi di riferimento era inferiore a 64k, quindi il progetto non ha bisogno di essere multidex, quindi ho impostato multiDexEnabledsu false. Questa soluzione ha funzionato per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.