android:java.lang.NoClassDefFoundError: com.lidroid.xutils.HttpUtils 异常的解决

本文探讨了在项目实践中遇到的NoClassDefFoundError问题及其解决过程。通过分析工程配置和依赖关系,发现重复的库版本是导致此错误的原因。

做项目练习的时候突然冒出了这个问题,而且前提是一个和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 包  一个是来自依赖包,一个是关联包。是不一样的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值