上篇博文也提到了這個問題,但沒有深入的講解。這次特意做了整理,詳細解釋其原因。
先看錯誤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包添加進來。。