Skip to main content

Android Java Gradle 迁移指南

摘要

#

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

Android Studio Flamingo 中的错误对话框:MultipleCompilationErrorsException

此错误的终端输出类似于以下内容:

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 应用。7.3 之前的 Gradle 版本 在使用 Java 17 时无法运行。

您可以通过使用以下方法之一将 Gradle 项目升级到兼容版本(包含 7.3 到 7.6.1)来修复此错误。

方案 1:使用 Android Studio 进行引导修复

#

按如下步骤升级 Android Studio Flamingo 中的 Gradle 版本:

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

    提示您升级 Gradle 的对话框

    更新到 Gradle 版本 7.3 到 7.6.1 之间的版本(包含 7.3 和 7.6.1)。

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

    升级 Gradle 的工作流程

方案 2:在命令行进行手动修复

#

从 Flutter 项目的顶部执行以下操作。

  1. 转到项目的 Android 目录。

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

    ./gradlew wrapper --gradle-version=7.6.1

注意

#

需要注意一些事项:

  • 对每个受影响的 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 可执行文件。 问题 122609 解决后,flutter doctor -v 命令会报告使用哪个版本的 Java。
  • 如果您将 Gradle 升级到_高于_ 7.6.1 的版本,您 可能 (虽然不太可能)会遇到由于 Gradle 的更改而导致的问题,例如已弃用的 Gradle 类 或 Android 文件结构的更改,例如将 ApplicationId 与 PackageName 分离。如果发生这种情况,请降级到 7.3 到 7.6.1 之间的 Gradle 版本(包含 7.3 和 7.6.1)。
  • 升级到 Flutter 3.10 不会解决此问题。