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

我的应用程序的一些用户遇到这种崩溃,似乎可能与三星设备有关。 有没有人遇到过这个问题,并find一个解决scheme?

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行设置活动的内容视图。 内容视图是这样的:

 <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似乎不是一个问题

它发生在我身上,我search了3个小时。 我希望这会有所帮助。 要在4.x设备上启用MultiDex,仅修改构build是不够的:您必须inheritanceApplication类。 只要按照那个 那个

希望能帮助到你。

我通过使用Proguard使用以下configuration来解决问题:

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

使用更新版本的Gradle(在Android Studio中)启用Proguard:

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

proguard-rules.pro是最上层的属性。

如果在应用程序中使用multidex,请从MultiDexApplication扩展Application类

如果您使用的是api compat support-v7,那么引用它的任何库都应该被标记为排除模块:'support-v4'

例如:

compile('com.android.support:cardview-v7:22.2.0'){exclude module:'support-v4'}