解决引入第三方JAR包,在模拟器/真机上运行时的错误NoClassDefFoundError

起因

由于android客户端需要解析网页html,引入了第三方jar包jsoup,并把jar放入了libs文件夹,eclipse自动加入到了build path。因此,在源码中可以准确使用该库。但当apk部署后,发现抛出了运行时异常NoClassDefFoundError,并指示org.jsoup.Jsoup类没有找到。该异常给我的第一感觉就是,android sdk插件在编译生成.dex文件时没有把jsoup包的class包含在里面,于是我反编译了dex文件,果然没有包含该jar包的内容。


解决办法

首先需要说明的是,我的编译sdk是4.3+的,之前我看到的一篇博文说,如果sdk是4.2,存在bug,下面方法无效,如果是4.2的sdk,需要参考以下博文:

http://my.oschina.net/u/1171837/blog/161301


1、新建一个lib文件夹,把第三方jar包放到lib目录

tips:如果jar包放在libs下,虽然可以通过之后的配置正常工作,但是无法通过导入javadoc和源码进行查看,这是很痛苦的事情。

解决引入第三方JAR包,在模拟器/真机上运行时的错误NoClassDefFoundError_第1张图片

2、右键工程文件夹,选Build Path->Config Build path,在弹出对话框选Libraries选项卡,点右边的Add jars,把libs的jar包选择

解决引入第三方JAR包,在模拟器/真机上运行时的错误NoClassDefFoundError_第2张图片


3、最后在Order and Export选项卡勾选该jar包


4、如果需要导入该jar包所对应的的javadoc和src,需要通过下图配置导入对应的文件

tips:如果直接把第三方jar包放入libs中,jdk会自动把jar引入build path,在Android private libraries中是无法edit加入javadoc和src文件的(如果不手动通过add jars加入到build path,sdk甚至不把这些class构建到dex文件中,造成运行时找不到该class的错误)

解决引入第三方JAR包,在模拟器/真机上运行时的错误NoClassDefFoundError_第3张图片



OK了

你可能感兴趣的:(解决引入第三方JAR包,在模拟器/真机上运行时的错误NoClassDefFoundError)