😂
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
参考サイト
Discussion