Certains utilisateurs de mon application rencontrent ce problème, ce qui pourrait être lié aux appareils Samsung. Quelqu'un at-il rencontré ce problème et trouvé une solution?
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)
La ligne 160 définit la vue du contenu de l'activité. La vue du contenu est la suivante:
<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>
Le fragment est un simple fragment de liste.
J'ai résolu le problème en utilisant Proguard avec la configuration suivante:
-keep class !Android.support.v7.internal.view.menu.**,** {*;}
-dontwarn
-ignorewarnings
-dontshrink
Pour activer Proguard avec les versions les plus récentes de Gradle (dans Android Studio):
Android {
...
buildTypes {
debug {
...
}
release {
...
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
proguard-rules.pro est l'endroit où vont les propriétés en haut.
Je sais que le problème a été résolu, mais si vous arrivez sur ce fil, il se peut que cela ne résolve pas votre problème dans une combinaison particulière:
Cela m'est arrivé et j'ai cherché pendant 3 heures. Pour activer MultiDex sur des périphériques 4.x, il ne suffit pas de modifier la construction: vous devez sous-classer la classe Application
. Il suffit de suivre que et que
J'espère que ça aide.
Si vous utilisez multidex dans votre application, étendez votre classe Application à partir de MultiDexApplication.
si vous utilisez api compat support-v7, toutes les bibliothèques dont la référence doit être marquée doivent être exclues du module: 'support-v4'
par exemple:
compiler ('com.Android.support:cardview-v7:22.2.0') { module d'exclusion: 'support-v4' }