我们刚刚更改了我们的应用程序以使用 appcompat-v7 支持
库,以便利用支持操作栏和支持 Material 主题。使用 v21.0.0 of appcompat-v7
(和 v21.0.0 of support-v4)
,我们现在在 Google Play
和 Crashlytics 中看到崩溃仅来自三星设备运行
Android v4.2.2。这是来自 Google Play 的堆栈跟踪,一旦显示和/或失效,应用程序就会崩溃
actionbar`。
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)
运行 v4.2.2 的其他设备和模拟器不会出现此行为。据我了解,许多 Google 应用程序已经在使用这个新版本的 appcompat
来显示操作栏。如果这些应用没有报告这些设备上的崩溃,了解如何避免/修复这种情况会很有帮助。
我将此作为错误报告给 Google,但由于这是一个开发问题而被关闭。虽然我同意这可能是这种情况,但我想知道目前是否/如何有人能够使用 appcompat-v7 v21.0.0
并且不会在 Samsung 4.2.2 设备上崩溃
。
更新:Google 似乎至少在考虑可能的解决方法。见 this了解详情。
最佳答案
我在这里找到了合适的解决方案:https://stackoverflow.com/a/26641388/1266123
通过使用
-keep class !android.support.v7.internal.view.menu.**,android.support.v7.** {*;}
而不是
-keep class android.support.v7.** {*;}
关于android - appcompat-v7 v21.0.0 导致使用 Android v4.2.2 的三星设备崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26657348/