升级至Flutter v3后项目构建失败问题排查求助
Flutter 2.2.10升级至Flutter 3后构建失败问题
将项目依赖的Flutter版本从v2.2.10升级至Flutter 3后,项目构建抛出如下错误:
FAILURE: Build failed with an exception. [ ] * Where: [ ] Script '/Users/user/fvm/versions/3.0.0/packages/flutter_tools/gradle/flutter.gradle' line: 1156 [ ] * What went wrong: [ ] Execution failed for task ':app:compileFlutterBuildDevDebug'. [ ] > Process 'command '/Users/user/fvm/versions/3.0.0/bin/flutter'' finished with non-zero exit value 1 [ ] * Try: [ ] Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. [ ] * Get more help at https://help.gradle.org [ ] BUILD FAILED in 2m 56s
已尝试的排查操作
- 升级项目所有依赖版本
- 执行
flutter clean命令 - 删除项目build目录
- 清除Android Studio缓存并重启IDE
- 升级Gradle版本
- 执行
flutter doctor命令,检测结果显示无异常
以上常规方案均尝试后问题仍未解决,以下是项目相关配置文件内容。
相关配置文件
项目根目录build.gradle
buildscript { ext.kotlin_version = '1.6.21' repositories { google() jcenter() maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'com.android.tools.build:gradle:3.5.4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.10' classpath 'io.fabric.tools:gradle:1.31.2' } } allprojects { repositories { google() jcenter() maven { url 'https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1' } } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir }
app模块build.gradle
def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } def flutterRoot = localProperties.getProperty('flutter.sdk') if (flutterRoot == null) { throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") } def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' } def flutterVersionName = localProperties.getProperty('flutter.versionName') if (flutterVersionName == null) { flutterVersionName = '1.0' } apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { compileSdkVersion 32 sourceSets { main.java.srcDirs += 'src/main/kotlin' } lintOptions { disable 'InvalidPackage' } defaultConfig { applicationId "" minSdkVersion 23 targetSdkVersion 32 versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { signingConfig null } debug { signingConfig null } } flavorDimensions "default" productFlavors { //flavor details } flutter { source '../..' } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" testImplementation 'junit:junit:4.12' implementation 'com.google.firebase:firebase-messaging:20.1.0' androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' implementation 'com.google.code.gson:gson:2.8.6' implementation 'com.microsoft.identity.client:msal:1.6.0' implementation platform('com.google.firebase:firebase-bom:29.0.0') implementation 'com.google.firebase:firebase-analytics' } apply plugin: 'com.google.gms.google-services'
修复方案
这个问题是Android构建工具链版本和Flutter 3不匹配导致的,按以下步骤修改即可解决:
- 升级Android Gradle Plugin版本
根目录build.gradle中,将com.android.tools.build:gradle的版本从3.5.4改为7.0.4,同时找到android/gradle/wrapper/gradle-wrapper.properties文件,把distributionUrl对应的Gradle版本改为gradle-7.0.2-bin.zip,和AGP版本匹配。 - 移除废弃的Fabric相关配置
Fabric服务早已停止维护,Flutter 3不再兼容相关依赖,直接删掉根目录build.gradle中io.fabric.tools:gradle:1.31.2的依赖声明,以及repositories里的https://maven.fabric.io/public仓库地址。 - 修正app模块的构建配置兼容问题
打开app模块的build.gradle做以下修改:- 把
lintOptions配置块替换为新版AGP要求的写法:lint { disable 'InvalidPackage' } - 删除buildTypes下release和debug里的
signingConfig null两行配置,新版AGP不允许直接将签名配置置空,不需要自定义签名时直接移除该配置即可。 - 将依赖中的
org.jetbrains.kotlin:kotlin-stdlib-jdk7替换为org.jetbrains.kotlin:kotlin-stdlib-jdk8,适配Kotlin 1.6+的默认JDK版本要求。
- 把
- 清理缓存后重新构建
在项目根目录依次执行以下命令:
执行完成后重新构建项目即可正常编译。flutter clean cd android && ./gradlew clean cd .. && flutter pub get
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

