Существует проблема с библиотекой Android appcompat v7 на устройствах Samsung под управлением Android 4.2. Я продолжаю получать сбои со следующей трассировкой стека в моей консоли разработчика:
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
at android.support.v7.widget.PopupMenu.<init>(PopupMenu.java:66)
at com.[my-package-name].CustomActivity$5.onClick(CustomActivity.java:215)
at android.view.View.performClick(View.java:4222)
at android.view.View$PerformClick.run(View.java:17620)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5391)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Это строка 215 CustomActivity.java:
PopupMenu popup = new PopupMenu(CustomActivity.this, mImageViewMenu);
Сбои происходят от множества устройств, но всегда Samsung, и всегда Android 4.2.
Быстрый поиск в Интернете заставляет меня поверить, что у многих людей есть одна и та же проблема, и некоторые шаги, которые я пытался решить, это:
- Проверьте свойства проекта Android, убедитесь, что библиотека appcompat добавлена правильно.
- Проверьте свойства порядка и порядка экспорта Java Build Path, убедитесь, что установлены зависимости Android и Android Private Libraries.
- Убедитесь, что класс включен в библиотеку (android.support.v7.internal.view.menu.MenuBuilder).
- Подтвердите, что R.java находится в директории gen для android.support.v7.appcompat.
- Убедитесь, что тема AppCompat включена в действие Manifest.xml.
- Очистить и перестроить проект.
Несмотря на эти шаги, и несмотря на то, что он работает на всех других устройствах и версиях Android, отчеты о сбоях все еще приходят.
java
android
eclipse
android-appcompat
Мэтт К
источник
источник
Ответы:
РЕДАКТИРОВАТЬ:
Решение, которое работало для меня, было (Используя Proguard), чтобы заменить это:
с этим:
Кредит идет в группу Google, # 138 .
Старый ответ (Временное решение): это происходит в проекте, где я использую
счетчик впанели действий. Мое решение состояло в том, чтобы проверить эти условия и изменить поток приложения:Затем в методе действия onCreate:
Как уже указывалось, это не окончательное решение, это просто способ предоставить пользователям доступ к ограниченным функциям, пока найдено более постоянное решение.
источник
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.i
Как # 150 из Google групп сказал
Лучшее решение - добавить следующие строки:
источник
-keep class !android.support.v7.internal.view.menu.* implements android.support.v4.internal.view.SupportMenu, android.support.v7.** {*;}
-keep class !android.support.v7.internal.view.menu.**,** {*;}
не работал больше с v23 из приложения Compat .-keep class !android.support.v7.internal.view.menu.*MenuBuilder*, android.support.v7.** { *; } -keep interface android.support.v7.** { *; }
как ответ :)На каком устройстве вы столкнулись с этой проблемой? (Samsung / HTC и т. Д.)
Если это Samsung,
Различные телефоны Samsung включены старые версии библиотеки поддержки Android в рамках или classpath. Если вы используете новую библиотеку поддержки материалов, вы увидите этот сбой на следующих устройствах Samsung:
Чтобы это исправить, вы должны переименовать этот класс. Самый простой способ сделать это - запустить proguard. Если вы не хотите запутывать, вот 1 вкладыш для переименования только оскорбительных классов:
Есть проблема отслеживания этой проблемы, но, поскольку это действительно ошибка Samsung, она никогда не будет исправлена с их стороны. Единственный способ исправить это на стороне Google / AOSP - переименовать эти внутренние классы.
https://code.google.com/p/android/issues/detail?id=78377
источник
Эта проблема вернулась,
AppCompat 23.1.1
когда.internal
пакет был удален из библиотеки JAR.Как указано в комментариях выше (благодарность тем, кто предложил это там), теперь также должна измениться конфигурация proguard.
Чтобы ответ, предложенный выше, снова работал, попробуйте добавить эти строки в ваши файлы proguard:
Вместо старого исправления:
источник
!android.support.v7.view.menu.**
безопаснее из-за других классов, таких как SubMenuBuilderСогласно последним сообщениям об ошибке, это следует исправить в новой версии библиотеки поддержки (24.0.0): https://code.google.com/p/android/issues/detail?id=78377. # c374
Кто-то даже утверждал, что это исправило это.
Эта версия доступна с прошлого месяца , поэтому вы должны обновить ее.
источник
Да. Samsung уже знает об этой проблеме. Я могу предложить вам попробовать использовать ту же реализацию Popup от GitHub . Это не лучший способ, но будет работать.
источник
У меня была та же проблема этого класса MenuBuilder, не найденного в режиме отладки USB. Я решил эту проблему, просто установив для minifyEnabled значение true в блоке release и debug buildTypes файла build.gradle . как это:
Я установил для minifyEnabled значение true в типе отладки, чтобы предотвратить сбой приложения через отладку по USB на живой телефон.
источник
Я включил proguard со свойствами по умолчанию, предоставленными в проекте eclipse, и проблема была исправлена для меня. Основываясь на некоторых комментариях здесь https://code.google.com/p/android/issues/detail?id=78377 , некоторым людям, возможно, придется перепаковать, используя: -repackageclasses "android.support.v7"
источник
Я получил ту же ошибку при попытке запустить приложение «Hello World» на своем планшете Samsung Galaxy Tab 3 через Android Studio. Приложение может запуститься, а затем мгновенно завершить работу, и эта ошибка отобразится в консоли в Android Studio. Я выполнил обновление системы на планшете, и теперь я могу запустить приложение «Hello World», и я больше не получаю сообщение об ошибке. Я надеюсь, что это поможет кому-то решить их проблему.
Примечание. Обновление системы, которое я выполнил на планшете, не обновило версию ОС Android, поскольку в ней по-прежнему указывается версия 4.2.2.
источник
Измените версию вашего проекта Compile Sdk на «API 18: (JellyBean)»
По умолчанию установлено значение «Lollipop»
ШАГОВ
источник