Android Studio Ladybug 2024.2.1 中 Flutter 构建失败问题
问题描述
在将 Android Studio 升级至 Ladybug 2024.2.1 版本后,运行 Flutter 应用到 Android 模拟器或物理设备时会出现以下构建错误:
FAILURE: Build failed with an exception.
What went wrong:
Execution failed for task ':google_sign_in_android:compileDebugJavaWithJavac'.
Could not resolve all files for configuration ':google_sign_in_android:androidJdkImage'.
Failed to transform core-for-system-modules.jar...
该错误通常出现在第三方库(如示例中的 google_sign_in_android
)编译过程中,但实际会影响到所有库。用户尝试了更新库版本甚至移除报错库均未能解决问题。
根本原因在于新版本 Android Studio 绑定的 Java 运行环境与 Flutter 插件生态存在兼容性问题,需要手动配置兼容的 Java 版本和 Gradle 设置。
解决方案
方法 1: 配置 Java 17 运行环境
这是被多次验证有效的首选解决方案:
必要条件
- 已安装 Homebrew(macOS)
安装 Java 17 SDK:通过终端执行命令
bashbrew install openjdk@17
创建符号链接:建立 Java 17 的系统路径映射
bashsudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk
配置环境变量:将 JDK 添加到系统路径
- 对于 Zsh 用户(macOS Catalina 及以上):bash
echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc
- 对于 Bash 用户:bash
echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.bash_profile
- 对于 Zsh 用户(macOS Catalina 及以上):
配置 Flutter 使用该 JDK:在终端执行
bashflutter config --jdk-dir /opt/homebrew/opt/openjdk@17
更新项目设置:修改
android/app/build.gradle
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
}
}
- 重启开发环境:关闭并重新打开终端和 Android Studio
方法 2: 全面升级 Gradle 配置
适用于需要同步更新整个 Android 构建环境的项目:
- 更新 Gradle 版本:修改
android/gradle/wrapper/gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip
- 配置所有子项目:修改
android/build.gradle
subprojects {
afterEvaluate {
if (it.hasProperty('android')) {
// 统一设置 SDK 版本
it.android.compileOptions.sourceCompatibility = JavaVersion.VERSION_17
it.android.compileOptions.targetCompatibility = JavaVersion.VERSION_17
// Kotlin 配置
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions.jvmTarget = JavaVersion.VERSION_17
}
// 处理命名空间问题
if (it.android.namespace == null) {
def manifest = new XmlSlurper().parse(file(it.android.sourceSets.main.manifest.srcFile))
def packageName = manifest.@package.text()
android.namespace = packageName
}
}
}
}
- 更新插件设置:修改
android/settings.gradle
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.7.1" apply false
id "org.jetbrains.kotlin.android" version "1.9.24" apply false
}
dependencyResolutionManagement {
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
mavenCentral()
}
}
处理 NDK 版本冲突
如果遇到 NDK 版本警告:
Your project is configured with Android NDK 23.1.7779620,
but the following plugin(s) depend on a different Android NDK version:
- connectivity_plus requires Android NDK 27.0.12077973
解决方案:
- 指定 NDK 版本:修改
android/app/build.gradle
android {
...
// 使用插件要求的较新版本
ndkVersion = "27.0.12077973"
}
- 或禁用 Flutter 默认 NDK:当未明确指定时
android {
...
// ndkVersion = flutter.ndkVersion
}
后续维护建议
升级 Flutter 插件:确保所有插件兼容新环境
bashflutter pub upgrade
验证环境配置
bashflutter doctor
清理构建缓存:解决历史缓存问题
bashflutter clean
重要提示
升级后首次构建可能需要较长时间,Gradle 会下载新版本依赖项。建议在稳定的网络环境下执行构建操作。
以上解决方案已广泛验证,能有效解决 Android Studio Ladybug 2024.2.1 中的 Flutter 构建失败问题。如遇特定库的兼容性问题,可尝试暂时降级库版本或参考库的 GitHub Issues 获取针对性方案。