迁移至Mapbox 11时遭遇重复类错误,如何解决?
解决Mapbox 10迁移到11时的重复类错误
问题本质
你当前用的部分Mapbox依赖版本太老,和Mapbox 11的架构变更完全不兼容:
mapbox-android-plugin-offline-v9:0.9.0、mapbox-android-navigation-ui:0.42.6、com.mapbox.navigation:android:2.5.1都是针对Mapbox 10及更早版本开发的,它们会自动引入旧版mapbox-android-core库;而Mapbox 11已经把权限管理这类核心功能迁移到com.mapbox.common库中,两边的类完全重复,自然冲突。- 单纯靠排除旧库根本没用,因为这些老依赖的内部逻辑就是基于旧版core写的,强行排除只会引发更多运行时崩溃。
一步步解决
1. 把所有依赖升级到适配Mapbox 11的版本
直接替换你的依赖配置为下面的兼容版本:
// Mapbox Maps核心库(11.x稳定版) implementation("com.mapbox.maps:android:11.0.0") // 离线功能注意:旧的v9离线插件只支持Mapbox 9.x,必须换用Mapbox 11官方的离线API // 不需要再依赖旧插件,直接通过MapboxMap实例操作离线区域即可 // 导航相关:升级到适配Mapbox 11的Navigation SDK版本 implementation("com.mapbox.navigation:android:2.13.0") // 这个版本完美适配Mapbox 11 implementation("com.mapbox.navigation:ui:2.13.0") // 对应配套的Navigation UI库
2. 全局强制统一依赖版本(可选,若仍有冲突)
如果替换依赖后还存在重复类问题,在Module级别的build.gradle里,dependencies块外面加这段规则,强制统一版本:
configurations.all { resolutionStrategy { // 强制使用Mapbox 11依赖的common版本 force "com.mapbox.common:common:24.0.0" // 彻底移除旧版core库 exclude group: "com.mapbox.mapboxsdk", module: "mapbox-android-core" // 统一okhttp相关依赖的版本,避免重复 force "com.mapbox.common:okhttp:24.0.0" } }
3. 清理构建缓存,确保生效
最后一定要清理缓存,避免旧依赖残留:
- 在Android Studio里点
File → Invalidate Caches... → Invalidate and Restart - 终端执行命令:
./gradlew clean build --refresh-dependencies
重要提醒
- Mapbox 11对核心模块做了大重构,旧版本的第三方插件(比如离线v9)已经完全不兼容,别再用了,直接用官方新API就行。
- Navigation SDK要2.10及以上版本才支持Mapbox 11,低版本的导航库和Mapbox 11根本没法共存,必须升级。
内容的提问来源于stack exchange,提问作者Clay
相关产品推荐
相关产品推荐

