求助:Gradle依赖重复类问题——Google Cloud双API集成冲突
解决Google Cloud Speech + Translation API集成时的Protobuf重复类错误
你遇到的是典型的依赖版本冲突问题:Google Cloud Translation API默认依赖了完整版的protobuf-java,而你的gRPC配置使用了轻量版的protobuf-lite,两者包含大量完全重复的Protobuf核心类(比如报错里的AbstractMessageLite),导致打包时出现类重复冲突。
核心解决思路
让整个项目统一使用Protobuf的同一个变体(要么全用lite版,要么全用完整版)。考虑到Android项目的性能和体积优化,推荐统一使用protobuf-lite,具体修改步骤如下:
步骤1:修改Translation API的依赖配置
在Translation的依赖块中主动排除它自带的protobuf-java,避免和gRPC的protobuf-lite冲突:
//Translation implementation('com.google.cloud:google-cloud-translate:1.12.0') { exclude group: 'org.apache.httpcomponents' exclude group: 'org.json', module: 'json' exclude group: 'com.google.protobuf', module: 'protobuf-java' // 新增:移除冲突的完整版Protobuf } annotationProcessor 'com.google.cloud:google-cloud-translate:1.12.0'
步骤2:统一Protobuf版本(可选但推荐)
确保项目中Protobuf的版本和gRPC依赖的版本完全匹配。你可以查看grpcVersion对应的Protobuf Lite版本(比如gRPC 1.25.0对应Protobuf Lite 3.10.0),然后调整protobuf的依赖:
// 替换原来的protobuf-java依赖为对应版本的protobuf-lite protobuf 'com.google.protobuf:protobuf-lite:3.10.0' // 版本请匹配你的grpcVersion
步骤3:验证依赖树(排查潜在冲突)
执行Gradle命令查看完整的依赖树,确认没有同时存在protobuf-java和protobuf-lite:
./gradlew app:dependencies | grep "com.google.protobuf"
如果还有其他依赖引入了冲突的Protobuf变体,同样用exclude语法排除即可。
补充说明
你之前配置的packagingOptions主要用于排除重复的资源文件(比如LICENSE、META-INF),对Java类重复冲突没有作用,所以可以保留但不用依赖它解决当前问题。
内容的提问来源于stack exchange,提问作者Rifat
相关产品推荐
相关产品推荐

