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

百度地圖定位 SDK 衝突:Multiple dex files define Lcom/baidu/location/Address$1

     編輯:程式設計疑難解答

錯誤現象

[Dex Loader] Unable to execute dex: Multiple dex files define Lcom/baidu/location/Address$1;
Conversion to Dalvik format failed...

專案昨日可正常執行,今日重新建置即報錯。使用官方 Key 與範例代碼,未更改邏輯。

根本原因

專案中重複引入了百度定位 SDK 的 Jar/AAR,導致同一個類別(如 Address$1 內部類)在多個 dex 檔中被定義。常見情況:

  • 同時引用 locSDK_x.x.jar 與 baidu-map-sdk-x.x.x.jar(後者已內含定位功能)。
  • Gradle 依賴樹中 implementation 與 api 重複傳遞。
  • 手動複製 Jar 到 libs 目錄,又在 build.gradle 中宣告依賴。
  • 多模組專案中,父子模組各自引入同一 SDK。

解決步驟

  1. 執行 ./gradlew app:dependencies 查看依賴樹,搜尋 baidu 或 locSDK 關鍵字。
  2. 在 build.gradle 中排除傳遞依賴:
implementation('com.baidu.mapapi:map-sdk:3.0.0') {
    exclude group: 'com.baidu.lbsapi', module: 'locSDK'
}
  1. 若使用 libs 目錄手動放 Jar,請刪除 libs 下相關 Jar,改用 Gradle 依賴管理。
  2. 多模組專案統一在父專案 dependencyManagement 鎖定版本,子模組不再指定版本號。
  3. 清理專案:./gradlew clean → Build → Rebuild Project。

驗證方法

打包 APK 後用 dexdump 或 Android Studio Analyze APK 檢查 classes.dex 中 com.baidu.location.Address 僅出現一次。

避坑提醒

百度地圖 SDK 版本更新頻繁,升級前務必閱讀釋出說明確認是否已整合定位模組,避免重複引入。

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