首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Eclipse Android 專案 NoClassDefFoundError 解決:libs 目錄命名規則與 ADT 更新後的變化

     編輯:程式設計綜合問答

在 Eclipse ADT 更新後(特別是 ADT 17+),將第三方 JAR 放在專案根目錄下的 lib/ 資料夾並加入 Build Path,雖然編譯通過,但執行時拋出 java.lang.NoClassDefFoundError。原因在於 **ADT 新版規定:只有命名為 libs/(複數)的目錄會被自動打包進 APK**。

錯誤現象

09-19 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter

類別明明在 JAR 裡,Build Path 也加了,但 APK 內找不到。

解決步驟

  1. 將資料夾重新命名:lib/ → libs/
  2. 移除舊的 Build Path 參考:右鍵專案 → Build Path → Configure Build Path → Libraries 分頁 → 移除所有手動加入的 JAR。
  3. 清理專案:Project → Clean → 勾選專案 → OK。
  4. 重新建構:ADT 會自動掃描 libs/ 下的所有 JAR,加入 Build Path 並打包進 APK。

為什麼會這樣?

  • ADT 17+ 引入「Library Project」機制,統一約定 libs/ 為「自動打包的原生庫目錄」。
  • 手動加入 Build Path 僅影響編譯期,不影響打包邏輯。
  • lib/、libraries/、jars/ 等其他名稱均**不會**被自動處理。

驗證方法

  1. 專案右鍵 → Export → Android → Generate Signed APK
  2. 用解壓縮工具開啟 APK → 檢查 classes.dex 或 lib/ 目錄是否包含該類別
  3. 或在專案 bin/classes/ 下搜尋對應 .class 檔

現代化建議:遷移至 Gradle (Android Studio)

Eclipse ADT 已於 2015 年停止更新。新專案請直接使用 **Android Studio + Gradle**,依賴管理只需在 build.gradle 宣告:

dependencies {
    implementation files('libs/mylib.jar')           // 本地 JAR
    implementation 'com.github.user:repo:1.0.0'      // JitPack
    implementation 'com.squareup.okhttp3:okhttp:4.9.0' // Maven Central
}

Gradle 自動處理傳遞性依賴、版本衝突、多渠道打包,完全避免此類手動目錄命名問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved