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

Eclipse 多模塊項目:工程 A 調用工程 B 類運行時 NoClassDefFoundError 解決方案

     編輯:程式設計綜合問答

問題現象

工程 A 在 Build Path 中添加了工程 B,編譯無錯,但運行時點擊按鈕調用 B 中類拋出:

java.lang.NoClassDefFoundError: org.videolan.vlc.audio.AudioServiceController

根本原因

Eclipse 的 Build Path → Projects 僅解決編譯期依賴,打包 APK 時 不會自動將工程 B 的類打入 dex。Android 打包機制要求:被依賴的 Java 模塊必須導出為 JAR 或配置為 Library Project 並勾選 Export。

解決方案(按推薦順序)

方案一:將工程 B 導出為 JAR(最快)

  1. 右鍵工程 B → Export → Java → JAR file。
  2. 勾選導出的類與資源,生成 B.jar。
  3. 工程 A → Properties → Java Build Path → Libraries → Add External JARs 選中 B.jar。
  4. 關鍵步驟:在 Order and Export 標籤勾選該 JAR,確保打包進 APK。

方案二:配置工程 B 為 Android Library(規範)

  1. 工程 B 右鍵 → Properties → Android,勾選 Is Library。
  2. 工程 A → Properties → Android → Library → Add 選中工程 B。
  3. 工程 A → Properties → Java Build Path → Order and Export 勾選工程 B。

方案三:遷移至 Gradle 多模塊構建(長遠)

在 settings.gradle 引入 :moduleB,moduleA 的 dependencies { implementation project(':moduleB') }。Gradle 會自動處理打包與依賴傳遞,彻底解決此類問題。

驗證方法

打包 APK 後,用 unzip -l app.apk | grep AudioServiceController 或 Android Studio Analyze APK 確認該類是否存在於 classes.dex 中。

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