Ich habe eine Anwendung, die mit Firebase verbunden ist. Das Problem ist, wenn die App in einem Gerät installiert wird (das auf mehreren Geräten funktioniert). Ich lese viele Foren und niemand arbeitet. Ich lese here und this . und so weiter. Danke !!
Der Fehler ist hier.
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)
Hier ist die Startklasse
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();
}
}
}
}
Ich habe auch das gleiche Problem mit Firebase gehabt, wenn die Anwendung unter API 19 (<4.4.2) -Geräten ausgeführt wurde, und zwar aufgrund eines Fehlers von Multidex
. Dann unten Lösung Arbeit für mich:
Im App-Modul 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'
aktualisierungsname in 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>
Erstellen Sie eine MyApplication.Java-Datei
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
In Android Studio versuchen Sie Folgendes:
- "Instant Run" deaktivieren
- Das sollte funktionieren
- disable "Instant Run"
This should work
Fügen Sie einfach unten in Ihrer Projektdatei AndroidManifest.xml
-Datei Zeilen ein, , Wenn diese nicht in application tag liegen
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
Ich habe das gleiche Problem. Ich habe die App vom Gerät/Emulator deinstalliert und dann erneut installiert (von Android Studio aus, Ausführen).
Die Deaktivierung des Sofortlaufs hat das Problem für mich behoben.
Android Studio -> Einstellungen -> Erstellen, Ausführen, Bereitstellen -> Instant Run
- Deaktivieren Sie das Kontrollkästchen neben "Instant Run aktivieren".
-OK klicken
Wenn Sie kürzlich die Firebase-Abhängigkeitsversion in Gradle geändert haben, müssen Sie möglicherweise auch die neueste Version von Google Repository im Android SDK-Manager aktualisieren.
Wenn Sie das Google Repository zu diesem Zeitpunkt nicht aktualisieren können, ändern Sie die Gradle-Abhängigkeitsversion zurück in eine niedrigere Version.