appcompat-V7 v21.0.0造成死机的三星设备与Android v4.2.2 [英] appcompat-v7 v21.0.0 causing crash on Samsung devices with Android v4.2.2

查看:167
本文介绍了appcompat-V7 v21.0.0造成死机的三星设备与Android v4.2.2的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们只是改变了我们的应用程序使用 appcompat-V7支持库,以便采取的支持动作条和支持材料主题的优势。使用 v21.0.0 appcompat-V7的(和 v21.0.0支持-V4),我们现在看到的崩溃在谷歌播放和Crashlytics只能从三星设备运行的Andr​​oid v4.2.2 。下面是来自谷歌的堆栈跟踪游戏和应用程序似乎一旦崩溃的 actionbar`显示和/或失效。

  java.lang.NoClassDefFoundError的:android.support.v7.internal.view.menu.MenuBuilder
在android.support.v7.app.ActionBarActivityDelegateBase.initializePanelMenu(ActionBarActivityDelegateBase.java:991)
在android.support.v7.app.ActionBarActivityDelegateBase.$p$pparePanel(ActionBarActivityDelegateBase.java:1041)
在android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1259)
在android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:80)
在android.support.v7.app.ActionBarActivityDelegateBase $ 1.运行(ActionBarActivityDelegateBase.java:116)
在android.os.Handler.handleCallback(Handler.java:725)
在android.os.Handler.dispatchMessage(Handler.java:92)
在android.os.Looper.loop(Looper.java:176)
在android.app.ActivityThread.main(ActivityThread.java:5299)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1102)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
在dalvik.system.NativeStart.main(本机方法)
 

其他设备和运行v4.2.2模拟器做没有表现出这种行为。这是我的理解是,许多谷歌应用程序已经在使用 appcompat 此新版本可以显示操作栏。如果这些应用程序没有报告这些设备上的崩溃,这将有助于了解如何被避免/固定的。

我报这个作为谷歌的错误,但它得到了封闭,这是一个发展问题的原因。虽然我不同意,这可能是这种情况,我想知道是否/如何人目前能够使用 appcompat-V7 v21.0.0 ,并没有得到崩溃的三星4.2.2设备

更新:它看起来像谷歌至少在考虑可能的变通办法。请参见了解详细信息。

解决方案

我找到了正确的解决方案在这里:<一href="http://stackoverflow.com/a/26641388/1266123">http://stackoverflow.com/a/26641388/1266123

通过使用

  -keep类android.support.v7.internal.view.menu **,** android.support.v7!{*;}
 

而不是

  -keep类android.support.v7 **。{*;}
 

We just changed our application to use the appcompat-v7 support library in order to take advantage of the support actionbar and support Material themes. Using v21.0.0 of appcompat-v7 (andv21.0.0 of support-v4), we are now seeing crashes in Google Play and Crashlytics only from Samsung devicesrunningAndroid v4.2.2. Here is the stack trace from Google Play and the app appears to crash as soon as theactionbar` is shown and/or invalidated.

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)

Other devices and emulators running v4.2.2 do no exhibit this behavior. It's my understanding that many Google apps are already using this new version of appcompat to display the action bar. If these apps are not reporting crashes on these devices, it would be helpful to know how this is being avoided/fixed.

I reported this as a bug to Google but it got closed with the reason that it is a development issue. Although I do agree this may be the case, I'm wondering if/how anyone is currently able to use appcompat-v7 v21.0.0 and not get crashes on Samsung 4.2.2 devices.

Update: It looks like Google is at least considering possible workarounds for this. See this for details.

解决方案

I found the proper solution here: http://stackoverflow.com/a/26641388/1266123

By using

-keep class !android.support.v7.internal.view.menu.**,android.support.v7.** {*;}

instead of

-keep class android.support.v7.** {*;}

这篇关于appcompat-V7 v21.0.0造成死机的三星设备与Android v4.2.2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆