錯誤本質
DEX 文件中存在**重複類定義**,導致打包失敗。常見於 Eclipse/ADT 時代,現代 Gradle 構建較少見。
五大排查方案(按成功率排序)
方案一:清理構建緩存(最簡單)
# Eclipse
Project → Clean → 勾選項目 → OK
# 或
關閉 Eclipse → 刪除 workspace/.metadata → 重啟
方案二:檢查重複 JAR 包(高發區)
- 右鍵項目 → Properties → Java Build Path → Libraries
- 展開 **Android Dependencies**,查找重複 JAR
- 常見:`android-support-v4.jar` 同時存在於 `libs/` 和庫項目中
- 解決:從 `libs/` 刪除,保留庫項目依賴,或統一版本
方案三:檢查項目內重複類(隱蔽)
- 項目中定義的類與引用庫中的類**包名+類名完全相同**
- 例如:項目有 `com.example.Utils`,引用的 JAR 也有 `com.example.Utils`
- 解決:刪除項目中的重複類,使用庫中的版本
方案四:APK 文件殘留(罕見)
- 項目目錄下存在 `.apk` 文件(可能是舊版構建產物)
- 解決:刪除項目根目錄下的所有 `.apk` 文件
方案五:更新 ADT/構建工具(治標不治本)
- Help → Install New Software → 更新 ADT 插件
- 更新 Build Tools 至最新版
現代 Gradle 環境下的對應錯誤
// 錯誤:Duplicate class xxx found in modules jetified-xxx.jar and xxx.jar
// 解決:依賴去重
implementation ('com.xxx:lib:1.0') {
exclude group: 'com.google.guava' // 排除傳遞依賴
}
// 或強制統一版本
configurations.all {
resolutionStrategy.force 'com.google.guava:guava:31.1-jre'
}
根治建議
- 遷移至 **Android Studio + Gradle**,享受依賴管理、增量構建、現代工具鏈
- 使用 `./gradlew dependencies` 分析依賴樹
- 配置 `multiDexEnabled true` 解決 65K 方法限制(而非重複類)