😂

Flutterのandroidビルドをするときに「Unknown Kotlin JVM target: 21」

に公開

書いてること

Macbookの再インストールを行なって、新たにFlutterの開発環境を再構築してるときに、表題のエラーが発生。
androidのビルドをするときに「Unknown Kotlin JVM target: 21」のエラーが発生。

概要

Flutterのandroidをビルドするときに以下のエラーが発生

You are applying Flutter's app_plugin_loader Gradle plugin imperatively using the apply script method, which is deprecated and will be removed in a future release. Migrate to applying Gradle plugins with the declarative plugins block: https://flutter.dev/to/flutter-gradle-plugin-apply

You are applying Flutter's main Gradle plugin imperatively using the apply script method, which is deprecated and will be removed in a future release. Migrate to applying Gradle plugins with the declarative plugins block: https://flutter.dev/to/flutter-gradle-plugin-apply


FAILURE: Build failed with an exception.

* What went wrong:
Could not determine the dependencies of task ':photo_manager:compileReleaseKotlin'.
> Unknown Kotlin JVM target: 21

* 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 1s
Running Gradle task 'assembleRelease'...                         2,107ms
Gradle task assembleRelease failed with exit code 1

原因

MacにプリインストールされてるJavaのバージョンが21であるので、そちらにphoto_managerのkotlinのバージョンが一致してません。
特定のパッケージではJava17じゃないと動かないライブラリがあるようです。

対策

JDK17のインストール

homebrewでJava17をインストールして、そちらのJAVA_HOMEを.zshrcに追加して動くようにします。

まずはbrewでJava17をインストール

brew install openjdk@17

Javaのインストール完了後、システム全体でJDKを有効にするためにシステム環境にJDK17を登録

sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk

.zshrc に以下のエクスポートを追加してください

export JAVA_HOME=/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home
export PATH="$JAVA_HOME/bin:$PATH"
export CPPFLAGS="-I/opt/homebrew/opt/openjdk@17/include"

設定を反映します。

source ~/.zshrc

Javaのバージョンを確認します。

java -version

期待される出力例

openjdk version "17.0.3" 2023-04-20
OpenJDK Runtime Environment (build 17.0.3+7)
OpenJDK 64-Bit Server VM (build 17.0.3+7, mixed mode)

Flutterに使ってるJDKを認識させます

flutter config --jdk-dir="/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home"

使ってるIDEを再起動。これでflutter doctor -vをして下記の表示になればOK

[✓] Flutter (Channel stable, 3.27.1, on macOS 14.6.1 23G93 darwin-arm64, locale ja-JP)
    • Flutter version 3.27.1 on channel stable at /Users/user_name/fvm/versions/stable
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 17025dd882 (3 weeks ago), 2024-12-17 03:23:09 +0900
    • Engine revision cb4b5fff73
    • Dart version 3.6.0
    • DevTools version 2.40.2

[✓] Android toolchain - develop for Android devices (Android SDK version 35.0.0)
    • Android SDK at /Users/user_name/Library/Android/sdk
    • Platform android-35, build-tools 35.0.0
    • Java binary at: /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment Homebrew (build 17.0.13+0)
    • All Android licenses accepted.

gradle-wrapper.propertiesにGradleのバージョンを追記

android\gradle\wrapper\gradle-wrapper.propertiesを開きます。そして下記を追記してください。

distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip

ビルドして動くか確認

flutter clean
flutter pub get
flutter run

参考サイト

https://stackoverflow.com/questions/79272246/error-unknown-kotlin-jvm-target-21-in-flutter-app-on-android

https://flutter.salon/error_warning/change-java-home/

Discussion