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

我的应用程序的某些用户遇到此崩溃,似乎可能与三星设备有关。 有没有其他人遇到过这个问题并find了解决方案?

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

          

该片段是一个简单的列表片段。

我知道这个问题已经解决但是如果你到达这个主题,可能是因为它没有在一个特定的组合中解决你的问题:

  • 所有适用于5.0设备
  • 它不适用于4.x.
  • 您认为启用了MultiDex
  • Proguard似乎不是问题

它发生在我身上,我搜索了3个小时。 我希望它能帮助一些人。 要在4.x设备上启用MultiDex,仅修改构建是不够的:您必须inheritanceApplication类。 只需遵循那个和那个

希望能帮助到你。

我使用以下配置使用Proguard解决了这个问题:

 -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,那么任何引用它的库都应该被标记为exclude module:’support-v4′

例如:

编译(’com.android.support:cardview-v7:22.2.0’){排除模块:’support-v4′}