web-dev-qa-db-fra.com

"Impossible d'obtenir le fournisseur com.google.firebase.provider.FirebaseInitProvider" Chemin d'erreur Android

J'ai une application qui est connectée à firebase.Le problème est quand installer l'application dans le périphérique (travaillant sur plusieurs périphériques). Je lis beaucoup de forums et personne ne fonctionne. Je lis ici et this et ainsi de suite. Merci !!

L'erreur est ici.

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.dev.ptruck, PID: 8833
              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.dev.ptruck-17.apk"],nativeLibraryDirectories=[/data/app-lib/com.dev.ptruck-17, /vendor/lib, /system/lib]]
                  at Android.app.ActivityThread.installProvider(ActivityThread.Java:5196)
                  at Android.app.ActivityThread.installContentProviders(ActivityThread.Java:4788)
                  at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4728)
                  at Android.app.ActivityThread.access$1500(ActivityThread.Java:166)
                  at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1343)
                  at Android.os.Handler.dispatchMessage(Handler.Java:102)
                  at Android.os.Looper.loop(Looper.Java:136)
                  at Android.app.ActivityThread.main(ActivityThread.Java:5584)
                  at Java.lang.reflect.Method.invokeNative(Native Method)
                  at Java.lang.reflect.Method.invoke(Method.Java:515)
                  at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1268)
                  at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1084)
                  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.dev.ptruck-17.apk"],nativeLibraryDirectories=[/data/app-lib/com.dev.ptruck-17, /vendor/lib, /system/lib]]
                  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:56)
                  at Java.lang.ClassLoader.loadClass(ClassLoader.Java:497)
                  at Java.lang.ClassLoader.loadClass(ClassLoader.Java:457)
                  at Android.app.ActivityThread.installProvider(ActivityThread.Java:5181)
                  at Android.app.ActivityThread.installContentProviders(ActivityThread.Java:4788) 
                  at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4728) 
                  at Android.app.ActivityThread.access$1500(ActivityThread.Java:166) 
                  at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1343) 
                  at Android.os.Handler.dispatchMessage(Handler.Java:102) 
                  at Android.os.Looper.loop(Looper.Java:136) 
                  at Android.app.ActivityThread.main(ActivityThread.Java:5584) 
                  at Java.lang.reflect.Method.invokeNative(Native Method) 
                  at Java.lang.reflect.Method.invoke(Method.Java:515) 
                  at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1268) 
                  at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1084) 
                  at dalvik.system.NativeStart.main(Native Method) 

Voici la classe de départ

public class StartActivity extends Activity {
private static final String FIREBASE_URL = "https://database.firebaseio.com/";
private Firebase myFirebaseRef = null;
View rootView;
String uid;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start);

    Firebase.setAndroidContext(this);
    final ProgressBar p = (ProgressBar) findViewById(R.id.start_progress_bar);

}
private void checkUserLogin() {
                    myFirebaseRef.addAuthStateListener(new Firebase.AuthStateListener() {
                        @Override
                        public void onAuthStateChanged(AuthData authData) {
                            if (authData != null) {

                                System.out.println(myFirebaseRef.getKey());
                                Intent toMainActivity = new Intent(getApplicationContext(), MenuActivity.class);
                                uid = myFirebaseRef.getAuth().getUid();
                                toMainActivity.putExtra("user_id", uid);
                                finish();
                                startActivity(toMainActivity);

                            } else if (authData == null) {

                                Intent toMainActivity = new Intent(getApplicationContext(), LoginActivity.class);
                                startActivity(toMainActivity);
                                // user is not logged in
                            }
                        }
                    });
}
private Runnable task = new Runnable() {
    public void run() {

        checkUserLogin();
    }
};
@Override
protected void onStart() {
    super.onStart();
    if(myFirebaseRef == null) {
        myFirebaseRef = new Firebase(FIREBASE_URL);
    }
    Handler handler = new Handler();
    handler.postDelayed(task, 3000);

}
@Override
protected void onDestroy() {
    super.onDestroy();

    unbindDrawables(rootView);
    rootView = null;
    System.gc();

}
protected void unbindDrawables(View view) {
    if (view != null) {
        if (view.getBackground() != null) {
            view.getBackground().setCallback(null);
        }
        if (view instanceof ViewGroup && !(view instanceof AdapterView)) {
            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                unbindDrawables(((ViewGroup) view).getChildAt(i));
            }
            ((ViewGroup) view).removeAllViews();
        }

    }

}

}

26
azsoftco

J'ai également rencontré le même problème avec Firebase lors de l'exécution de l'application au-dessous des périphériques API 19 (<4.4.2) en raison d'une erreur de Multidex. Puis ci-dessous solution travail pour moi: 

Dans le module d'application build.gradle

Android {
   ...
   defaultConfig {
       multiDexEnabled true
       ...
   }
}

dependencies {
  // add dependency 
  compile 'com.Android.support:multidex:1.0.1'
}

// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'

nom de la mise à jour dans AndroidManifest.xml

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

     // ...
</application>

Créez un fichier MyApplication.Java

public class MyApplication extends Application {

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

}
64
Garg's

Dans Android Studio, essayez ceci:

  1. désactiver "Instant Run"
  2. Cela devrait marcher
  3. disable "Instant Run"

This should work

22
Antonio

Insérez simplement les lignes ci-dessous dans votre fichier AndroidManifest.xml du projet, Si elles ne se trouvent pas dans application tag

<meta-data
        Android:name="com.google.Android.gms.version"
        Android:value="@integer/google_play_services_version" />
1
Vishalpari Goswami

J'ai le même problème, ce que j'ai fait est de désinstaller l'application de périphérique/émulateur, puis de la réinstaller (à partir d'Android Studio, bouton "Exécuter").

0
Lee

La désactivation de l'exécution instantanée a corrigé le problème pour moi.

Android Studio -> Préférences -> Création, exécution, déploiement -> Exécution instantanée

-Décochez la case "Activer l'exécution instantanée ..."

-Cliquez sur OK

0
Chris M

Si vous avez récemment modifié la version de dépendance de la base de feu dans votre répertoire, vous devrez peut-être également mettre à jour la dernière version de Google Repository dans le gestionnaire de SDK Android.

Si vous ne pouvez pas mettre à jour le référentiel Google à ce moment-là, essayez de redéfinir la version de dépendance de gradle.

0
sats