💡

【Flutter】Android Gradle plugin requires Java 11 to run. の対処法

2022/05/30に公開

今回はタイトルのエラーが起きた時の対処方法について自分用も兼ねて書いていきたいと思います。

最近Flutterでアプリを作っていますが、実はAndroidで実行することができていませんでした。そこを直すことができたので纏めておきたいと思います。

環境
MacBook Air (M1, 2020)

エラーの詳細は以下の通りです。Java 11が必要だけどあなたが使ってるのは1.8ですよと言っています。
さらに直し方も3種類書いてくれています。今回はこの中でもJAVA_HOMEを設定する方法を使いました。

Launching lib/main.dart on sdk gphone64 arm64 in debug mode...
FAILURE: Build failed with an exception.
* Where:
Build file '/Users/AN/Development/test_many_platform/android/app/build.gradle' line: 24
* What went wrong:
A problem occurred evaluating project ':app'.
> Failed to apply plugin 'com.android.internal.application'.
   > Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
     You can try some of the following options:
       - changing the IDE settings.
       - changing the JAVA_HOME environment variable.
       - changing `org.gradle.java.home` in `gradle.properties`.
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 8s
┌─ Flutter Fix ─────────────────────────────────────────────────────────────────┐
│ [!] You need Java 11 or higher to build your app with this version of Gradle. │
│                                                                               │
│ To get Java 11, update to the latest version of Android Studio on             │
│ https://developer.android.com/studio/install.                                 │
│                                                                               │
│ To check the Java version used by Flutter, run `flutter doctor -v`.           │
└───────────────────────────────────────────────────────────────────────────────┘
Exception: Gradle task assembleDebug failed with exit code 1
Exited

参考にしたページ

Gradleのインストールでパスの設定にコケた原因はこれだった
【JAVA】JAVA_HOMEがないって言われたのでPATH通した

Flutterを入れた際にAndroid studioを入れているかと思います。その中にJava 11が入っています。方針としてはそこのPathを通すことでvscodeで実行した時にjava 11を使ってくれるようにする感じです。

やり方

まず本当にjava 11があるか確認します。

ユーザー名@PC名 ~ % /Applications/Android\ Studio.app/Contents/jre/Contents/Home/bin/java -version

このコマンド(%より後の部分)を打つと以下の様にJavaのバージョンが返ってきます。コマンドを打つときは適度にtabで補完しながら打つと本当にそのフォルダがあるか確認しながら進めることができます。

openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
OpenJDK 64-Bit Server VM (build 11.0.12+0-b1504.28-7817840, mixed mode)

実際にJava 11があることが確認できたのでpathを通していきます。

ユーザー名@PC名 ~ % vi .zshrc

viで開いた.zshrcの中に以下の2行を追加します。

export JAVA_HOME="/Applications/Android Studio.app/Contents/jre/Contents/Home
export PATH="$PATH:$JAVA_HOME/bin"

.zshrcはターミナルを起動したときに読み込まれるファイルなのでターミナルを再起動するか、

ユーザー名@PC名 ~ % source .zshrc

と打ってください。

すると「echo $JAVA_HOME」で確認するとうまくパスが登録されていることが確認できます。

この状態でvscodeを再起動しflutterのmainなどを実行すると先ほどのエラーが消えると思います。

ポイント

JAVA_HOMEはjavaが入っているところのHomeまででその下のbinは含めない。
パスの中のエスケープシーケエンス”\”は消す。
ポイントの1つ目は他の記事にもありましたが、ポイントの2つ目のエスケープシーケンスを消す方は気づかない方もいるのではないかと思い今回の記事を書きました。つまり以下のように書いてはいけません。

#ダメな例                               vここがだめ
export JAVA_HOME="/Applications/Android\ Studio.app/Contents/jre/Contents/Home

あとは

ls $JAVA_HOME

などと打ったときにちゃんと$JAVA_HOMEの下のフォルダが表示されていれば大丈夫です(パスが間違っていると、見つからないみたいなことを言われます)。

またHomeまでしか書かないのはプログラム内でJAVACMD=”$JAVA_HOME/bin/java”の様に書かれているからです(詳細はandroidフォルダの下のgradlewやgradley.batを見るといいと思います)。

当たり前のこと過ぎるのか、あまりこのエラーについて直接書かれた記事を見つけられずに困ったので今後のため書いてみました。

Discussion