Android升级play-services-ads:21.0.0报重复类错误原因及解决方法
问题触发原因
这个重复类报错是Google服务套件依赖版本不匹配直接导致的:
- 项目中引入的
firebase-bom:29.2.1是Google官方提供的依赖版本清单,会自动为所有Firebase、关联Google Play服务组件锁定版本,该版本BOM绑定的play-services-measurement系列组件版本为20.1.1 - 升级到
play-services-ads:21.0.0后,AdMob SDK会传递依赖20.1.2版本的play-services-measurement-base组件 - 两个存在小版本差的measurement组件包含大量同名实现类,Gradle编译时同时打包了两个版本的组件,就会抛出重复类错误。之前使用20.6.0版本AdMob时,它传递依赖的measurement组件版本刚好和BOM锁定的20.1.1对齐,因此不会触发冲突。
可行解决方案
按推荐优先级排序:
方案1:升级Firebase BOM到适配版本(最推荐)
直接升级Firebase BOM版本,让其自动对齐AdMob 21.0.0依赖的Play服务组件版本,不需要手动逐个调整组件版本,是最稳妥的解决方式。
将app层级build.gradle中的Firebase BOM配置从:
implementation platform('com.google.firebase:firebase-bom:29.2.1')
修改为:
implementation platform('com.google.firebase:firebase-bom:30.2.0')
修改后同步Gradle即可自动解决版本冲突,该版本BOM绑定的measurement组件版本和AdMob 21.0.0依赖的版本完全一致,不会再出现类重复问题。
注意:使用Firebase BOM管理依赖时,不要手动给Firebase、Play服务相关依赖指定版本号,避免后续再次出现版本不匹配问题。
方案2:强制指定measurement组件统一版本
如果暂时不想升级Firebase BOM,可以通过Gradle的依赖解析规则,强制所有模块引用统一版本的measurement系列组件,彻底消除版本差。
在app层级build.gradle的android配置块中添加如下规则:
android { // 保留原有compileSdk、defaultConfig、buildTypes等配置 configurations.all { resolutionStrategy { force 'com.google.android.gms:play-services-measurement-base:20.1.2' force 'com.google.android.gms:play-services-measurement-impl:20.1.2' force 'com.google.android.gms:play-services-measurement-sdk:20.1.2' } } }
添加后同步Gradle,所有依赖都会被强制拉取20.1.2版本的measurement组件,从根源解决重复类问题。
方案3:升级Google Services插件版本
当前使用的com.google.gms:google-services:4.3.10版本对高版本AdMob、Firebase的依赖对齐逻辑存在缺陷,可以搭配以上任意方案,将根目录build.gradle中的google-services插件升级到4.3.13及以上版本,优化依赖解析逻辑,减少后续升级依赖时出现同类冲突的概率:
classpath "com.google.gms:google-services:4.3.13"
内容的提问来源于stack exchange,提问作者Dannis Case
相关产品推荐
相关产品推荐

