技术CTO-关注编程入门知识,提供编程入门教程

您的位置: 首页 > 移动开发 > android > 正文

android导入第三方jar后,产生:java.lang.NoClassDefFoundError错误

来源: 技术CTO 阅读:

导入poi的方法都是按照网上所说的,步骤:
     右键工程,
     Build path,
     java build path,选择libraries
     在右边的按钮中点击“Add Library”
     选择“User library”,点击“下一步”
     点击“User librarys”按钮
     在出现的界面中点击“New..”按钮
     在弹出的界面中随便起一个名字,点击“确定”
     点击“Add jars”按钮选择第三方jar包,点击“确定”完成操作。

但是,结果却是抛出了一个无法找到类的错误。
同时,也试了试下面的步骤:
右键工程--Build path---java build path-- add External Archives 
结果更糟糕,整个eclipse都无法运行了!!

编译时不报错运行时报错么? Build path时order and export里把你的library up到android系统lib上面去试试
确定设置好classpath了?
引用 2 楼 zhouzhangkui 的回复:
确定设置好classpath了?


这个classpath 在哪儿看呀?
http://blog.csdn.net/hhao137/article/details/4314862
2.1.3  设置classpath环境
在系统环境变量那一栏中点->新建classpath。变量名: classpath ;变量值:.;%JAVA_HOME%/lib/;%JAVA_HOME%/jre/lib/(注意,CLASSPATH最前面是有个“.”的,表示当前目录,这样当我们运行java AClass的时候,系统就会先在当前目录寻找AClass文件了。)
引用 1 楼 t5721654 的回复:
编译时不报错运行时报错么? Build path时order and export里把你的library up到android系统lib上面去试试


对,运行时它报了一个 NoDefFoundClassError!可以说的详细点吗?
是android运行环境的classpath.

感觉你编译的时候是把这个jar扩展到编译环境中,如果这样运行时同样要发布到android环境中
建议你把这个jar倒入到你的工程内部使用。
引用 6 楼 othereyeopen 的回复:
是android运行环境的classpath.

感觉你编译的时候是把这个jar扩展到编译环境中,如果这样运行时同样要发布到android环境中
建议你把这个jar倒入到你的工程内部使用。

那请问一下,具体的步骤是?谢谢
引用 7 楼 xiaogutougm 的回复:
引用 6 楼 othereyeopen 的回复:
是android运行环境的classpath.

感觉你编译的时候是把这个jar扩展到编译环境中,如果这样运行时同样要发布到android环境中
建议你把这个jar倒入到你的工程内部使用。

那请问一下,具体的步骤是?谢谢

步骤是把你的jar copy到你的工程里面使用,不要用外部的。
引用 8 楼 othereyeopen 的回复:
步骤是把你的jar copy到你的工程里面使用,不要用外……

就是把这个jar包,完全当成自己的source来编译,使用!
我不是很清楚你说的错误是运行时出错,还是编译的时候出错。
运行时出错,是你没有把你的jar包集成到你的系统里边。
如果你系统的已经集成好了,编译的时候出错。我觉得很有可能是进行操作:
 右键工程,
  Build path,
  java build path,选择libraries
  在右边的按钮中点击“Add Library”
  选择“User library”,点击“下一步”
  点击“User librarys”按钮
  在出现的界面中点击“New..”按钮
  在弹出的界面中随便起一个名字,点击“确定”
  点击“Add jars”按钮选择第三方jar包,点击“确定”完成操作。

需要添加这么一个操作。在 Library旁边有个Order and Export
要将你刚刚添加的lib置为top
项目根目录下新建一个 libs文件夹,把要加的包放到这个目录下,右键 Build Path -> Use as source folder
引用 11 楼 kjianjun 的回复:
项目根目录下新建一个 libs文件夹,把要加的包放到这个目录下,右键 Build Path -> Use as source folder

我也这么做了的,不过直接崩溃了,Eclipse都不能用了!!
引用 10 楼 hmg25 的回复:
我不是很清楚你说的错误是运行时出错,还是编译的时候出错。
运行时出错,是你没有把你的jar包集成到你的系统里边。
如果你系统的已经集成好了,编译的时候出错。我觉得很有可能是进行操作:
 右键工程,
  Build path,
  java build path,选择libraries
  在右边的按钮中点击“Add Library”
  选择“User library”,点击“下一步……


按照这种方法做的话,编译没问题,但是运行时候,会产生一个NoClassDefFoundError!
我导入的是一个poi.jar会不会是android SDK不支持这个包呀?
我也是同样的问题的 我导入的json的几个jar包!运行时报noclassdeffounderror错误!顶一顶啊!期待有人能来解决啊!
http://www.blogjava.net/anchor110/articles/355699.html
这么多人回答好像就11楼是正解........................................   
MD这个问题整了我半天,试过各种办法,之前一切都好好的,气死了!!!!!!!!!!
现在我怀疑是因为adt升级造成的,之前的adt都是没问题的,现在adt难道要求高了?????
网上好多这个问题的解决办法,但好多都是胡扯瞎弄,反正我试过好多,把这个分享给大家希望大家能尽快解决问题,这个问题太操蛋了!
我也出现这个问题了,也是升级之后产生的
之前好好的
TMD的,升级一次就出现这么多问题!
得了,现在报了个错:Installation error: INSTALL_PARSE_FAILED_NO_CERTIFICATES
我用的JDK是1.5的怎么也招惹到它了?!
根据最新的测试显示,在根目录下新建文件夹libs,然后将引用的包放进去,回到eclipse中刷一下工程就行了。
不用手动built path,最新的ADT会自动将libs作为第三方jar的引用目录。
亲,注意不是lib,是libs哦!
引用 20 楼  的回复:
根据最新的测试显示,在根目录下新建文件夹libs,然后将引用的包放进去,回到eclipse中刷一下工程就行了。
不用手动built path,最新的ADT会自动将libs作为第三方jar的引用目录。
亲,注意不是lib,是libs哦!

哎呀,按照大家的方法解决问题了
引用 11 楼  的回复:
项目根目录下新建一个 libs文件夹,把要加的包放到这个目录下,右键 Build Path -> Use as source folder


libs右键->Build path->Use as source folder
然后在jar包上右键->add to build path
就是右键工程,
Properties
java build path,选择libraries
在右边的按钮中点击“Add Library”
选择“User library”,点击“下一步..
最后在user  libraries new 一个再把jsr包导进去就可以了
11楼的问题在我这里也没成功。我JDK1.6 ADT 20
同意16楼的观点。真是个操蛋的问题。

被折磨了2个星期,我的apk终于生成OK了。
解决办法如下,不知道是否有普遍性。
http://blog.csdn.net/xxlovexx/article/details/7834395
11楼是正解
我也遇到了这个问题,我导入的是poi的一下包,按照11楼的做法还是有问题,

[2012-12-19 00:18:06 - GCIG] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(org.apache.xmlbeans.impl.inst2xsd.util.Type$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.

这只是一部分。

trouble writing output: Too many methods: 91612; max is 65536. By package:
    13 android.app
     7 android.content
.....
下面一堆包类名称,
是不是导入的jar太大了???求解??

20楼 正解
Conversion to Dalvik format failed with error 1 你是不是 报这个错误 我最近也遇到你所说的问题了
20楼正解,但是前提是要配置好环境哦,还有一种方法也可以解决这个问题,
1、在工程下新建lib文件夹,将需要的第三方包拷贝进来。
2、将引用的第三方包,添加进工作的build path。
3、(关键的一步)将lib设为源文件夹,即把lib文件夹放在src源文件目录里,如果不设置,则程序编译可以通过,但运行的时候,会报:
    java.lang.NoClassDefFoundError
好像是poi对android的支持有问题,我也遇到这个问题,自己下了poi的源码重新生成了jar也还是不行!在dx的时候搞到myeclipse溢出直接崩溃。
看来再重新找其他支持office操作的库了,哪位大侠如果有解的话,麻烦帮回下:邮箱,weiliji@126.com
在下动感涕零,感激不尽。
我今天刚刚升级了ADT至22,也出现这个问题,折腾了半天,也在网上找了半天,
最后自己试出来了:\
在java build path ->order and export 中勾选android private library 并置顶,
然后clean下工程,在编译运行就没错了。
其他的没有变,还是在项目根目录下新建"libs"把要引用的jar放进去就行了,
上个回复图片没有显示出来
引用 31 楼 Airforce_zhl 的回复:
我今天刚刚升级了ADT至22,也出现这个问题,折腾了半天,也在网上找了半天,
最后自己试出来了:\
在java build path ->order and export 中勾选android private library 并置顶,
然后clean下工程,在编译运行就没错了。


按你说的试了,不行啊!
引用 31 楼 Airforce_zhl 的回复:
我今天刚刚升级了ADT至22,也出现这个问题,折腾了半天,也在网上找了半天,
最后自己试出来了:\
在java build path ->order and export 中勾选android private library 并置顶,
然后clean下工程,在编译运行就没错了。


这样确实可以了,编译后就正常了
31 楼正解,问题解决了
31楼的是正确答案。
谢谢31楼,问题解决了,搞了一天。。
11楼正解,已经解决问题
ADT更新后的bug。config path中勾上全部jar包就行。
使用libs
直接在项目中的src文件夹下创建一个用libs来命名的文件夹,然后把该项目所需要的jar文件直接复制到里面,这样应该就可以了,你先试试
我最近也遇到了这样的情况,但是估计和楼主的不太一样,我的第三方jar包是自己写的,生成jar包使用的是JDK1.7,但是安卓本身不支持JDK1.7,使用JDK1.6再次生成jar包就没再报那个错了,希望对你的问题有帮助。
华硕的不太严谨哈,我使用的ADT就到1.6

^_^ 如果您热爱技术、热爱编程,想与更多的朋友一起交流学习,欢迎加入本站官方QQ群:345733473 ^_^