Es gibt ein Problem mit der Android Appcompat v7-Bibliothek auf Samsung-Geräten mit Android 4.2. Ich bekomme immer wieder Abstürze mit dem folgenden Stack-Trace in meiner Entwicklerkonsole:
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
at android.support.v7.widget.PopupMenu.<init>(PopupMenu.java:66)
at com.[my-package-name].CustomActivity$5.onClick(CustomActivity.java:215)
at android.view.View.performClick(View.java:4222)
at android.view.View$PerformClick.run(View.java:17620)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5391)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Dies ist Zeile 215 von CustomActivity.java:
PopupMenu popup = new PopupMenu(CustomActivity.this, mImageViewMenu);
Die Abstürze kommen von einer Reihe von Geräten, aber immer von Samsung und immer von Android 4.2.
Eine schnelle Websuche lässt mich glauben, dass viele Menschen das gleiche Problem haben. Einige der Schritte, die ich versucht habe, um das Problem zu lösen, sind:
- Überprüfen Sie die Eigenschaften des Android-Projekts und stellen Sie sicher, dass die Appcompat-Bibliothek ordnungsgemäß hinzugefügt wurde.
- Überprüfen Sie die Projekteigenschaften für Java Build Path Order und Export, stellen Sie sicher, dass Android Dependencies und Android Private Libraries aktiviert sind.
- Bestätigen Sie, dass die Klasse in der Bibliothek enthalten ist (android.support.v7.internal.view.menu.MenuBuilder).
- Bestätigen Sie, dass sich R.java im Verzeichnis gen für android.support.v7.appcompat befindet.
- Vergewissern Sie sich, dass das AppCompat-Thema in der Aktivität Manifest.xml enthalten ist.
- Projekt reinigen und neu erstellen.
Trotz dieser Schritte und obwohl es auf allen anderen Geräten und Android-Versionen funktioniert, werden die Absturzberichte immer noch angezeigt.
java
android
eclipse
android-appcompat
Matt K.
quelle
quelle
Antworten:
BEARBEITEN:
Die Lösung, die für mich funktioniert hat, war (Verwenden von Proguard), um dies zu ersetzen:
mit diesem:
Das Guthaben geht an die Google-Gruppe Nr. 138 .
Alte Antwort (vorübergehende Problemumgehung): Dies geschieht in einem Projekt, in dem ich einen
Spinner in derActionBar verwende. Meine Lösung bestand darin, diese Bedingungen zu überprüfen und den App-Ablauf zu ändern:Dann in der onCreate-Methode der Aktivität:
Wie bereits erwähnt, handelt es sich hierbei nicht um eine endgültige Lösung, sondern lediglich um eine Möglichkeit, Benutzern den Zugriff auf eingeschränkte Funktionen zu ermöglichen, während eine dauerhaftere Lösung gefunden wird.
quelle
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.i
Wie # 150 von Google Groups sagte
Die bessere Lösung besteht darin, stattdessen die folgenden Zeilen hinzuzufügen:
quelle
-keep class !android.support.v7.internal.view.menu.* implements android.support.v4.internal.view.SupportMenu, android.support.v7.** {*;}
-keep class !android.support.v7.internal.view.menu.**,** {*;}
mit v23 der App-Kompatibilität nicht mehr funktionierte .-keep class !android.support.v7.internal.view.menu.*MenuBuilder*, android.support.v7.** { *; } -keep interface android.support.v7.** { *; }
als Antwort :)Auf welchem Gerät ist dieses Problem aufgetreten? (Samsung / HTC usw.)
Wenn es Samsung ist,
Verschiedene Samsung-Handys enthalten ältere Versionen der Android-Support-Bibliothek im Framework oder Klassenpfad. Wenn Sie die neue Materialunterstützungsbibliothek verwenden, wird dieser Absturz auf diesen Samsung-Geräten angezeigt:
Um dies zu beheben, müssen Sie diese Klasse umbenennen. Der einfachste Weg, dies zu tun, ist das Ausführen von Proguard. Wenn Sie nicht verschleiern möchten, finden Sie hier einen 1-Liner, mit dem Sie nur die betreffenden Klassen umbenennen können:
Es gibt ein Problem, das dieses Problem verfolgt, aber da es sich wirklich um einen Samsung-Fehler handelt, wird es nie behoben. Die einzige Möglichkeit, dies auf der Google / AOSP-Seite zu beheben, besteht darin, diese internen Klassen umzubenennen.
https://code.google.com/p/android/issues/detail?id=78377
quelle
Dieses Problem trat dort auf,
AppCompat 23.1.1
wo das.internal
Paket aus dem Bibliotheksglas entfernt wurde.Wie in den obigen Kommentaren vorgeschlagen (Credits an die Leute, die es dort vorgeschlagen haben), muss sich jetzt auch die Proguard-Konfiguration ändern.
Fügen Sie diese Zeilen zu Ihren Proguard-Dateien hinzu, damit die oben vorgeschlagene Antwort wieder funktioniert:
Anstelle des alten Fixes:
quelle
!android.support.v7.view.menu.**
ist sicherer wegen anderer Klassen wie SubMenuBuilderLaut den letzten Beiträgen des Fehlerberichts sollte dies in der neuen Version der Support-Bibliothek (24.0.0) behoben werden: https://code.google.com/p/android/issues/detail?id=78377 # c374
Jemand behauptete sogar, es habe das Problem behoben.
Diese Version ist seit letztem Monat verfügbar , daher sollten Sie sie aktualisieren.
quelle
Ja. Samsung kennt dieses Problem bereits. Ich kann vorschlagen, dass Sie versuchen, dieselbe Implementierung von Popup von GitHub zu verwenden . Es ist nicht der beste Weg, aber es wird funktionieren.
quelle
Ich hatte das gleiche Problem mit dieser MenuBuilder-Klasse, das im USB-Debugging-Modus nicht gefunden wurde. Ich habe dieses Problem gelöst, indem ich einfach minifyEnabled sowohl im Release- als auch im Debug- BuildTypes- Block von build.gradle auf true gesetzt habe . so was:
Ich habe minifyEnabled im Debug- Typ auf true gesetzt, um zu verhindern, dass die App über das USB-Debugging auf einem Live-Mobilteil abstürzt.
quelle
Ich habe Proguard mit den Standard-Proguard-Eigenschaften aktiviert, die mit einem Eclipse-Projekt bereitgestellt wurden, und das Problem wurde für mich behoben. Basierend auf einigen Kommentaren hier https://code.google.com/p/android/issues/detail?id=78377 müssen einige Leute möglicherweise neu packen mit: -repackageclasses "android.support.v7"
quelle
Ich habe den gleichen Fehler erhalten, als ich versucht habe, eine "Hello World" -App auf meinem Samsung Galaxy Tab 3-Tablet über Android Studio auszuführen. Die App scheint zu starten und stürzt dann sofort ab, und dieser Fehler wird in der Konsole in Android Studio angezeigt. Ich habe ein System-Update auf dem Tablet durchgeführt und kann jetzt die App 'Hello World' ausführen. Der Fehler wird nicht mehr angezeigt. Ich hoffe, dies hilft jemandem, sein Problem zu lösen.
Hinweis: Das Systemupdate, das ich auf dem Tablet durchgeführt habe, hat die Android-Betriebssystemversion nicht aktualisiert, da immer noch angegeben wird, dass die Version 4.2.2 ist.
quelle
Ändern Sie die Compile Sdk-Version Ihres Projekts in "API 18: (JellyBean)".
Der Standardwert ist "Lollipop"
SCHRITTE
quelle