`

报错java.lang.NoClassDefFoundError的问题

阅读更多

--------------------------------------------------------
注意依赖包或者集成的接口的包需要引入到libs目录下,不要引入本地包,否则找不到类。

------------------------------------------------------------
昨天为一个报错java.lang.NoClassDefFoundError的问题折腾了一天,公司里面好几位大牛帮忙,都没有搞定。后来有个同事建议我用空的Activity替换,通过逆向反推的方法找到原因了。

我要做的这个apk是在另外一个项目上已经发放的apk,移植到新平台上后,编译没有问题,在机器上验证运行时,Log打印出java.lang.NoClassDefFoundError报错,提示其中一个Activity找不到。

明明Activity就在工程中,而且AndroidManifest.xml文件中也有注册,为什么说找不到。反复google、baidu,试过很多网页上介绍的办法,还是没能解决。

后来有个同事说,既然这个Activity找不到,就换一个吧,于是我创建一个空的Activity,修改了调用的地方,编译、运行,竟然可以。于是大致猜测到是这个Activity本身存在问题。

但是这个Activity代码太多了,谁知道具体哪个位置出问题了。仔细看打印信息,其中有一行绿色的提示(在红色的报错之前)让我知道问题出在哪里了:这个Activity 继承的一个接口没有解析出来。

去掉原Activity 中与这个接口相关的代码后,再次编译、运行,问题没有复现了。事后有一个负责中间层的同事回复我,那个找不到的接口在新平台上不存在——原来如此!

通过这件事,我发现:
1.Eclipse下的Log窗口的打印信息,不光要看红色的报错,绿色的打印信息有时候也有用的;
2.出现java.lang.NoClassDefFoundError报错,不一定是代码本身的问题,也有可能是外部环境的改变导致Activity生成失败.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics