Мы просто изменили наше приложение, чтобы использовать appcompat-v7 support
библиотеку, чтобы воспользоваться преимуществами панели действий поддержки и поддерживать темы материалов. Используя v21.0.0 of appcompat-v7
(и v21.0.0 of support-v4)
, теперь мы видим сбои Google Play
и Crashlytics только на устройствах Samsung, running
панель . Here is the stack trace from Google Play and the app appears to crash as soon as the
действий Android v4.2.2 отображается и / или недействительна.
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 devices
.
Обновление: похоже, что Google по крайней мере рассматривает возможные обходные пути для этого. См. Это для деталей.
источник
Ответы:
Я нашел здесь подходящее решение: https://stackoverflow.com/a/26641388/1266123
Используя
-keep class !android.support.v7.internal.view.menu.**,android.support.v7.** {*;}
вместо
-keep class android.support.v7.** {*;}
источник
Как сказано в № 150 из https://code.google.com/p/android/issues/detail?id=78377
Лучшее решение - добавить вместо этого следующие строки:
-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
в.internal
пакете в банке AppCompat был удален.Обновлено исправление с использованием 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
источник
Если кому интересно использовать решение без прогаурда.
Прочтите ссылку, по которой я пробовал это в одном из своих приложений, которое выдало исключение на setSupportActionBar (панель инструментов) в onCreate ().
Это довольно просто, просто добавьте блок try catch вокруг вызова
try { setSupportActionBar(toolbar); } catch (Throwable t) { // WTF SAMSUNG! }
источник
Я столкнулся с той же проблемой на Tecno P9, но после использования инструментов сборки 24 и для моей библиотеки поддержки, которую я использовал 24.2.0, она была исправлена.
источник
Измените версию Compile Sdk вашего проекта на «API 18: (JellyBean)»
По умолчанию установлено значение «Леденец».
Пока это решило мою проблему на Qmobile i9
ШАГИ
источник
Заменить AppCompatActivity на Activity
Это мне помогло.
источник
Заменить
public class class_name extends AppCompatActivity { ......... }
С участием
public class class_name extends Activity { ......... }
Это мне помогло.
источник