Flutter项目Gradle构建失败(exit value 1)排查求助
Flutter项目编译失败排查与修复
问题背景
项目今早可正常运行,创建新Flutter项目时出现编译失败;切换Flutter频道并升级后,原有项目也无法编译。尝试匹配另一正常项目的依赖、Flutter频道及SDK版本,问题仍未解决。
项目配置文件
pubspec.yaml
description: A new Flutter project. publish_to: 'none' version: 1.0.0+1 environment: sdk: ">=2.17.0 <3.0.0" dependencies: flutter: sdk: flutter image_picker: ^1.0.4 cupertino_icons: ^1.0.5 better_player: ^0.0.83 video_compress: ^3.1.0 getwidget: ^4.0.0 flutter_speed_dial: ^7.0.0 flutter_image_compress: ^2.1.0 modal_bottom_sheet: ^3.0.0 share: ^2.0.4 video_thumbnail: ^0.5.0 image_downloader: ^0.31.0 flutter_downloader: ^1.8.1 flutter_file_downloader: ^1.1.2 flutter_dotenv: ^5.0.2 multi_image_picker: ^4.8.1 intl: ^0.19.0 image: ^4.0.13 flutter_swiper_view: ^1.1.8 circular_menu: ^4.0.0 swipe_image_gallery: any galleryimage: ^2.0.1 flutter_staggered_grid_view: ^0.7.0 photo_view: ^0.15.0 fwfh_text_style: ^2.23.8 dev_dependencies: flutter_launcher_icons: "^0.13.1" flutter_test: sdk: flutter flutter_lints: ^4.0.0 flutter: uses-material-design: true assets: - lib/images/placeholder.png
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 flutter.compileSdkVersion compileSdkVersion 34 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.cumulus" minSdkVersion 31 targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true } buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } } } flutter { source '../..' }
gradle-wrapper.properties
#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
Android根目录build.gradle
buildscript { ext.kotlin_version = '1.6.10' repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.1.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { repositories { google() mavenCentral() } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { project.evaluationDependsOn(':app') } tasks.register("clean", Delete) { delete rootProject.buildDir }
编译错误输出
flutter run --release Launching lib\main.dart on Nokia G310 5G in release mode... You are applying Flutter's app_plugin_loader Gradle plugin imperatively using the apply script method, which is deprecated and will be removed in a future release. Migrate to applying Gradle plugins with the declarative plugins block: https://flutter.dev/go/flutter-gradle-plugin-apply You are applying Flutter's main Gradle plugin imperatively using the apply script method, which is deprecated and will be removed in a future release. Migrate to applying Gradle plugins with the declarative plugins block: https://flutter.dev/go/flutter-gradle-plugin-apply e: C:\src\flutter\packages\flutter_tools\gradle\src\main\kotlin\dependency_version_checker.gradle.kts:238:23: Unresolved reference: DependencyValidationException e: C:\src\flutter\packages\flutter_tools\gradle\src\main\kotlin\dependency_version_checker.gradle.kts:263:23: Unresolved reference: DependencyValidationException e: C:\src\flutter\packages\flutter_tools\gradle\src\main\kotlin\dependency_version_checker.gradle.kts:288:23: Unresolved reference: DependencyValidationException e: C:\src\flutter\packages\flutter_tools\gradle\src\main\kotlin\dependency_version_checker.gradle.kts:313:23: Unresolved reference: DependencyValidationException Warning: Flutter was unable to detect project Gradle, Java, AGP, and KGP versions. Skipping dependency version checking. Error was: org.gradle.internal.exceptions.LocationAwareException: Script 'C:\src\flutter\packages\flutter_tools\gradle\src\main\kotlin\dependency_version_checker.gradle.kts' line: 238 Script compilation errors: Line 238: throw DependencyValidationException(errorMessage) ^ Unresolved reference: DependencyValidationException Line 263: throw DependencyValidationException(errorMessage) ^ Unresolved reference: DependencyValidationException Line 288: throw DependencyValidationException(errorMessage) ^ Unresolved reference: DependencyValidationException Line 313: throw DependencyValidationException(errorMessage) ^ Unresolved reference: DependencyValidationException 4 errors ../../AppData/Local/Pub/Cache/hosted/pub.dev/better_player-0.0.83/lib/src/configuration/better_player_controls_configuration.dart:243:34: Error: The getter 'bodyText1' isn't defined for the class 'TextTheme'. - 'TextTheme' is from 'package:flutter/src/material/text_theme.dart' ('/C:/src/flutter/packages/flutter/lib/src/material/text_theme.dart'). Try correcting the name to the name of an existing getter, or defining a getter or field named 'bodyText1'. textColor: theme.textTheme.bodyText1?.color ?? Colors.white, ^^^^^^^^^ ../../AppData/Local/Pub/Cache/hosted/pub.dev/better_player-0.0.83/lib/src/configuration/better_player_controls_configuration.dart:244:35: Error: The getter 'button' isn't defined for the class 'TextTheme'. - 'TextTheme' is from 'package:flutter/src/material/text_theme.dart' ('/C:/src/flutter/packages/flutter/lib/src/material/text_theme.dart'). Try correcting the name to the name of an existing getter, or defining a getter or field named 'button'. iconsColor: theme.textTheme.button?.color ?? Colors.white, ^^^^^^ Target kernel_snapshot_program failed: Exception FAILURE: Build failed with an exception. * Where: Script 'C:\src\flutter\packages\flutter_tools\gradle\src\main\groovy\flutter.groovy' line: 1691 * What went wrong: Execution failed for task ':app:compileFlutterBuildRelease'. > Process 'command 'C:\src\flutter\bin\flutter.bat'' 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 56s Running Gradle task 'assembleRelease'... 57.9s Error: Gradle task assembleRelease failed with exit code 1 #0 throwToolExit (package:flutter_tools/src/base/common.dart:10:3) #1 AndroidGradleBuilder.buildGradleApp (package:flutter_tools/src/android/gradle.dart:500:9) <asynchronous suspension> #2 AndroidGradleBuilder.buildApk (package:flutter_tools/src/android/gradle.dart:224:5) <asynchronous suspension> #3 AndroidDevice.startApp (package:flutter_tools/src/android/android_device.dart:584:7) <asynchronous suspension> #4 FlutterDevice.runCold (package:flutter_tools/src/resident_runner.dart:534:33) <asynchronous suspension> #5 ColdRunner.run (package:flutter_tools/src/run_cold.dart:55:28) <asynchronous suspension> #6 RunCommand.runCommand (package:flutter_tools/src/commands/run.dart:853:27) <asynchronous suspension> #7 FlutterCommand.run.<anonymous closure> (package:flutter_tools/src/runner/flutter_command.dart:1405:27) <asynchronous suspension> #8 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:153:19) <asynchronous suspension> #9 CommandRunner.runCommand (package:args/command_runner.dart:212:13) <asynchronous suspension> #10 FlutterCommandRunner.runCommand.<anonymous closure> (package:flutter_tools/src/runner/flutter_command_runner.dart:372:9) <asynchronous suspension> #11 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:153:19) <asynchronous suspension> #12 FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:308:5) <asynchronous suspension> #13 run.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:130:9) <asynchronous suspension> #14 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:153:19) <asynchronous suspension> #15 main (package:flutter_tools/executable.dart:93:3) <asynchronous suspension>
核心问题分析
- Gradle兼容性问题:当前使用的Gradle 7.2、AGP 7.1.2与升级后的Flutter版本不匹配,导致
DependencyValidationException无法解析,依赖版本检查流程失败。 - 第三方依赖兼容性问题:
better_player: ^0.0.83使用了Flutter已废弃的TextTheme.bodyText1和TextTheme.button属性(Flutter 2.13+已将这些属性替换为bodyLarge、labelLarge等),与当前Flutter版本冲突。
修复步骤
1. 升级better_player依赖
修改pubspec.yaml中的better_player版本为兼容当前Flutter SDK的最新稳定版,例如:
better_player: ^0.0.86
执行命令更新依赖:
flutter pub get
2. 升级Gradle及相关组件
- 修改gradle-wrapper.properties:更新Gradle版本至7.5
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip - 修改Android根目录build.gradle:升级AGP和Kotlin版本
buildscript { ext.kotlin_version = '1.7.20' repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.4.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } - 迁移Gradle插件声明方式:修改App级build.gradle中的插件声明为新的格式
移除原有的plugins { id 'com.android.application' id 'kotlin-android' id 'dev.flutter.flutter-gradle-plugin' }apply plugin和apply from语句。
3. 清理缓存并重新编译
执行以下命令清理项目缓存并重新构建:
flutter clean flutter pub get flutter run --release
内容的提问来源于stack exchange,提问作者Derrick Klug
相关产品推荐
相关产品推荐

