Flutter集成Firebase时Gradle构建失败求助
这个错误的核心原因很明确:Android Support Library要求同组的所有库必须使用统一版本,你的项目编译环境用的是27版本的SDK,但某个依赖(大概率是Firebase相关插件或者你引入的其他第三方库)偷偷带入了26.1.0版本的support-core-utils,和项目默认的27.1.1版本冲突了。下面我会先讲原理,再给你可执行的解决方案,帮你彻底搞懂为什么要这么做。
先搞懂原理:为什么会出现版本不一致?
Android的Support Library(现在已经逐步被AndroidX替代,但你的项目还在使用旧版)是一套相互依赖的工具库,Google要求所有同组的support库必须使用完全相同的版本号——比如如果你的appcompat-v7用27.1.1,那么support-core-utils、support-fragment等所有com.android.support组的库都得是27.1.1。
当你引入Firebase插件或者其他第三方Flutter包时,这些包的Android端依赖可能指定了旧版本的support库,Gradle默认会尝试合并这些依赖,但遇到版本冲突时就会抛出这个错误,要求你手动统一版本。
解决方案:强制统一所有Support库版本
最通用且有效的解决方法是在Gradle中配置强制版本策略,让所有com.android.support组的库都使用和你项目SDK匹配的版本(也就是27.1.1)。
步骤1:修改android/build.gradle文件
打开项目根目录下的android/build.gradle,找到其中的subprojects代码块,添加依赖版本统一的配置。你可以把现有的两个subprojects块合并成一个,最终代码如下:
subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" project.evaluationDependsOn(':app') // 新增:强制统一所有com.android.support库的版本 project.configurations.all { resolutionStrategy.eachDependency { details -> if (details.requested.group == 'com.android.support' && !details.requested.name.contains('multidex')) { details.useVersion "27.1.1" } } } }
代码解释
这段配置的作用是:
- 遍历所有子项目(包括Flutter插件的Android模块)的依赖
- 只要是
com.android.support组的依赖(排除multidex,它不受版本统一限制),就强制使用27.1.1版本 - 这样不管哪个第三方插件引入了旧版本的support库,都会被替换成和你项目匹配的版本,彻底解决冲突
可选:排查冲突来源(帮你更清楚问题根源)
如果你想知道到底是哪个插件引入了26.1.0版本的support-core-utils,可以在终端运行以下命令查看完整依赖树:
./gradlew app:dependencies
在输出结果中搜索com.android.support:support-core-utils,就能看到哪个依赖下面挂着26.1.0的版本。不过这个步骤只是帮你理解问题,不影响解决效果——强制统一版本已经足够解决问题。
验证解决方案
修改完配置后,直接运行flutter run或者flutter build apk,Gradle会重新解析依赖,版本冲突问题应该就会消失了。
内容的提问来源于stack exchange,提问作者Malcolm

