スポンサーリンク
AndroidStudio 上でプロジェクトテンプレートの「KMM Application」を動かそうとすると以下のようにコケる。
An exception occurred applying plugin request [id: 'com.android.application']
> 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 509ms
Command PhaseScriptExecution failed with a nonzero exit code
** BUILD FAILED **
The following build commands failed:
PhaseScriptExecution Run\ Script
/Users/maochanz/AndroidStudioProjects/KMM/build/ios/iosApp.build/Debug-iphoneos/iosApp.build/Script-7555FFB524251A00829871.sh (in target 'iosApp' from project 'iosApp')
(1 failure)
先程のビルドエラーのメッセージにもあるように、Java 11 (JDK) を IDEである AndroidStudio に認識させる方法として、3つが挙げられている。
- IDE設定の変更
- 環境変数 JAVA_HOME の変更
- gradle.properties の org.gradle.java.home の変更
この3つのうち、どれを変更すればいいのか。
IDE設定の変更
AndroidStudio には、以下でビルド時のJDKを選択できる。
[Preferences]
↓
[Build]
↓
[Build Tools]
↓
[Gradle JDK]
ここで、「Embedded JDK version 11.0.10」 を選択する。
現在の AndroidStudio には、「openjdk version "11.0.10" 2021-01-19」 が同梱されており、それを選択することもできるし、別に自分でインストールしているものも選択可能になっている。
ちなみに、JB Toolbox 利用している私のAndroidStudio 同梱のJDKホームのパスは
/Users/maochanz/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/203.7784292/Android Studio.app/Contents/jre/Contents/Home
であることがここで分かりますので直接叩いてみます。
➜ ~ /Users/maochanz/Library/"Application Support"/JetBrains/Toolbox/apps/AndroidStudio/ch-0/203.7784292/"Android Studio.app"/Contents/jre/Contents/Home/bin/java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)
OpenJDK 64-Bit Server VM (build 11.0.10+0-b96-7281165, mixed mode)
影響範囲: AndroidStudio 上のすべてのプロジェクト
環境変数 JAVA_HOME の変更
利用するユーザーの環境変数の JAVA_HOME に設定する。
先程、確認した同梱JDKのパスをセットします。
➜ ~ vi .zshrc
...
export JAVA_HOME="/Users/maochanz/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/203.7784292/Android Studio.app/Contents/jre/Contents/Home"
export PATH="$JAVA_HOME/bin:$PATH"
➜ ~ source .zshrc
➜ ~ echo $JAVA_HOME
/Users/maochanz/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/203.7784292/Android Studio.app/Contents/jre/Contents/Home
➜ ~ java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)
OpenJDK 64-Bit Server VM (build 11.0.10+0-b96-7281165, mixed mode)
この環境変数を利用して AndroidStudio は、JDK の位置を認識します。
しかし、ユーザー単位の環境変数なので、これを利用した他のアプリケーションにも影響するかもしれません。
AndroidStudio の再起動で反映されます。
影響範囲: OS上 JAVA_HOME 利用アプリケーションたち
gradle.properties の org.gradle.java.home の変更
gradle.properties は、AndroidStudio 上のプロジェクトの gradle 設定ファイルです。
以下のように追記します。
org.gradle.java.home=/Users/maochanz/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/203.7784292/Android Studio.app/Contents/jre/Contents/Home
パス文字列の中にスペースがありますが、エスケープやクォートなしのそのままでいけます。
AndroidStudio 上部メニューから [Build] → [Rebuild Project] で反映されます。
影響範囲: AndroidStudio上 該当プロジェクト
まとめ
結果的には、AndroidStudio 同梱の JDK11 を利用することで、「KMM Application」を動かすことはできる。
AndroidStudio の terminal で以下のように、gradlew が、AndroidStudio 同梱の 「JVM: 11.0.10 (JetBrains s.r.o. 11.0.10+0-b96-7281165)」と表示されるのは、環境変数 JAVA_HOME を設定する場合のみ。
➜ KMM ~ ./gradlew -version
------------------------------------------------------------
Gradle 7.3
------------------------------------------------------------
Build time: 2021-11-09 20:40:36 UTC
Revision: 96754b8c44399658178a768ac764d727c2addb37
Kotlin: 1.5.31
Groovy: 3.0.9
Ant: Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM: 11.0.10 (JetBrains s.r.o. 11.0.10+0-b96-7281165)
OS: Mac OS X 12.0.1 x86_64
ビルド自体は、JAVA_HOME の変更か、gradle.properties の変更、のどちらか一つで通り、生成されたアプリも問題ないようにみえる、が正しくはどうなのか。
Issue Tracker を見ていると、なんとなくまだあやしい。
とりあえずは以下で。
クォートうるさいわー。
👉 org.gradle.java.home - Issue Tracker
👉 JetBrains Toolbox で Android Studio の Stable/Beta/Canary が同時に管理できる?
👉 Android Studio と JDKバージョン