升级Firebase库至16.0.0引发Google Play服务依赖问题
解决Gradle冲突:Program type already present & 无法解析GMS库版本
这个问题我之前也踩过坑,核心原因是旧版OneSignal Gradle插件(0.8.1)和google-services 4.0.0的适配bug——旧插件会强制把Google Play Services(GMS)库版本和Firebase版本绑定,但当时Firebase 16.0.0发布时,很多GMS库还没推出对应的16.0.0版本,直接导致了两类错误:先是重复类冲突,后是依赖拉取失败。
下面是一步步的解决方法:
1. 升级OneSignal Gradle插件到兼容版本
旧版0.8.1的插件逻辑有问题,会无视你的配置强制修改GMS版本。把项目根目录的build.gradle里的OneSignal插件版本更新到至少0.11.0以上(推荐用0.12.6,这个版本和google-services 4.x完全兼容):
buildscript { dependencies { // 替换旧的插件版本 classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:0.12.6' // 其他依赖保持不变 } }
2. 强制指定所有GMS和Firebase的有效版本
在应用模块的build.gradle的android块中添加resolutionStrategy,强制指定实际存在的稳定版本(注意:16.0.0版本的GMS库大多不存在,要换成已发布的版本):
android { // ... 你的现有配置(compileSdk、defaultConfig等) ... configurations.all { resolutionStrategy { // 强制GMS库使用存在的稳定版本 force 'com.google.android.gms:play-services-maps:16.1.0' force 'com.google.android.gms:play-services-location:16.0.0' force 'com.google.android.gms:play-services-places:16.0.0' force 'com.google.android.gms:play-services-base:16.1.0' force 'com.google.android.gms:play-services-basement:16.2.0' force 'com.google.android.gms:play-services-tasks:16.0.1' // 同步Firebase版本到兼容的稳定版 force 'com.google.firebase:firebase-core:16.0.8' force 'com.google.firebase:firebase-invites:16.1.0' } } }
3. 清理缓存并重建项目
这一步不能少,避免旧缓存干扰新配置:
- 执行终端命令:
./gradlew clean(Windows用户用gradlew clean) - 重启Android Studio,点击
File -> Invalidate Caches / Restart - 等待缓存重建完成后,重新构建项目
为什么之前的resolutionStrategy无效?
因为旧版OneSignal插件的优先级比你的自定义配置更高,它会在你设置完之后再次修改版本。升级插件后,它会尊重你的版本强制规则,不会再乱改GMS版本了。
内容的提问来源于stack exchange,提问作者Qandeel Abbassi
相关产品推荐
相关产品推荐

