Android集成TomTom Maps遇protobuf-java重复类冲突问题求助
解决TomTom Maps集成时Protobuf重复类冲突问题
问题分析
引入TomTom Maps依赖 implementation "com.tomtom.sdk.maps:map-display:0.3.1617" 后,项目同时加载了protobuf-java-3.21.12和protobuf-javalite-3.17.3两个库,二者包含大量重复的Protobuf核心类,触发编译阶段的重复类检查失败。
解决方案
1. 定位冲突依赖来源
先执行Gradle命令排查依赖树,明确哪个第三方依赖引入了protobuf-javalite:
./gradlew app:dependencies
在输出结果中搜索protobuf-javalite,找到对应的父依赖(如Firebase或其他SDK)。
2. 排除冲突依赖
根据依赖来源,选择保留其中一个Protobuf库版本:
- 若要保留
protobuf-javalite-3.17.3,在TomTom的依赖中排除protobuf-java:implementation("com.tomtom.sdk.maps:map-display:0.3.1617") { exclude group: "com.google.protobuf", module: "protobuf-java" } - 若要保留
protobuf-java-3.21.12,在引入protobuf-javalite的父依赖中排除该库:// 示例:假设Firebase Analytics引入了javalite implementation("com.google.firebase:firebase-analytics:xxx") { exclude group: "com.google.protobuf", module: "protobuf-javalite" }
3. 强制统一Protobuf版本
如果排除依赖后仍有问题,可通过Gradle版本强制策略,让所有依赖统一使用指定版本的Protobuf库:
在模块的build.gradle中添加:
configurations.all { resolutionStrategy { // 选择统一使用javalite版本,或替换为protobuf-java的版本 force "com.google.protobuf:protobuf-javalite:3.17.3" // 或者 force "com.google.protobuf:protobuf-java:3.21.12" } }
注意:强制版本前需测试TomTom SDK是否兼容所选版本,避免运行时异常。
4. 升级TomTom SDK版本
尝试升级到最新版的TomTom Maps SDK,新版本可能已调整依赖逻辑,避免了Protobuf版本冲突:
implementation "com.tomtom.sdk.maps:map-display:最新版本号"
内容的提问来源于stack exchange,提问作者Tavo
相关产品推荐
相关产品推荐

