安卓添加外部Library报NoClassDefFoundError异常,无法生成Android Dependencies目录,一种简单解决办法

来源:互联网 发布:mysql in和and起冲突 编辑:程序博客网 时间:2024/06/04 20:08

最近在自学安卓开发,在网上下载的开源library,然后再添加Jar包的时候,编译无误,但是运行后一直出问题。然后搜索网上的时候发现也好多人遇到这个问题,但是各种方法都试过。花了一下午时间,还是没找出问题。本来就是学硬件开发的,软件只是业余爱好,差点就放弃了。

每次直接拖入再adding it to the build path

或者修改.classpath

或者更改project.properties和proguard-project.txt

或者Add User Library

或者删除重新建立工程

或者什么的什么的

总之基本所有方法都试过了,

每次Jar包不是在Android private Library 中,要么是在Android reference Library 中。

始终无法生成Android Dependencies。

最后在国外网站上发现了一个办法。

原文地址

http://stackoverflow.com/questions/11443262/actionbarsherlock-java-lang-noclassdeffounderror-com-actionbarsherlock-rstyle

右键工程文件,打开Properties,选中Android选项卡,然后在下面Library下点击Add...


然后在你的工程文件中选择你需要加入进来的Library工程。



之后你的Android Dependencies就会自动生成了,之后运行就不会报错了。



本方法应该只适用于那些有Library工程文件的吧,如果只有jar包,那就不晓得怎么去处理了。


后来又查了一下:

刚刚又继续深入的研究了一下,之所以会出现我这种问题,是因为我的jar包中引用了外部的自定义的UI资源,比如string、theme、style,因为jar包中通常是不包含这些资源的,所以如果你引用的jar包是包含有我说的这种引用了的外部自定义UI资源的话,那么这个jar包是不可用的,不论你怎么导入。。。

其实从报错当中就可以看出来,比如说你的错误是java.lang.NoClassDefFoundError: com.weibo.android.R$style

后方有个R$xxx的话,这就代表你的jar包中通过R引用了外部资源,你根本不知道这资源是什么,所以这个jar包是不可用的。

这时候,你就需要像我上面说的,用那种方法来将Library的工程也包含进来,这个软件默认的也会引用那个Library工程中的UI资源。



所以说,如果你的NoClassDefFoundError后面指向的是R$xxx的话,那么你就必须包含Library工程目录



这其实就是安卓项目依赖导入jar包的区别。项目依赖是会引用那个依赖工程中的自定义UI资源的,而导入jar包是没有的。

所以通常的那些开源的,比如说绘图什么的,这些是必须用依赖注入的方式导入项目的。但是算法架构什么的就可以用jar包形式导入。

安卓开发新手的个人拙见,请大神不要嘲笑= =


0 0