J'ai rencontré une classe NoClassDefFoundError sur mes classes statiques et anonymes imbriquées dans mon application. Le fait est que cela n'arrive pas sur tous les appareils que j'ai testés. J'ai lu beaucoup de stackoverflow et google essayant de résoudre ce problème, mais je n'arrive toujours pas à comprendre pourquoi ça se passe sur Zenphone 5 et Galaxy Tab E (Android 4.4.4) mais n'arrive jamais sur Nexus 7/10 ou sur un autre appareil avec Android 5+.NoClassDefFoundError sur les classes imbriquées anonymes et statiques
J'ai également essayé de déplacer toutes les classes imbriquées hors de la classe de base dans leurs propres fichiers .java, et cela aide, mais je veux comprendre le problème de base et le corriger.
post-scriptum est possible, que ce problème lié à l'appui multidex?
UPD 1
LogCat:
02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/CrashlyticsCore: Failed to execute task. 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/CrashlyticsCore: java.util.concurrent.TimeoutException 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/CrashlyticsCore: at java.util.concurrent.FutureTask.get(FutureTask.java:173) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/CrashlyticsCore: at com.crashlytics.android.core.CrashlyticsExecutorServiceWrapper.executeSyncLoggingException(CrashlyticsExecutorServiceWrapper.java:44) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/CrashlyticsCore: at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.uncaughtException(CrashlyticsUncaughtExceptionHandler.java:245) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/CrashlyticsCore: at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/CrashlyticsCore: at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/CrashlyticsCore: at dalvik.system.NativeStart.main(Native Method) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: FATAL EXCEPTION: main 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{cinamaker.nlt.com.cinamaker/cinamaker.nlt.com.cinamaker.activity.MainActivity}: android.view.InflateException: Binary XML file line #111: Error inflating class cinamaker.nlt.com.cinamaker.widget.HorizontalListView.HorizontalListView 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2342) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.access$600(ActivityThread.java:148) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.os.Looper.loop(Looper.java:150) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5390) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:525) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #111: Error inflating class cinamaker.nlt.com.cinamaker.widget.HorizontalListView.HorizontalListView 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.createView(LayoutInflater.java:620) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:268) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.Activity.setContentView(Activity.java:1968) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at cinamaker.nlt.com.cinamaker.activity.MainActivity.onCreate(MainActivity.java:65) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.Activity.performCreate(Activity.java:5303) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2296) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.access$600(ActivityThread.java:148) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.os.Looper.loop(Looper.java:150) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5390) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:525) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: Caused by: java.lang.reflect.InvocationTargetException 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at java.lang.reflect.Constructor.constructNative(Native Method) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.createView(LayoutInflater.java:594) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:268) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.Activity.setContentView(Activity.java:1968) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at cinamaker.nlt.com.cinamaker.activity.MainActivity.onCreate(MainActivity.java:65) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.Activity.performCreate(Activity.java:5303) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2296) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.access$600(ActivityThread.java:148) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.os.Looper.loop(Looper.java:150) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5390) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:525) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: Caused by: java.lang.NoClassDefFoundError: cinamaker.nlt.com.cinamaker.widget.HorizontalListView.HorizontalListView$2 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at cinamaker.nlt.com.cinamaker.widget.HorizontalListView.HorizontalListView.(HorizontalListView.java:365) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at java.lang.reflect.Constructor.constructNative(Native Method) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.createView(LayoutInflater.java:594) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:268) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.Activity.setContentView(Activity.java:1968) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at cinamaker.nlt.com.cinamaker.activity.MainActivity.onCreate(MainActivity.java:65) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.Activity.performCreate(Activity.java:5303) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2296) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.access$600(ActivityThread.java:148) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.os.Looper.loop(Looper.java:150) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5390) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:525) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 02-29 17:09:43.306 28749-28749/cinamaker.nlt.com.cinamaker E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
code: Je ne veux pas ajouter toute la classe ici, il est trop grand. J'ajoute seulement le problème actuellement actif.
public class HorizonatlListView {
...
private DataSetObserver mAdapterDataObserver = new DataSetObserver() {
@Override
public void onChanged() {
mDataChanged = true;
// Clear so we can notify again as we run out of data
mHasNotifiedRunningLowOnData = false;
unpressTouchedChild();
// Invalidate and request layout to force this view to completely redraw itself
invalidate();
requestLayout();
}
@Override
public void onInvalidated() {
// Clear so we can notify again as we run out of data
mHasNotifiedRunningLowOnData = false;
unpressTouchedChild();
reset();
// Invalidate and request layout to force this view to completely redraw itself
invalidate();
requestLayout();
}
};
...
}
votre code postal et logcat. –