android - appcompat-v7 v21.0.0 导致使用 Android v4.2.2 的三星设备崩溃

标签 android proguard android-appcompat samsung-mobile android-4.2-jelly-bean

我们刚刚更改了我们的应用程序以使用 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/

相关文章:

android - Proguard 混淆使我的基于通信的应用程序的更新版本成为 'impossible' 以与旧版本的消息传递兼容

java - Proguard 和第 3 方库

android - 我如何制作这样的操作栏

安卓 Lint : How to suppress all warnings associated with support library?

android - 有没有办法避免 android 布局上的尺寸规范?

android - Android应用在旧设备上崩溃

Android - Proguard 未使用 Joda Time jar 文件编译

android - Unity Android with AppCompat Rejecting re-init on previously failed class java.lang.Class

android - 我如何在android中的搜索栏中绘制可绘制的进度

android - 命令行中的 Gradlew 不会创建签名的 APK