Flutter Android项目添加GMS服务时Gradle构建失败求助
解决Flutter Android项目添加GMS服务时的Gradle构建失败问题
从你的错误日志和配置来看,问题核心是Project级Gradle配置错误以及依赖声明位置不当,下面是具体的修复步骤:
1. 修正Project级build.gradle配置
你当前的Project-gradle存在两个关键问题:
- 把应用运行依赖
com.android.support:appcompat-v4错误放到了buildscript的classpath中(classpath仅用于构建工具类依赖,不是应用运行依赖) - 重复声明了Gradle插件版本(同时写了3.2.1和3.3.1,引发版本冲突)
修改后的Project-gradle代码如下:
buildscript { repositories { google() jcenter() } dependencies { // 保留统一的Gradle插件版本,这里选择3.3.1 classpath 'com.android.tools.build:gradle:3.3.1' classpath 'com.google.gms:google-services:4.0.1' // 移除错误放置的appcompat依赖:classpath 'com.android.support:appcompat-v4:27' // 移除重复的Gradle插件声明:classpath 'com.android.tools.build:gradle:3.2.1' } } allprojects { repositories { google() jcenter() } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir }
2. 修正App级build.gradle配置
- 添加完整版本的AppCompat依赖(v4库已合并到v7中,推荐使用v7,且必须写完整版本号,不能只写27)
- 确保
compileSdkVersion和targetSdkVersion与support库版本保持一致(这里是27)
修改后的App-gradle关键部分代码:
android { // 确保编译版本与support库版本匹配 compileSdkVersion 27 defaultConfig { targetSdkVersion 27 // 启用multidex(因为你引入了multidex依赖) multiDexEnabled true // 其他原有配置... } } dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' // 添加正确的AppCompat依赖(完整版本号) implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.google.firebase:firebase-core:16.0.1' implementation 'com.android.support:multidex:1.0.3' implementation 'com.google.firebase:firebase-firestore:17.1.1' } apply plugin: 'com.google.gms.google-services'
3. 清理缓存并重新构建
完成配置修改后,执行以下操作:
- 打开Android Studio,点击
File -> Invalidate Caches / Restart,选择Invalidate and Restart - 等待项目重新同步完成后,尝试重新构建项目
错误原因总结
com.android.support:appcompat-v4是应用运行时依赖,必须放在App级gradle的dependencies块中,而非Project级的buildscript内- 依赖版本号必须完整(如27.1.1),仅写主版本号27会导致Gradle无法找到对应构件
- 重复声明Gradle插件版本会触发版本冲突,进而导致构建失败
内容的提问来源于stack exchange,提问作者aravind




