跳至主要內容

Android Java Gradle 遷移指南

摘要

#

如果您最近將 Android Studio 更新到 Flamingo 版本,並且執行或建置了現有的 Android 應用程式,您可能會遇到類似以下的錯誤

Error dialog in 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 應用程式。 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

    更新到 7.3 到 7.6.1 之間的 Gradle 版本,包含兩者。

  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 應用程式重複此步驟。
  • 那些透過 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 版本,包含兩者。
  • 升級到 Flutter 3.10 無法解決此問題。