错误:升级到ADT 17之后,编译ok,再次运行程序,log提示:NoClassDefFoundError,程序找不到Jar包里对应的类。
先说明两种解决方法,在文末叙述原因。
First of all!
注意1:
首先观察,项目里是否有一个叫做Referenced Libraies的文件夹,里边是你要使用的所有jar包,但是Android Dependencies文件夹里只有:annotations.jar,待会注意变化。可参看下图。(因为我已经升级至adt17,无法返回截图,下图不是我的项目,仅供说明而已)
注意2:
查看之前运行的apk大小,很重要,待会分析原因。
解决方法一:
1, 在项目上单击右键,Properties----à Java Build path----àLibraries---àremove掉之前添加的所有外部jar包,只留下两个自带的:Android x.x.x 和Android Dependencies。点击ok。第一步完成。
如图:
变化:如果你已经移出了所有的外部jar包,Referenced Libraies文件夹消失。
2, 在项目上单击右键,新建一个文件夹,命名为libs(注意必须命名为libs,否则会报错)。然后复制所要使用的jar包到此文件夹即可。
变化:Android Dependencies文件夹里自动出现了你要使用的所有jar包。
运行ok。
注:如果之前就有lib包存放jar包,只需要按照步骤1,然后修改文件夹lib为libs即可。
解决方法二:
如果不建立libs文件,只是单纯的通过Add External JARs导入jar包,见下图
那么可以很轻松的解决这个问题。
点击Order and Export,选中你要使用的jar包,例如jsoup,点击ok。运行即可。
原因:外部引入的jar包,虽然已经存在于项目中,但是实际的位置仍然在其他位置,如上图所示(我的项目在c盘,jar包在f盘)。以上两种方法都将jar包放入项目中。运行的时候,将jar包加入apk中。成功运行后,你可以观察下,apk是否比之前大了一些。
Plus:
如果执行上面两种方法之后,仍然有requires unavailable shared library的错误log提示,请打开AndroidManifest.xml文件。删除其中的<uses-library />配置。即可。
End
参考自:http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17
转载于:https://blog.51cto.com/mikewang/820743