=========================================================
引用了网上的一篇文章,写的很不错,又正好解决了我的问题
ADT17以上版本应该是舍弃了Reference包的引用
=========================================================
最近开发项目需要从google地图转换到高德地图,所以在原有工程的基础上,只需要导入高德地图的包即可,代码大致和google的一样。但是导入后,eclipse下不会提示错误,但是在模拟器执行的时候就会报错:NoClassDefFoundError错误。
Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
1、在工程下新建lib文件夹,将需要的第三方包拷贝进来。2、将引用的第三方包,添加进工作的build path。
3、(关键的一步)将lib设为源文件夹。如果不设置,则程序编译可以通过,但运行的时候,会报:
在eclipse开发Android项目时出现的很多问题都可以使用Project--------->clean来轻易解决。
但如果出现说Android库找不到,或者不小心remove了Android系统库,怎么重新添加Android系统库呢?
在eclipse里面的Java Build Path里面是没法添加例如Android 2.1这样定义好的系统库。而我尝试手动添加
SDK 文件夹里面的Android.jar,结果出现了Conversion to Dalvik format failed with error 1问题了。折腾了
一番后,很多网友都说用Project clean可以解决,但对我的情况来说,没有用处。
在百度找到解决方法了:
修改项目classpath文件,这让我明白了,直接从其他正常项目里面把
修改成
这样子刷新项目,Android系统库Android 2.1回来了,那个错误也解决了。
这几天又遇到这样的问题了,但是.classpath文件里面已经包含了上面的con Path,后来在论坛
(http://www.eoeandroid.com/thread-53880-1-1.html)上找到新方法:
project -> properties -> android label, check a target from the project build target list
============================================================================
附:
上网上广为流传的解决方法:conversion to dalvik format failed with error 1的解决办法
1、如果不修改android sdk版本,则使用project clean 命令作用于某工程即可。 (该处理方式
只是在高版本中兼容了低版本工程,未真正意义上的升级)
1) 修改SDK
选择工程,build path --> configure build path ---> library 删除引用的低版本SDK,
然后add External JARs,选择高版本SDK,OK,保存
2) 修改classpath文件
该文件可能存在该项:3) 修改AndroidManifest.xml
在AndroidManifest.xml文件中,application标签后添加
4) 修改default.properties(很重要)
该文件最后一行(前面没用#的)target=android-3 该成target=android-8,保存。
再看看你的工程和新建的android 2.2的工程结构就一样了。
在沒有做任何设定之下 , 预设的CLASSPATH就是一个 .
这个 .代表 命令提示字元的当前目录
没设定比设定错误还要好一点(对新手而言) , 只要 .class 在当前目录 , 还是可以执行程序的
但是你若下了设定
SET CLASSPATH=C:"j2sdk1.4.1_03"lib;C:"j2sdk1.4.1_03"lib"tools.jar;
少了这个.若你当前的目录却不是 C:"j2sdk1.4.1_03"lib , 就會发生NoClassDefFoundError
正確的設定
SET CLASSPATH=.;C:"j2sdk1.4.1_03"lib;C:"j2sdk1.4.1_03"lib"tools.jar;
表示當前的目錄 , C:"j2sdk1.4.1_03"lib" , 以及 tools.jar 內的class都可以載入 。
关于这个问题,下面我截的这几个图能更容易地说清楚:
从左到右三个图分别是:
1.我的ADT16版的工程(三个截图的细节图标有些不一样,因为第一个是Windows的Eclipse下截的图,而另两个是在Mac的Eclipse下截的)
2.我修复前的ADT17版工程
3.我修复后的ADT17版工程
从中我们可以看到:
1.蓝色方框中的内容变化,是由新版补丁引起的(后面详细说明)
2.红色方框的内容变化,是我做的修复工作的结果
我所做的修复工作如下:
1.从标准的Java编译路径中移除第三方JAR包
在工程名称上点右键 > Properties > Java Build Path > Libraries标签 >移除Android SDK之外的所有第三方JAR包
2把JAR包所在的文件夹名称从“lib”修改为“libs”
这样做之后,ADT能自动找到所有在libs文件夹下的JAR包,把他们加到工程的依赖路径中,并直接显示在Android Dependecies分类下。
3.清理整个工程(可能需要也可能不用)
4.完成修复,可以正常运行了
导致此问题的原因,是新版的ADT管理JAR包的方式发生成变化,旧版支持两种不同的JAR包引用(一是Android工程的库,另一个是标准的库),新版则把这两者合并到Android Dependencies下了。
另外,新增加的annotations.jar提供了新的优化提示功能(更新信息请参阅http://tools.android.com/recent/ignoringlintwarnings)
除了这个小问题,新版的ADT17看起来很不错,我也很喜欢新的优化检查功能。
【更新】
开发团队DroidUX找到另一个解决此问题的办法,我没有亲自测试,但看起来应该也行得通,内容如下:
嗨,各位:
下面是问题的解决办法:
如果你引用了不在libs目录下的第三方JAR文件,比如你用了“classpath”变量,你可以通过导出引用来解决ADT17下报NoClassDefFoundError错误的问题。
导出引用的步骤:只需要转到“Properties > Java Build Path > Order and Export”,然后把你想要导出引用的全部勾选上就可以了。
祝顺利!
——DroidUX团队