2016-02-29 109 views
0

我在我的应用程序的嵌套静态和匿名类上遇到了NoClassDefFoundError。关键是,这不会发生在我测试的每个设备上。我已经阅读了很多stackoverflow和谷歌试图解决这个问题,但我仍然不能得到为什么它发生在Zenphone 5和Galaxy Tab E(Android 4.4.4)上,但从来没有发生在nexus 7/10或任何其他设备与Android 5+。匿名和静态嵌套类的NoClassDefFoundError

我也尝试将所有嵌套类从基类中移出到它们自己的.java文件中,这有所帮助,但我想了解根本问题并修复它。

P.S.有可能,这个问题与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) 

代码: 我不想在这里添加全班同学,这是变大。我只添加当前活跃的问题。

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(); 
    } 
    }; 

    ... 

} 
+0

发布您的代码和logcat的。 –

回答