Android构建问题:指定firebase-core:16.0.0却自动使用17.0.0
解决Firebase Core版本自动升级的问题
我来帮你搞定这个头疼的问题——这种明明指定了版本却被自动替换的情况,几乎都是Gradle的依赖冲突解析机制在搞鬼,具体原因和解决方法如下:
为什么会出现这个问题?
Gradle在处理依赖时,如果多个库间接引用了同一个库的不同版本,它默认会选择版本号最高的那个。你看你的依赖里已经加了firebase-messaging:17.0.0,这个库内部是依赖firebase-core:17.0.0的,所以Gradle自动把你指定的16.0.0替换成了更高的17.0.0版本,哪怕你手动写了16.0.0也没用。
怎么解决?
第一步:先搞清楚是谁在“偷偷”引高版本(可选但推荐)
先执行Gradle命令查看完整的依赖树,就能明确是哪个库带进来的高版本firebase-core:
# Mac/Linux用户在终端执行 ./gradlew app:dependencies # Windows用户在命令行执行 gradlew app:dependencies
在输出结果里搜索firebase-core,就能看到所有依赖它的库和对应的版本,一目了然。
第二步:强制Gradle使用你指定的版本
有两种靠谱的方式可以强制Gradle乖乖用16.0.0:
方式一:给单个依赖加强制规则
直接修改你firebase-core的依赖配置,加上force = true:
implementation('com.google.firebase:firebase-core:16.0.0') { force = true }
这样Gradle就会忽略其他库带来的高版本,强制使用你指定的16.0.0。
方式二:全局统一配置(推荐,一劳永逸)
如果你不想一个个改依赖,可以在根项目的build.gradle里添加全局的版本强制规则,确保所有模块都用你指定的版本:
allprojects { repositories { // 这里是你原本的仓库配置,比如google()、jcenter()之类的 } configurations.all { resolutionStrategy { // 强制所有地方使用16.0.0版本的firebase-core force 'com.google.firebase:firebase-core:16.0.0' // 要是以后其他Firebase库也出现类似问题,也可以在这里统一强制版本,比如: // force 'com.google.firebase:firebase-messaging:16.0.0' } } }
第三步:额外注意版本兼容性
虽然你要强制用16.0.0,但建议你确认一下其他Firebase库的版本是否和16.0.0兼容。比如你用的firebase-messaging:17.0.0和firebase-core:16.0.0会不会有运行时冲突?如果后续出现奇怪的崩溃,可以考虑把相关Firebase库统一到匹配的版本。
内容的提问来源于stack exchange,提问作者QuestionAndroid
相关产品推荐
相关产品推荐

