appcompat-v7 v21.0.0导致与Android v4.2.2的三星设备崩溃
我们只是将应用程序更改为使用appcompat-v7 support
库,以利用支持操作栏并支持Material主题。 使用v21.0.0 of appcompat-v7
(和v21.0.0 of support-v4)
,我们现在只能在running
Android v4.2.2的三星设备running
看到Google Play
和Crashlytics中的崩溃. Here is the stack trace from Google Play and the app appears to crash as soon as the
. Here is the stack trace from Google Play and the app appears to crash as soon as the
栏显示和/或失效. Here is the stack trace from Google Play and the app appears to crash as soon as the
。
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的其他设备和仿真程序不会显示此行为。 这是我的理解,许多谷歌应用程序已经使用这个新版本的appcompat
来显示操作栏。 如果这些应用程序不报告这些设备上的崩溃,那么知道如何避免/修复这将是有帮助的。
我将这个报告称为Google的一个漏洞,但是由于这是一个开发问题,所以它已经closures了。 虽然我同意这可能是这种情况,我想知道是否/目前如何能够使用appcompat-v7 v21.0.0
而不是在Samsung 4.2.2 devices
上崩溃。
更新:看起来谷歌至less考虑可能的解决方法。 详情请参阅此 。
我在这里find了适当的解决scheme: https : //stackoverflow.com/a/26641388/1266123
通过使用
-keep class !android.support.v7.internal.view.menu.**,android.support.v7.** {*;}
代替
-keep class android.support.v7.** {*;}
正如https://code.google.com/p/android/issues/detail?id=78377上的; #150所示
因为谨慎使用-keep类!android.support.v7.internal.view.menu。**。 那里有很多类是从appcompat的资源引用的。
更好的解决方法是添加以下行代替:
-keep class !android.support.v7.internal.view.menu.MenuBuilder, !android.support.v7.internal.view.menu.SubMenuBuilder, android.support.v7.** { *; } -keep interface android.support.v7.** { *; }
由于Appcompat 23.1.1
AppCompat jar中的.internal
包已被删除。
使用proguard更新修复程序:
#FOR APPCOMPAT 23.1.1: -keep class !android.support.v7.view.menu.*MenuBuilder*, android.support.v7.** { *; } -keep interface android.support.v7.* { *; }
对于所有有这个问题,只有解决方法到目前为止似乎使用proguard。 请参阅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结帐讨论;
如果有人在使用没有progaurd的解决scheme感兴趣。
阅读链接我已经在我的应用程序中的一个onCreate()setSupportActionBar(工具栏)例外的尝试。
它非常简单,只是在呼叫中添加try catch块
try { setSupportActionBar(toolbar); } catch (Throwable t) { // WTF SAMSUNG! }
我在Tecno P9上遇到了同样的问题,但在使用构build工具24和我的支持库之后,我使用了24.2.0,它被修复了。
将项目的编译Sdk版本更改为“API 18:(JellyBean)”
默认设置为“棒棒糖”
到目前为止,它解决了我在Qmobile i9上的问题
脚步
- 右键单击您的项目并select打开模块设置(或按F4)
- 在属性选项卡编译的Sdk版本
将AppCompatActivityreplace为活动
这帮助了我。
更换
public class class_name extends AppCompatActivity { ......... }
同
public class class_name extends Activity { ......... }
这帮助了我。
- Android“只有创build视图层次结构的原始线程才能触及其视图。”
- 是否有开发iPhone / Android应用程序的多平台框架?
- Android:UnknownHostException
- 获得点击项目及其在RecyclerView中的位置
- 如何改变SwitchCompat的轨道颜色
- 片段 – 指定的孩子已经有一个父母。 您必须首先调用子对象的父对象的removeView()
- 如何在Android中为视图添加animation,并使其保持在新的位置/大小?
- 为什么Eclipse创build新项目时会自动添加appcompat v7库支持?
- setBackgroundResource()放弃我的XML布局属性