Wir haben gerade unsere Anwendung geändert, um die appcompat-v7 support
Bibliothek zu verwenden, um die Support-Aktionsleiste und die Support-Material-Themen zu nutzen. Mit v21.0.0 of appcompat-v7
(und v21.0.0 of support-v4)
, wir sehen 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` wird angezeigt und / oder ungültig gemacht.
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 unter v4.2.2 weisen dieses Verhalten nicht auf. Nach meinem Verständnis verwenden viele Google Apps bereits diese neue Version von appcompat
, um die Aktionsleiste anzuzeigen. Wenn diese Apps keine Abstürze auf diesen Geräten melden, ist es hilfreich zu wissen, wie dies vermieden / behoben wird.
Ich habe dies als Fehler bei Google gemeldet, aber es wurde mit dem Grund geschlossen, dass es sich um ein Entwicklungsproblem handelt. Obwohl ich damit einverstanden bin, dass dies der Fall sein kann, frage ich mich, ob / wie jemand derzeit in der Lage ist, zu verwenden appcompat-v7 v21.0.0
und keine Abstürze zu bekommen Samsung 4.2.2 devices
.
Update: Es sieht so aus, als würde Google zumindest mögliche Problemumgehungen in Betracht ziehen. Siehe dies für Details.
quelle
Antworten:
Ich habe hier die richtige Lösung gefunden: https://stackoverflow.com/a/26641388/1266123
Durch die Nutzung
-keep class !android.support.v7.internal.view.menu.**,android.support.v7.** {*;}
anstatt
-keep class android.support.v7.** {*;}
quelle
Wie # 150 von https://code.google.com/p/android/issues/detail?id=78377 sagte
Die bessere Lösung besteht darin, 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.** { *; }
quelle
Da
Appcompat 23.1.1
das.internal
Paket im AppCompat-Jar entfernt wurde.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.* { *; }
quelle
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
quelle
Wenn jemand Interesse an einer Lösung ohne Progaurd hat.
Lesen Sie den Link, den ich in einer meiner Apps ausprobiert habe, die die Ausnahme für setSupportActionBar (Symbolleiste) in onCreate () gab.
Es ist ziemlich einfach, einfach einen try catch-Block um den Anruf herum hinzuzufügen
try { setSupportActionBar(toolbar); } catch (Throwable t) { // WTF SAMSUNG! }
quelle
Ich habe das gleiche Problem bei Tecno P9 festgestellt, aber nachdem ich die Build-Tools 24 verwendet und für meine Support-Bibliothek 24.2.0 verwendet habe, wurde es behoben.
quelle
Ändern Sie die Compile Sdk-Version Ihres Projekts in "API 18: (JellyBean)".
Der Standardwert ist "Lollipop".
Bisher hat es mein Problem auf Qmobile i9 gelöst
SCHRITTE
quelle
Ersetzen Sie AppCompatActivity durch Activity
Das hat mir geholfen.
quelle
Ersetzen
public class class_name extends AppCompatActivity { ......... }
Mit
public class class_name extends Activity { ......... }
Das hat mir geholfen.
quelle