Ошибка: android.support.design.internal.NavigationMenuItemView

Я тестирую свой проект на MotoG (Lollipop 5.1) и столкнулся с проблемой, которой не было на XperiaT2 (KitKat 4.4). Журнал ошибок:

 java.lang.NoClassDefFoundError: android.support.design.internal.NavigationMenuItemView
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:309)

Я использую библиотеку android.support:design, но не создаю экземпляр NavigationView, я пытался использовать

compile 'com.android.support:design:22.2.1'

и

compile 'com.android.support:design:23.1.1'

И не решил. Возможно, проблема связана с ранее существовавшей проблемой с библиотекой support:appcompat, когда эта ошибка возникла, когда я попытался использовать более низкую версию 23.1.1.

NoClassDefFoundError: android.support.v4.hardware.fingerprint.FingerprintManagerCompatApi23$1

Моя фактическая конфигурация Gradle:

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.1'

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 21
    }
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.google.android.gms:play-services:8.1.0'
    compile 'com.android.support:design:22.2.0'
    compile 'com.android.support:cardview-v7:23.0.1'
    compile 'com.android.support:recyclerview-v7:23.0.1'

Пожалуйста, помогите.

ОБНОВИТЬ

Когда я пытаюсь использовать

buildToolsVersion '23.0.2'
'com.android.support:appcompat-v7:23.1.1'
'com.android.support:design:23.1.1'

У меня ошибка при отображении предварительного просмотра на студии Android.

Exception Details java.lang.IllegalArgumentException: You need to use a Theme.AppCompat theme (or descendant) with the design library.

Даже используя мою тему таким образом

<style name="MyTheme" parent="Theme.AppCompat.Light">

person 7xRobin    schedule 17.12.2015    source источник
comment
Вы пытались использовать buildToolsVersion '23.0.2' и скомпилировать 'com.android.support:design:23.1.1'?   -  person Alonso Ato Neyra    schedule 17.12.2015
comment
@Coeus Я попытался, и снова появляется эта ошибка: NoClassDefFoundError: android.support.v4.hardware.fingerprint.FingerprintManagerCompatApi23$1   -  person 7xRobin    schedule 17.12.2015


Ответы (2)


Возможно, вы могли бы попробовать следующий код и повторить попытку:

./gradlew clean

Или это:

gradle clean

Согласно некоторым ссылкам, которые я ищу, они могут помочь вам.

person Anthonyeef    schedule 17.12.2015

Попробуйте решение (я добавил ниже) из: NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder

РЕДАКТИРОВАТЬ:

Решение, которое сработало для меня, было (использование Proguard), чтобы заменить это:

-keep class android.support.v4.** { *; } 
-keep interface android.support.v4.** { *; }

-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }

с этим:

# Allow obfuscation of android.support.v7.internal.view.menu.**
# to avoid problem on Samsung 4.2.2 devices with appcompat v21
# see https://code.google.com/p/android/issues/detail?id=78377
-keep class !android.support.v7.internal.view.menu.**,android.support.** {*;}

Кредит принадлежит группе Google: https://code.google.com/p/android/issues/detail?id=78377 #138

Старый ответ (временный обходной путь): это происходит в проекте, где я использую spinner в ActionBar. Мое решение состояло в том, чтобы проверить эти условия и изменить поток приложения:

public static boolean isSamsung
if (isSamsung_4_2_2()) {
    setContentView(R.layout.activity_main_no_toolbar);
} else {
    setContentView(R.layout.activity_main);
}
2_2() { String deviceMan = Build.MANUFACTURER; String deviceRel = Build.VERSION.RELEASE; return "samsung".equalsIgnoreCase(deviceMan) && deviceRel.startsWith("4.2.2"); }

Затем в методе onCreate действия:

if (isSamsung_4_2_2()) {
    setContentView(R.layout.activity_main_no_toolbar);
} else {
    setContentView(R.layout.activity_main);
}

Как уже отмечалось, это не окончательное решение, это просто способ предоставить пользователям доступ к ограниченным функциям, пока не будет найдено более постоянное решение.

Похоже, это похожая проблема, поэтому попробуйте и дайте мне знать, если это сработает.

РЕДАКТИРОВАТЬ: Согласно этой проблеме Gihub, https://github.com/JoanZapata/android-iconify/issues/93, где вы найдете эту подсказку:

При использовании com.android.support:design:22.2.0 ошибки нет.

Ошибка возникает только тогда, когда я использую com.android.support:design:22.2.1

Понизьте ваши инструменты сборки до 22.2.0 - это может быть проблема с Android.

person piotrek1543    schedule 17.12.2015
comment
Примечание: попробуйте удалить ProGuard. Google уже устарел - person piotrek1543; 17.12.2015
comment
Я пытался использовать класс -keep в Proguard, но все равно не работал. - person 7xRobin; 17.12.2015
comment
Я не понимаю вашего комментария, это действительно для удаления Proguard? Как это сделать? - person 7xRobin; 17.12.2015
comment
#robindesu, пожалуйста, добавьте свой xml-файл - person piotrek1543; 18.12.2015
comment
Какой xml вы имеете в виду? Как я сказал, я на самом деле не использую NavigationView. Я могу опубликовать xml основной деятельности, если это поможет. - person 7xRobin; 22.12.2015
comment
хорошо, ничего там. Посмотрите на свой build.gradle. есть четыре библиотеки с именами, начинающимися с com.android.support. измените все их версии на одну конкретную, например 22.2.0 - person piotrek1543; 04.01.2016
comment
попробуйте с версией 23.01 - применить к каждой из этих четырех зависимостей - person piotrek1543; 05.01.2016
comment
Не работает. Я предполагаю, что проблема в некоторой несовместимости между appcompat и библиотеками дизайна. Когда я использовал 23 версию дизайна, появляется ошибка для обработки предварительного просмотра (Сведения об исключении java.lang.IllegalArgumentException: вам необходимо использовать тему Theme.AppCompat (или потомок) с библиотекой дизайна.). Даже используя parent=Theme.AppCompat.Light в моей теме. - person 7xRobin; 05.01.2016