2012-03-22 59 views
43

今天我將ADT和SDK工具更新至v17,我的項目使用 Google的gson jar庫開始拋出NoClassDefFoundError。 這裏的logcat輸出:Gson NoClassDefFoundError將ADT和SDK工具更新至v17

> 03-22 12:30:58.941: E/AndroidRuntime(21672): FATAL EXCEPTION: main 
> 03-22 12:30:58.941: E/AndroidRuntime(21672): 
> java.lang.NoClassDefFoundError: com.google.gson.Gson 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> com.matriksdata.conn.XRequestHandler.connect(XRequestHandler.java:35) 
> 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> com.matriksdata.conn.XRequestHandler.makeRequest(XRequestHandler.java: 
> 29) 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> com.matriksdata.bavul.XBaseWithConnectionActivity.makeRequest(XBaseWithConnectionActivity.java: 
> 46) 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> com.matriksdata.ui.login.SplashScreenActivity.onCreate(SplashScreenActivity.java: 
> 36) 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> android.app.Activity.performCreate(Activity.java:4465) 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 
> 1049) 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 
> 1919) 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 
> 1980) 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> android.app.ActivityThread.access$600(ActivityThread.java:122) 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
> 03-22 12:30:58.941: E/AndroidRuntime(21672): at 
> android.os.Handler.dispatchMessage(Handler.java:99) 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> android.os.Looper.loop(Looper.java:137) 03-22 12:30:58.941: 
> E/AndroidRuntime(21672): at 
> android.app.ActivityThread.main(ActivityThread.java:4340) 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> java.lang.reflect.Method.invokeNative(Native Method) 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> java.lang.reflect.Method.invoke(Method.java:511) 03-22 12:30:58.941: 
> E/AndroidRuntime(21672): at com.android.internal.os.ZygoteInit 
> $MethodAndArgsCaller.run(ZygoteInit.java:784) 03-22 12:30:58.941: 
> E/AndroidRuntime(21672): at 
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 03-22 
> 12:30:58.941: E/AndroidRuntime(21672): at 
> dalvik.system.NativeStart.main(Native Method) 

有什麼想法嗎?

+0

您是否嘗試過從eclipse中清理項目? – DNRN 2012-03-22 10:47:56

回答

77

今天我遇到了類似的問題。

這個固定對我來說:

  • 刪除所有Android庫項目從構建路徑中的外部罐。
  • 在您的項目中創建一個名爲'libs'的文件夾。
  • 將所有外部.jars放在該文件夾中,ADT現在應該將它們放在'Android Dependencies'下。
  • 以正常方式重新導入您以前的所有Android庫項目。

問題是外部jar文件默認沒有放置在'libs'文件夾中,當使用Properties - Java Build Path-添加外部Jar時,它們被置於'Referenced Libraries'而不是'Android Dependencies'這會導致NoClassDefFoundError。

請檢查Dealing with dependencies in Android projects瞭解更多詳情。

+0

您能否擴展您的帖子,解釋如何將這些配置鏈接到**源**和** javadoc **? – JJD 2012-06-23 23:51:46

+0

有一些「如何做」固定源和Javadoc在此評論所報告的問題:[鏈接](http://code.google.com/p/android/issues/detail?id=27490) – Freddroid 2012-06-26 12:46:05

+0

尼斯!工作正常!謝謝@Freddman。 – 2012-08-14 21:05:47

0

在構建路徑中檢查你的gson庫。也許gson libraty不是不可訪問的。

10

對於SDK Tools 17,您需要按照建議的here將庫項目的文件夾從「lib」重命名爲「libs」。 也看看this

0

下載GSON罐子,並作爲類路徑

2

檢查順序和

Project->Properties->Java build path->Order and Export: 

順序選擇和選擇:

select Google APIs (optional) 
select Dependencies 
select Android Private Libraries 
[-] src 
[-] gen 

而且在標籤庫:

依賴 私人庫(罐中的 '庫' 目錄) 其他

爲我工作!

13
  1. 右鍵單擊項目,然後選擇屬性
  2. 轉到Java構建路徑訂單和出口。
  3. 勾選「Android的私人圖書館」
  4. 單擊項目,清潔
+0

它幫助我和保存的時間我的手 – 2013-07-08 10:01:46

+0

由於這是幫助我的唯一 – clearwater 2013-12-11 12:58:38

0

我使用GSON庫中的項目,所以要解決這個問題超出了添加構建路徑上GSON罐子,我需要聲明它在我的庫項目清單中,如下所示:

<uses-library android:name="com.google.gson" /> 
相關問題