Wir haben gerade unsere Anwendung geändert, um die Bibliothek appcompat-v7 support
Zu verwenden, um die Support-Aktionsleiste und die Support-Material-Themen zu nutzen. Bei Verwendung von v21.0.0 of appcompat-v7
(Und v21.0.0 of support-v4)
Sehen wir jetzt Abstürze in Google Play
Und Crashlytics nur von Samsung-Geräten running
Android v4.2.2 . Here is the stack trace from Google Play and the app appears to crash as soon as the
Actionbar` angezeigt und/oder ungültig gemacht wird.
Java.lang.NoClassDefFoundError: Android.support.v7.internal.view.menu.MenuBuilder
at Android.support.v7.app.ActionBarActivityDelegateBase.initializePanelMenu(ActionBarActivityDelegateBase.Java:991)
at Android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.Java:1041)
at Android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.Java:1259)
at Android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.Java:80)
at Android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.Java:116)
at Android.os.Handler.handleCallback(Handler.Java:725)
at Android.os.Handler.dispatchMessage(Handler.Java:92)
at Android.os.Looper.loop(Looper.Java:176)
at Android.app.ActivityThread.main(ActivityThread.Java:5299)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:511)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1102)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:869)
at dalvik.system.NativeStart.main(Native Method)
Andere Geräte und Emulatoren, auf denen Version 4.2.2 ausgeführt wird, weisen dieses Verhalten nicht auf. Nach meinem Verständnis verwenden bereits viele Google-Apps diese neue Version von appcompat
, um die Aktionsleiste anzuzeigen. Wenn diese Apps auf diesen Geräten keine Abstürze melden, ist es hilfreich zu wissen, wie dies vermieden/behoben wird.
Ich habe dies Google als Fehler gemeldet, aber es wurde geschlossen, weil es sich um ein Entwicklungsproblem handelt. Obwohl ich dem zustimme, frage ich mich, ob/wie jemand derzeit appcompat-v7 v21.0.0
Verwenden kann und keine Abstürze bei Samsung 4.2.2 devices
Verursacht.
Update: Es sieht so aus, als würde Google zumindest mögliche Problemumgehungen in Betracht ziehen. Siehe this für Details.
Ich habe hier die richtige Lösung gefunden: https://stackoverflow.com/a/26641388/126612
Durch die Nutzung
-keep class !Android.support.v7.internal.view.menu.**,Android.support.v7.** {*;}
anstatt von
-keep class Android.support.v7.** {*;}
Wie # 150 von https://code.google.com/p/Android/issues/detail?id=78377 sagte
Weil vorsichtig mit -keep class! Android.support.v7.internal.view.menu. **. Dort gibt es eine Reihe von Klassen, auf die aus den Ressourcen von appcompat verwiesen wird.
Die bessere Lösung ist, stattdessen die folgenden Zeilen hinzuzufügen:
-keep class !Android.support.v7.internal.view.menu.MenuBuilder, !Android.support.v7.internal.view.menu.SubMenuBuilder, Android.support.v7.** { *; }
-keep interface Android.support.v7.** { *; }
Schon seit Appcompat 23.1.1
das .internal
-Paket in der AppCompat-JAR wurde entfernt.
Update mit Proguard aktualisiert:
#FOR APPCOMPAT 23.1.1:
-keep class !Android.support.v7.view.menu.*MenuBuilder*, Android.support.v7.** { *; }
-keep interface Android.support.v7.* { *; }
Für alle, die dieses Problem haben, scheint bisher nur die Problemumgehung Proguard zu verwenden. Diskussion zur Kasse unter https://code.google.com/p/Android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id = 78377
Wenn jemand an einer Lösung ohne Programm interessiert ist.
Lesen Sie die Link Ich habe dies in einer meiner Apps versucht, die die Ausnahme auf setSupportActionBar (Symbolleiste) in onCreate () gab.
Es ist ziemlich einfach, fügen Sie einfach try catch block um den Aufruf hinzu
try {
setSupportActionBar(toolbar);
} catch (Throwable t) {
// WTF SAMSUNG!
}
Ich habe das gleiche Problem bei Tecno P9 festgestellt, aber nachdem ich Build-Tools 24 verwendet habe und für meine Support-Bibliothek 24.2.0 verwendet habe, wurde es behoben.