=========================================================

引用了网上的一篇文章,写的很不错,又正好解决了我的问题

ADT17以上版本应该是舍弃了Reference包的引用

=========================================================


最近开发项目需要从google地图转换到高德地图,所以在原有工程的基础上,只需要导入高德地图的包即可,代码大致和google的一样。但是导入后,eclipse下不会提示错误,但是在模拟器执行的时候就会报错:NoClassDefFoundError错误。


先给出网上对此错误的提示: ---------------------------------------------------------------------------------------

Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)

1、在工程下新建lib文件夹,将需要的第三方包拷贝进来。
2、将引用的第三方包,添加进工作的build path。
3、(关键的一步)将lib设为源文件夹。如果不设置,则程序编译可以通过,但运行的时候,会报: java.lang.NoClassDefFoundError ---------------------------------------------------------------------------------------
一般我们导第三方包的步骤都是,右键工程----build path -configure build path 。在弹出的libraries里,我们选择 Add External JARs,然后选择导入包即可。(或新建一library-userlibrary)这样应该就不会有什么错误了,但是点击RunAs时,有时又会触发 conversion to dalvik format failed with error 错误。
看一下网上对此错误的提示: ---------------------------------------------------------------------------------------------------------------------------

   在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的解决办法

android低版本工程(如1.5)放到高版本环境中(如2.2)可能会上述错误,解决方法如下:

   1、如果不修改android sdk版本,则使用project clean 命令作用于某工程即可。 (该处理方式
只是在高版本中兼容了低版本工程,未真正意义上的升级)

   2、如果修改android sdk版本,则需要以下几个步骤:
      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的工程结构就一样了。 -------------------------------------------------------------------------------------------------------------------------------------------------------------

貌似这样做还真把这个错误给解决了,反正我把progect --properties--android 下的 is library够选上,果然错误就没了,可是运行起来还是会报错。
现在我才发现原来错误不是在eclipse里的build path内。
我尝试着修改了一下电脑java的环境变量,有了惊奇的发现: 在我的电脑的环境变量中,classpath 原本是空的,我添加了如下的变量: .;C:\Program Files\Java\jdk1.5.0_17\lib;C:\Program Files\Java\jdk1.5.0_17\lib\tools.jar 尤其是开始的.;这个是最为重要的。 少了 < .; > 就造成巨大的差别
在沒有做任何设定之下 , 预设的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都可以載入 。



事实证明,主要原因并不是classpath的问题,来到公司,用同样的方法尝试还是运行报错,仔细一想:两台电脑,除了操作系统,eclipse版本不一样,别的没什么不同,群里问了一下,突然发现不同的是ADT的版本,公司电脑上的是18版本,而我家里或别的同事能运行的都是16版本,恍然大悟, 搜索一下,故知道了真正的的原因:


      最新的ADT都会自动生成一个Referenced Libraries,这个里面自动导入程序libs里的第三方jar包,或是手动在build path里添加的本地第三方jar包的路径。有了这个,程序运行就不会报错,这个是自动生成的,如果导入包后没有生成,clean或重新启动eclipse一下就会出现,自动关联。(无论是程序libs下还是本地路径下)。

网上搜索给出的原因: ------------------------------------------------------------------------------------------------------------------------------------------------------ http://tools.android.com/recent/dealingwithdependenciesinandroidprojects

关于这个问题,下面我截的这几个图能更容易地说清楚:



从左到右三个图分别是:
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团队


更多相关文章

  1. Android(安卓)SQLite数据库版本升级的管理实现
  2. Android(安卓)requires compiler compliance level 5.0 or 6.0.
  3. Android(安卓)Studio程序无法加载到虚拟机解决方法
  4. android studio 打包自动生成版本号与日期,apk输入路径
  5. Android(安卓)studio 解决各种错误
  6. android studio 生成 aar release 包 步骤详解
  7. cocos3.4 lua 工程打包为apk后运行一段时间闪退的问题
  8. day1 android开发环境安装
  9. Cocos2d-x 3.7 Android&iOS开发环境搭建

随机推荐

  1. android 自定义相册 多选
  2. Android版本及API等级关系
  3. java.lang.NullPointerException: Attemp
  4. Duplicate files copied (Android Studio
  5. android 操作文件
  6. Ubuntu 环境编译Kernel和Android
  7. Android更新UI的五种方式
  8. android 之simpleAdapter详解
  9. Android存取txt
  10. android google directions