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

Android Studio 百度地圖 SDK 導入報錯:duplicate entry 解決方案

     編輯:程式設計疑難解答

錯誤現象

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/baidu/location/Address$1.class

根本原因:依賴衝突,類別重複打包

  • 百度地圖 SDK 通常包含 locSDK_xxx.jar(定位)與 BaiduLBS_Android.jar(地圖)。
  • 兩個 JAR 內部**可能同時包含相同包名下的類別**(如 `com.baidu.location.Address`)。
  • Gradle 打包合併 DEX 時發現同一類別定義出現兩次 → duplicate entry。

解決方案(按推薦順序)

方案一:移除重複 JAR,僅保留 AAR/官方 Maven 依賴(最乾淨)

現代百度地圖 SDK 提供 AAR 發布至 Maven 倉庫,優先使用 Gradle 依賴管理,不要手動複製 JAR 到 `libs/`。

// build.gradle (Module: app)
dependencies {
    implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.5.0'   // 地圖
    implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.1.0' // 定位
    // 刪除 libs/ 下所有百度相關 .jar
}

若專案必須離線,請確認 只導入一份完整 SDK 包,不要同時導入「地圖包」與「定位包」的 JAR,它們有重疊。

方案二:排除重複模組

若必須保留多個 JAR,在依賴聲明中排除衝突包:

implementation (files('libs/BaiduLBS_Android.jar')) {
    exclude group: 'com.baidu.location' // 排除定位相關類
}
implementation files('libs/locSDK_xxx.jar')

方案三:啟用 MultiDex 並配置打包選項(治標不治本)

android {
    defaultConfig {
        multiDexEnabled true
    }
    packagingOptions {
        exclude 'com/baidu/location/Address.class' // 強制排除衝突類
    }
}

缺點:可能導致運行時 `ClassNotFoundException` 或邏輯錯誤,不推薦長期使用。

避坑檢查清單

  1. libs/ 目錄下是否有多個百度 JAR?
  2. 是否同時引用了 Maven 依賴與本地 JAR?
  3. 執行 ./gradlew app:dependencies 檢查依賴樹,搜尋 com.baidu.location 出現次數。

核心原則:**一個類別在最終 APK 中只能有一個定義**。善用 Gradle 依賴管理,拒絕手動疊加 JAR,從源頭杜絕衝突。

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