Crash: java.lang.NoClassDefFoundError: android.support.v7.appcompat.R $ layout

Некоторые пользователи моего приложения испытывают этот крах, возможно, это связано с устройствами Samsung. Кто-нибудь еще испытал эту проблему и нашел решение?

java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$layout at android.support.v7.app.ActionBarActivityDelegateBase.ensureSubDecor(ActionBarActivityDelegateBase.java:297) at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:225) at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) at com.afollestad.impression.ui.MainActivity.onCreate(MainActivity.java:160) at android.app.Activity.performCreate(Activity.java:5451) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2359) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2453) at android.app.ActivityThread.access$900(ActivityThread.java:173) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5579) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) at dalvik.system.NativeStart.main(NativeStart.java) 

Строка 160 устанавливает представление содержимого Activity. Представление содержания таково:

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.afollestad.lessen.ui.MainActivity" android:fitsSystemWindows="true"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="?colorPrimary" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="?popup_theme" /> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> <FrameLayout android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent" android:fitsSystemWindows="true" android:layout_gravity="start"> <fragment android:id="@+id/navigation_drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:name="com.afollestad.impression.fragments.NavDrawerFragment" tools:layout="@layout/fragment_navdrawer" android:tag="NAV_DRAWER" /> </FrameLayout> </android.support.v4.widget.DrawerLayout> 

Фрагмент – это простой фрагмент списка.

Solutions Collecting From Web of "Crash: java.lang.NoClassDefFoundError: android.support.v7.appcompat.R $ layout"

Я знаю, что проблема была решена, но если вы придете в этот поток, возможно, это не решит вашу проблему в одной конкретной комбинации:

  • Все работает на 5.0 устройствах
  • Это не работает на 4.x
  • Вы считаете, что вы включили MultiDex
  • Proguard, похоже, не проблема

Это случилось со мной, и я искал 3 часа. Надеюсь, это поможет. Чтобы включить MultiDex на устройствах 4.x, недостаточно модифицировать сборку: вы должны подклассифицировать класс Application . Просто следуй за этим и тем

Надеюсь, поможет.

Я исправил проблему, используя Proguard со следующей конфигурацией:

 -keep class !android.support.v7.internal.view.menu.**,** {*;} -dontwarn -ignorewarnings -dontshrink 

Чтобы включить Proguard с более новыми версиями Gradle (в Android Studio):

 android { ... buildTypes { debug { ... } release { ... minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } 

Proguard-rules.pro – это то, где находятся свойства наверху.

Если вы используете multidex в своем приложении, расширьте класс Application из MultiDexApplication

Если вы используете api compat support-v7, любые библиотеки, ссылка на которые должна быть отмечена, исключают модуль: 'support-v4'

например:

Compile ('com.android.support:cardview-v7:22.2.0') {исключить модуль: 'support-v4'}