Flutter >=3.16结合版本目录迁移Gradle至AGP8.x/Gradle8.x报错
环境版本
- AGP: 8.4
- Gradle: 8.6
- Flutter: 3.22.2
错误信息
class org.gradle.api.internal.project.DefaultProject_Decorated cannot be cast to class org.gradle.api.initialization.Settings ...
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)
The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
错误原因
核心冲突在于**dev.flutter.flutter-plugin-loader插件的加载位置错误**:该插件需要在Gradle的pluginManagement阶段(settings.gradle中)加载,你将其放在了项目级build.gradle的plugins块中,导致Gradle上下文混乱,触发类转换异常。同时,版本目录的别名使用方式未适配Flutter Gradle插件的加载逻辑。
解决步骤
1. 修正settings.gradle配置
在settings.gradle的pluginManagement中引入版本目录,同时将flutter-plugin-loader移回settings.gradle的plugins块:
pluginManagement { def flutterSdkPath = { def properties = new Properties() file("local.properties").withInputStream { properties.load(it) } def flutterSdkPath = properties.getProperty("flutter.sdk") assert flutterSdkPath != null, "flutter.sdk not set in local.properties" return flutterSdkPath }() includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") repositories { google() mavenCentral() gradlePluginPortal() } // 引入版本目录,让settings阶段能识别插件版本 resolutionStrategy { eachPlugin { if (requested.id.namespace == "com.android") { useModule("com.android.tools.build:gradle:${libs.versions.agp.get()}") } if (requested.id.namespace == "org.jetbrains.kotlin") { useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${libs.versions.kotlin.get()}") } } } // 加载项目根目录的版本目录文件 def catalogFile = file("../gradle/libs.versions.toml") if (catalogFile.exists()) { versionsCatalogs { create("libs") { from(files(catalogFile)) } } } } plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" } include ":app"
2. 调整项目级build.gradle
移除dev.flutter.flutter-plugin-loader,仅保留插件别名声明:
plugins { alias libs.plugins.android.application apply false alias libs.plugins.kotlin.android apply false }
3. 清理Gradle环境
执行以下操作彻底清理缓存和守护进程:
- 停止所有Gradle守护进程:
# macOS/Linux ./gradlew --stop # Windows gradlew.bat --stop - 删除Gradle缓存目录:
- macOS/Linux:
rm -rf ~/.gradle/caches - Windows:删除
C:\Users\<你的用户名>\.gradle\caches
- macOS/Linux:
- 回到Flutter项目根目录执行:
flutter clean flutter pub get
4. 验证版本目录配置
确保gradle/libs.versions.toml中的版本与环境匹配:
[versions] agp = "8.4" kotlin = "1.9.24" # 与AGP 8.4兼容的Kotlin版本 [plugins] android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
内容的提问来源于stack exchange,提问作者usr153.K

