最近在做Android桌面项目,我的程序在2.X的机子上运行得好好的,放到4.0上面运行却出现:
Caused by: java.lang.NoClassDefFoundError: com.test.launcher.view.PreviewPager
PreviewPager是自己定义的类,并不是JAR包中导入的类,所以肯定不是导包出现问题。最后找到了原因:
在Androidruntime抛出NoClassDefFoundError错误之前,dalvikvm虚拟机连续抛出了多次一样的警告错误:
其中第一条Waring:Method Lcom/test/launcher/view/PreviewPager;.setLeft overrides final Landroid/view/View;.setLeft
问题就在这里。我覆盖了不能被覆盖的函数。我们定义的PreviewPager是从ViewGroup继承的,我的代码里面覆盖了setLeft方法,2.X的系统是允许覆盖“setLeft”的,而4.0中却不能覆盖这个函数。所以导致这个类没有被加载成功,进而出现NoClassDefFoundError错误。
只要不去覆盖这个函数,问题就不会再出现了。