在 Android 專案開發過程中,開發者常會遇到一種詭異現象:程式碼編譯完全正常,但一旦執行到引用外部 JAR 的類別時,系統便拋出 java.lang.NoClassDefFoundError 導致應用程式崩潰。這通常發生在反覆對專案執行「Add JAR」與「Remove JAR」操作之後。
透過比對正常專案與異常專案的屬性設定,發現問題專案在 Java Build Path 中少了 Android Dependencies 這個關鍵項目。深入追蹤到專案根目錄下的 .classpath 檔案,發現關鍵差異在於以下條目:
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
異常專案中 exported 屬性被改為 false,導致外部函式庫未被正確匯出至 APK 封裝中。
.classpath 檔案(可用文字編輯器或 Eclipse 專案屬性介面)com.android.ide.eclipse.adt.LIBRARIES 條目exported="false" 修改為 exported="true"若匯入的 JAR 檔未放置於專案 libs/ 目錄下,同樣會導致編譯通過但執行時崩潰。原因在於 ADT 建構流程只會自動將 libs/ 目錄下的 JAR 打包進 APK。請務必遵循以下規範:
libs/ 資料夾libs/ 選取此問題在早期 ADT 版本較少見,推測與 Eclipse/ADT 版本升級導致的 .classpath 管理機制變更有關。建議開發團隊統一 IDE 版本,並將 .classpath 納入版本控管,避免團隊協作時出現環境不一致問題。