上篇博文也提到了这个问题,但没有深入的讲解。这次特意做了整理,详细解释其原因。
先看错误java.lang.NoClassDefFoundError,显然是java虚拟机找不到指定的类,多数情况下是外部jar中的类。
Eclipse的自动化,集成化,方便了我们的开发,却也迷住了我们的双眼。遇到这个问题,我想和大多数朋友一样,按部就班的检查jar包,然后右键Builder
path,add external archives ..
在ADT17之前,如果要在Android项目中引入外部JAR包,这种方式是正确的,只需在项目属性的Java Build
Path中选择Add External JARs,然后选择相应JAR包即可。
但是,在升级到ADT17之后,Android项目下多出了一个Android Dependencies目录,之前通过Add
External JARs加入的jar包依然出现在Referenced
Libraries目录之下,但是似乎已经被弃用,虽然没有提示任何错误,但是在运行时会抛出ClassNotFoundException。
解决方法是将JAR包加入到Android
Dependencies下,其中一个默认引入目录是libs,因此只要将JAR包复制该目录下。
我们用最直接的方法来看,别忘了工程下得classpath文件,这才是王道。。无论你怎么操作,最终的jar包配置都在这里。。
1、选择项目属性的Java Build Path中选择Add External JARs,添加jar包,如图:
最终生成的classpath如下:
encoding="UTF-8"?>
path="src"/>
path="gen"/>
path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
kind="lib"
path="libs/android-support-v4.jar"/>
path="libs/gson-2.2.2.jar"/>
path="libs/pinyin4j-2.5.0.jar"/>
kind="output" path="bin/classes"/>
看清楚了吧,配置的只是相对路径,难怪找不到jar。。
有人说选择libs文件夹,然后选择use as source
foalder,试了一下classpath如下:
encoding="UTF-8"?>
path="src"/>
path="gen"/>
kind="src"
path="libs"/>
kind="con"
path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
path="libs/android-support-v4.jar"/>
path="libs/gson-2.2.2.jar"/>
path="libs/pinyin4j-2.5.0.jar"/>
path="bin/classes"/>
增加了一句话,但还是找不到jar包。。
使用ADT17以上,默认创建的android工程会多一个Android
Dependencie这样一个包。(这个包千万不要删除,删除了找都找不回来,至少我还没有发现找回来的办法)所有引入的包都会备份放在Android
Dependencie包下。引入的包也必须放在指定的目录下( 根目录的libs目录下),否则就找不到了。
默认的classpath文件如下:
encoding="UTF-8"?>
path="src"/>
path="gen"/>
path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
path="com.android.ide.eclipse.adt.LIBRARIES"/>
path="bin/classes"/>
添加jar包时,只需要把jar包拷贝到Libs目录下,这时候你会看到Android
Dependencie目录下也会出现刚添加的jar包。
从ADT16开始,Android项目中多了一个名为“Android Dependencies”
的库应用文件夹,这是ADT的第三方库新的引用方式。
当你需要引用第三方库时,只需在项目中新建一个名为"libs"的文件夹,然后将所有第三方包拷贝到该目录下。当eclipse启动时,ADT就会自动帮你完成库的引用,而不需要像以前一样自己Build
Path,也不再需要Referenced Libraries了。
如果不行,就执行下面操作:
你还需要选择项目属性的Java Build Path,然后选中Android Dependencie,执行Add
External JARs,然后选择相应JAR包即可。
encoding="UTF-8"?>
path="src"/>
path="gen"/>
path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
path="com.android.ide.eclipse.adt.LIBRARIES"/>
kind="lib"
path="D:/workspace_Android/RR/libs/gson-2.2.2.jar"/>
kind="output" path="bin/classes"/>
只有加到这里才算真的把jar包添加进来。。