совместимости приложений-В7 в21.0.0, приводившая к аварии на устройствах Samsung с Android версии 4.2.2


мы просто изменили наше приложение, чтобы использовать appcompat-v7 support библиотека для того, чтобы воспользоваться поддержкой actionbar и поддержки темы материалов. Используя v21.0.0 of appcompat-v7v21.0.0 of support-v4), Теперь мы видим сбои в Google Play и Crashlytics только от устройств SamsungrunningAndroid v4.2. 2. Here is the stack trace from Google Play and the app appears to crash as soon as theactionbar ' отображается и / или недействительным.

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.access0(ActionBarActivityDelegateBase.java:80)
at android.support.v7.app.ActionBarActivityDelegateBase.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, по крайней мере учитывая возможные обходные пути для этого. Смотрите этой для сведения.

9 77

9 ответов:

Я нашел правильное решение здесь: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 сказал

потому что осторожно с-держать класс !андроид.поддержка.v7.внутренний.вид.меню.**. Существует ряд классы там, на которые ссылаются из ресурсов 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 the .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

Если кто-то заинтересован в использовании решения без progaurd .

читать ссылке Я пробовал это в одном из моих приложений, которые дали исключение на setSupportActionBar(панель инструментов) в onCreate().

его довольно просто добавить попробовать блок catch вокруг вызова

try {

 setSupportActionBar(toolbar);

} catch (Throwable t) {

 // WTF SAMSUNG!

}

Я столкнулся с той же проблемой на Tecno P9, но после использования build tools 24 и для моей библиотеки поддержки я использовал 24.2.0, это было исправлено.

измените версию Sdk компиляции вашего проекта на " API 18: (JellyBean)"

по умолчанию "чупа-чупс"

пока это решило мою проблему на Qmobile i9

шаги

  1. щелкните правой кнопкой мыши на вашем проекте и выберите Открыть Настройки модуля (или нажмите F4)
  2. на вкладке "свойства" Скомпилированная Версия Sdk

Заменить AppCompatActivity С Активностью

Это помогло мне.

заменить

public class class_name extends AppCompatActivity
{

.........

}

С

public class class_name extends Activity
{

.........

}

это помогло мне.