做项目练习的时候突然冒出了这个问题,而且前提是一个和xUtils毫不相关的业务,之前xUtils页面早就写好了,都没有问题,那么显然,这个和xUtils没有任何关系。
上网查了不少说明,解决办法都不太靠谱,NoClassDefFoundError有很多原因产生,所以解决其实非常复杂。。。
说一下思路和个人解决的过程。
错误截图
工程截图:
java.lang.NoClassDefFoundError:概括的说就是,一个类(jar包)在编译时可以找到,但是运行时没有找到。
如上图所示:xUtils的包明显是有的,但是在编译的dexedLibs中,根本没有,编译后的文件没有的话,自然没有办法运行。
问题是:为什么没有运行的时候找不到?
个人对类加载器的本质还不是非常理解。但是回想了一下出错的过程,因为引用了一个第三方开源框架,要用到V7依赖包,就导入了V7依赖包。
v7包本身包含了v4包,所以就一并导入了。关键就在于,原来的工程已经有一个v4包,这个包和v7包中的不一样(sha1不同)。猜测就与这个v4包有关。
但是在build path中删除了libs 包中 v4包,问题依然存在。dexedLibs中仍然只有一个v7包。
于是干脆将 libs中的v4包删除,居然正常运行了。
分析可能的原因:在编译时,代码都没有报错,因为所有的关联包都可以找到,但是在打包时,编译器关联包中有两个 同名包,不知道如何打包(具体原理还是不太理解),dexedLibs没有正常生成,导致错误。
如果有类似的问题,通常跟报出的异常没有什么关系,先看看build path中是否有冲突的包。
ps:dexedLibs中有两个v7 包 一个是来自依赖包,一个是关联包。是不一样的。
本文探讨了在项目实践中遇到的NoClassDefFoundError问题及其解决过程。通过分析工程配置和依赖关系,发现重复的库版本是导致此错误的原因。
1220

被折叠的 条评论
为什么被折叠?



