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();
}
}
}
}
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);
}
}
Dans Android Studio, essayez ceci:
- désactiver "Instant Run"
- Cela devrait marcher
- disable "Instant Run"
This should work
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" />
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").
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
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.