修改Target SDK版本后Flutter项目构建失败,恢复后仍报错求助
尝试将Flutter项目的Target SDK从33升级到34后,应用无法正常构建;即使改回33版本,仍出现以下构建错误:
FAILURE: Build failed with an exception.
Where:
Build file 'C:\Users\dicov\Downloads\Flutter-Dating-App-master\android\build.gradle' line: 28What went wrong:
A problem occurred evaluating root project 'android'.
A problem occurred configuring project ':app'.
Failed to notify project evaluation listener.'com.android.build.api.variant.SourceDirectories$Flat com.android.build.api.variant.Sources.getByName(java.lang.String)'
相关配置文件见下文,且Android SDK升级助手无法完成SDK 33到34的组件验证,按提示操作后问题仍存在。
这个错误本质是Android Gradle插件(AGP)、Kotlin版本、Flutter Gradle插件三者版本不兼容,加上配置文件中的错误导致的,按以下步骤修复:
1. 统一Kotlin版本,匹配AGP版本
项目级build.gradle中存在Kotlin版本不一致的问题:ext.kotlin_version设为2.0.0,但kotlin-gradle-plugin用的是1.9.0,且AGP 7.4.2不兼容Kotlin 2.0.0。修改如下:
buildscript { // 统一Kotlin版本为1.9.0,和插件版本一致,适配AGP 7.4.2 ext.kotlin_version = '1.9.0' repositories { google() mavenCentral() } dependencies { // 升级到AGP 7.4.4稳定版,更好兼容SDK 34 classpath 'com.android.tools.build:gradle:7.4.4' classpath 'com.google.gms:google-services:4.4.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
2. 修复AndroidManifest.xml中的服务配置错误
你的AndroidManifest.xml里的服务名称包含空格,属于无效配置,会导致构建异常:
<!-- 错误配置 --> <service android:name="Smash or pass" android:foregroundServiceType="specialUse">
修改为合法的服务类全路径,比如:
<!-- 修正后,替换为你的实际服务类名 --> <service android:name=".MyForegroundService" android:foregroundServiceType="specialUse">
3. 同步依赖并清理缓存
- 执行命令:
flutter clean清理Flutter缓存 - 删除
android/.gradle文件夹,清除本地Gradle缓存 - 在Android Studio中点击
File > Sync Project with Gradle Files - 重新运行项目
4. 适配SDK 34(可选,若要升级到targetSdk 34)
如果最终要升级到targetSdk 34,补充以下操作:
- 在
app/build.gradle中把targetSdkVersion设为34 - 确保安装Android SDK 34的全部组件(SDK Platform、Build Tools 34.0.0等)
- 升级Firebase BOM版本到兼容SDK 34的版本:
implementation platform('com.google.firebase:firebase-bom:32.7.1')
内容的提问来源于stack exchange,提问作者Android_devNL

