概述

#

如果您最近将 Android Studio 升级到 Flamingo 版本,并且运行或构建了现有 Android 应用,您可能会遇到以下类似错误

sh
Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:

此错误的终端输出如下所示

sh
FAILURE: Build failed with an exception.

* Where:
Build file '…/example/android/build.gradle'
* What went wrong:
Could not compile build file '…/example/android/build.gradle'.
> startup failed:
  General error during conversion: Unsupported class file major version 61

  java.lang.IllegalArgumentException: Unsupported class file major version 61
  	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:189)
  	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:170)
  	[…

209 more lines of Groovy and Gradle stack trace …

  	 …]
  	at java.base/java.lang.Thread.run(Thread.java:833)

此错误发生是因为 Android Studio Flamingo 将其捆绑的 Java SDK 从 11 更新到 17。Flutter 使用 Android Studio 捆绑的 Java 版本来构建 Android 应用。Gradle 7.3 之前的版本在使用 Java 17 时无法运行。

您可以通过以下任一方法将您的 Gradle 项目升级到兼容版本(7.3 到 7.6.1,包括两端)来修复此错误。

解决方案 #1:使用 Android Studio 引导修复

#

在 Android Studio Flamingo 中按以下步骤升级 Gradle 版本

  1. 在 Android Studio 中,打开 android 文件夹。这将显示以下对话框

    Dialog prompting you to upgrade Gradle

    更新到 Gradle 7.3 到 7.6.1 之间的版本(包括两端)。

  2. 按照引导工作流程更新 Gradle。

    Workflow to upgrade Gradle

解决方案 #2:在命令行手动修复

#

在您的 Flutter 项目的根目录执行以下操作。

  1. 进入您项目的 Android 目录。

    cd android
  2. 将 Gradle 更新到首选版本。选择 7.3 到 7.6.1 之间的版本(包括两端)。

    ./gradlew wrapper --gradle-version=7.6.1

您未更新 Android Studio 且仍然存在 Java 错误

#

错误类似于 Unsupported class file major version 65。这表明您的 Java 版本比您正在运行的 Gradle 版本所能处理的要新。AGP、Java 和 Gradle 之间存在一组不明显的依赖关系。

解决方案 1:Android Studio

#

解决此问题最简单的方法是使用 Android Studio AGP 升级助手。在 Android Studio 中选择您的顶级 build.gradle 文件,然后选择 Tools -> AGP Upgrade Assistant。

解决方案 2:命令行

#

运行 flutter analyze --suggestions 查看您的 AGP、Java 和 Gradle 版本是否兼容。如果 Gradle 需要更新,您可以使用 ./gradlew wrapper --gradle-version=SOMEGRADLEVERSION 进行更新,其中 SOMEGRADLEVERSION 是 flutter analyze 建议的版本(您可以使用较新的版本)。

要查找正在使用的 Java 版本,请运行 flutter doctor。在 Mac 上,您可以使用 /usr/libexec/java_home -V 找到操作系统知道的 Java 版本。要设置所有 Flutter 项目使用的 Java 版本,请运行 flutter config --jdk-dir=SOMEJAVAPATH,其中 SOMEJAVAPATH 是 Java 版本的路径,例如 /opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home

注意事项

#

需要注意的几点

  • 为每个受影响的 Android 应用重复此步骤。
  • 此问题可能会影响那些没有通过 Android Studio 下载 Java 和 Android SDK 的用户。如果您已手动将 Java SDK 升级到版本 17 但尚未升级 Gradle,您也可能会遇到此问题。修复方法相同:将 Gradle 升级到 7.3 到 7.6.1 之间的版本。
  • 您的开发机器可能包含多个 Java SDK 副本
    • Android Studio 应用包含一个 Java 版本,Flutter 默认使用该版本。
    • 如果您未安装 Android Studio,Flutter 依赖于您的 shell 脚本的 JAVA_HOME 环境变量定义的版本。
    • 如果未定义 JAVA_HOME,Flutter 会在您的路径中查找任何 java 可执行文件。flutter doctor -v 命令会报告正在使用的 Java 版本。
  • 如果您将 Gradle 升级到比 7.6.1 更新的版本,您可能会(尽管不太可能)遇到因 Gradle 更改而导致的问题,例如已弃用的 Gradle 类,或 Android 文件结构的更改,例如将 ApplicationId 从 PackageName 中分离。如果发生这种情况,请降级到 Gradle 7.3 到 7.6.1 之间的版本(包括两端)。
  • 升级到 Flutter 3.10 不会解决此问题。