Skip to content

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 运行环境

这是被多次验证有效的首选解决方案

必要条件

  1. 安装 Java 17 SDK:通过终端执行命令

    bash
    brew install openjdk@17
  2. 创建符号链接:建立 Java 17 的系统路径映射

    bash
    sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk
  3. 配置环境变量:将 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
  4. 配置 Flutter 使用该 JDK:在终端执行

    bash
    flutter config --jdk-dir /opt/homebrew/opt/openjdk@17
  5. 更新项目设置:修改 android/app/build.gradle

groovy
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
    
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_17.toString()
    }
}
  1. 重启开发环境:关闭并重新打开终端和 Android Studio

方法 2: 全面升级 Gradle 配置

适用于需要同步更新整个 Android 构建环境的项目:

  1. 更新 Gradle 版本:修改 android/gradle/wrapper/gradle-wrapper.properties
properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip
  1. 配置所有子项目:修改 android/build.gradle
groovy
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
            }
        }
    }
}
  1. 更新插件设置:修改 android/settings.gradle
groovy
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

解决方案:

  1. 指定 NDK 版本:修改 android/app/build.gradle
groovy
android {
    ...
    // 使用插件要求的较新版本
    ndkVersion = "27.0.12077973"
}
  1. 或禁用 Flutter 默认 NDK:当未明确指定时
groovy
android {
    ...
    // ndkVersion = flutter.ndkVersion
}

后续维护建议

  1. 升级 Flutter 插件:确保所有插件兼容新环境

    bash
    flutter pub upgrade
  2. 验证环境配置

    bash
    flutter doctor
  3. 清理构建缓存:解决历史缓存问题

    bash
    flutter clean

重要提示

升级后首次构建可能需要较长时间,Gradle 会下载新版本依赖项。建议在稳定的网络环境下执行构建操作。

以上解决方案已广泛验证,能有效解决 Android Studio Ladybug 2024.2.1 中的 Flutter 构建失败问题。如遇特定库的兼容性问题,可尝试暂时降级库版本或参考库的 GitHub Issues 获取针对性方案。