2012-03-23 114 views
15

我遇到了一個奇怪的錯誤。我有一個使用外部庫,尤其是Android項目:Android Eclipse NoClassDefFoundError用於外部.jar文件

  • Android的支持 - v4.jar(請在Android 1.6,片段支持)
  • GoogleAdMobAdsSdk-4.3.1.jar(對於廣告)

該項目運行良好,直到我更新了插件的某些方面(不記得具體細節,因爲我沒有太注意它),然後,每當我嘗試使用上述.jar中的任何類時文件(或其任何子類,甚至是我定義的),我會得到一個java.lang.NoClassDefFoundError。經過多次搜索後我找不到答案,所以我非常難過。

我相信這個問題與我的IDE設置有關,它與實際代碼無關,所以我不會發布任何內容,除非它是絕對必要的。

回答

35

你需要閱讀 - Dealing with dependencies in Android projects

這個環節也非常有用 - ClassDefNotFoundError with ADT 17

基本上,創建一個名爲libs文件夾,將您所有的文件jar裏面。最近的更新會自動爲您處理剩下的問題。你不需要再編輯你的路徑。

+0

我真的不知道他們爲什麼改變ADT以這種方式行事,因爲這些庫將在多個項目之間共享。但至少這將是一個短期的修復。 – Dan 2012-03-25 01:49:38

+0

謝謝,很多! – AVEbrahimi 2012-04-13 06:05:37

+5

這並沒有爲我工作..使用ADT 20 – Cheluis 2012-11-07 14:53:54

0

我今天也遇到這個錯誤,因爲更新到了Android SDK,r17。 @aneal指出的鏈接沒有討論的是如何處理外部運行時庫(例如,在它們自己的標題下導入的鏈接 - 不是導入的用戶庫)。

解決此問題的最簡單方法是更改​​構建路徑中的構建順序。只需右鍵點擊您的項目,然後選擇屬性。從這裏選擇Java Build Path。在顯示屏的頂部,選擇標籤訂單並導出並移動GoogleAdMobAdsSdk-4.3.1.jar以上Android X(將x替換爲您使用的版本)。接下來,清理你的項目並運行它。你應該很好走!

1

也警告其他人誰已經更新至R17與許多依賴。我在自己的構建路徑上有另一個引用的項目,並且在互聯網上的這個r17問題上遵循所有指示後仍然不起作用。

一個小時,我引用的項目使用外部JAR的舊版本比我的主要項目做了之後發現了。當試圖編譯主項目時,由於這個jar版本的差異,Eclipse會放棄,我從來沒有注意到Console中的警告消息。

解決方案是對新版本的外部JAR文件複製到引用的項目的libs目錄。

哇 - 這樣的生產力殺手.....

7

Android不支持Java1.7到現在。使用合規性級別1.7構建的Jars不能用於Android應用程序。在導出jar文件之前,重建具有合規性級別5.0或6.0的Java項目。

我發現這篇文章通過谷歌和上面的答案沒有解決我的問題。希望我說的會對別人有幫助。

+0

這原來是我的問題。我用1.6重新編譯,瞧!我用「javac -source 6 -target 6 ...」 – Jason 2013-04-19 01:02:23

0

我解決它的方法是:右鍵單擊項目並選擇構建路徑。在出現的選擇中選擇configure build path。之後,看看你的庫是否在庫文件夾中,然後選擇訂單和導出選項卡,並在那裏選擇所有的jar文件。然後選擇確定並運行您的項目。

7

如果您在升級到ADT 22後看到NoClassDefFoundError,試試這個在Eclipse:

  • 轉到項目屬性Java構建路徑訂單和出口標籤。
  • 檢查Android私有庫選項。

Android Private Libraries option

+0

這就是我的詭計。非常感謝 ! – Vahron 2013-06-04 13:52:49

0

如果你正在使用Eclipse使用Maven的IDE(M2E)進入「Java構建路徑」,然後「排序和導出」,最後檢查的項目「Maven依賴」,並把它拉下來,以列表的底部。您應該在同一個工作區中執行與項目引用相同的操作。每當我在新電腦中設置項目時,都會發生這種情況。

相關問題