=========================================================
引用了網上的一篇文章,寫的很不錯,又正好解決了我的問題
ADT17以上版本應該是捨棄了Reference包的引用
=========================================================
最近開發項目需要從google地圖轉換到高德地圖,所以在原有工程的基礎上,只需要導入高德地圖的包即可,代碼大致和google的一樣。但是導入後,eclipse下不會提示錯誤,但是在模擬器執行的時候就會報錯:NoClassDefFoundError錯誤。
Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解決辦法)
1、在工程下新建lib文件夾,將需要的第三方包拷貝進來。2、將引用的第三方包,添加進工作的build path。
3、(關鍵的一步)將lib設爲源文件夾。如果不設置,則程序編譯可以通過,但運行的時候,會報:
在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文件,這讓我明白了,直接從其他正常項目裏面把
<!-- 注意,這個.classpath文件在eclipse工作空間的硬盤存放位置對應工程項目目錄下面 -->
<classpathentry kind="lib" path ="自定義jar的地址" />
修改成
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>。
這樣子刷新項目,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
<!-- 這樣有時候還是不能去掉錯誤,這時候注意,在進入project -> properties -> android後,下面有
一個is library項,把它勾上,再點擊確定錯誤就OK了,我的錯誤就是這樣解決的,一開始按照上面
以及後面的方法都解決不了,最後我看到有一個is library項,把它勾上再確定試一下OK,錯誤沒了 -->
============================================================================
附:
上網上廣爲流傳的解決方法:conversion to dalvik format failed with error 1的解決辦法
1、如果不修改android sdk版本,則使用project clean 命令作用於某工程即可。 (該處理方式
只是在高版本中兼容了低版本工程,未真正意義上的升級)
1) 修改SDK
選擇工程,build path --> configure build path ---> library 刪除引用的低版本SDK,
然後add External JARs,選擇高版本SDK,OK,保存
2) 修改classpath文件
該文件可能存在該項: <classpathentry kind="lib" path ="你所指定的高版本的地址"把她修改成<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK" />
3) 修改AndroidManifest.xml
在AndroidManifest.xml文件中,application標籤後添加<uses-sdk android:minSdkVersion="3"></uses-sdk>
4) 修改default.properties(很重要)
該文件最後一行(前面沒用#的)target=android-3 該成target=android-8,保存。
再看看你的工程和新建的android 2.2的工程結構就一樣了。
在沒有做任何設定之下 , 預設的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都可以載入 。
關於這個問題,下面我截的這幾個圖能更容易地說清楚:
從左到右三個圖分別是:
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團隊