Android Studioでプロジェクトをビルドした際に、次のようなエラーが表示されることがあります。
Could not determine java version from '~'.
このエラーは、Gradleが現在使用しているJavaのバージョンを正しく認識できない場合に発生します。
特に、古いGradleと新しいJavaを組み合わせている場合や、Android Studioで使用するJDKの設定が合っていない場合に発生しやすいエラーです。
- 「Could not determine java version from ~」とは
- 原因1:Gradleが古すぎる
- 原因2:Javaのバージョンが新しすぎる
- 原因3:Android StudioのGradle JDK設定が合っていない
- 原因4:JAVA_HOMEが間違っている
- MacでJAVA_HOMEを確認する方法
- 原因5:Gradle Wrapperを使用していない
- Gradleのバージョンを確認する
- 原因6:Android Gradle Pluginが古い
- 原因7:古いプロジェクトを新しいAndroid Studioで開いた
- 解決方法1:Gradleを更新する
- 解決方法2:JDKを変更する
- 解決方法3:GradleとAndroid Gradle Pluginをまとめて更新する
- Gradle Syncを実行する
- Clean Projectを実行する
- Gradle Daemonを停止する
- よくある修正手順
- どのJavaが使われているか分からない場合
- まとめ
「Could not determine java version from ~」とは
Gradleは、Androidアプリをビルドする際にJava環境を使用します。
しかし、使用しているGradleが新しいJavaバージョンに対応していない場合、Javaのバージョン文字列を正しく解析できず、次のようなエラーになります。
Could not determine java version from '17.0.10'.
または、Java 11やJava 21などで同様のエラーが表示されることがあります。
このエラーは、アプリのJavaコードそのものが間違っているという意味ではありません。
GradleとJavaのバージョンの組み合わせや、JDKの設定に問題がある場合に発生します。
原因1:Gradleが古すぎる
最も多い原因は、プロジェクトで使用しているGradleのバージョンが古く、現在のJavaバージョンに対応していないことです。
例えば、古いAndroid Studioプロジェクトで非常に古いGradleを使用している状態で、Java 17を使用するとエラーになる場合があります。
Could not determine java version from '17.0.8'.
この場合は、Gradle Wrapperのバージョンを更新します。
プロジェクト内の次のファイルを確認します。
gradle/wrapper/gradle-wrapper.properties
例えば、次のような記述があります。
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
使用しているAndroid Gradle PluginやAndroid Studioに対応したGradleバージョンへ変更します。
Gradleだけを無条件に最新バージョンへ変更すると、Android Gradle Pluginとの互換性問題が発生することがあります。
GradleとAndroid Gradle Pluginは、対応している組み合わせで更新してください。
原因2:Javaのバージョンが新しすぎる
古いプロジェクトでは、Gradleを更新するよりも、一時的に古いJDKへ変更した方が簡単に解決できる場合があります。
例えば、古いGradleがJava 17に対応していない場合、Java 11やJava 8へ変更するとビルドできることがあります。
現在のJavaバージョンは、ターミナルで次のコマンドを実行すると確認できます。
java -version
例えば次のように表示されます。
openjdk version "17.0.10"
このJavaバージョンをプロジェクトで使用しているGradleがサポートしているか確認してください。
原因3:Android StudioのGradle JDK設定が合っていない
Android Studioでは、Gradleを実行するときに使用するJDKを指定できます。
次の設定を確認します。
Settings → Build, Execution, Deployment → Build Tools → Gradle → Gradle JDK
Macの場合は、Android Studioの設定画面から同様にGradle JDKを確認します。
プロジェクトに適したJDKを選択してください。
Android Studioに内蔵されているEmbedded JDKやjbrを使用すると、JDKの設定が簡単になる場合があります。
原因4:JAVA_HOMEが間違っている
ターミナルからGradleを実行している場合は、環境変数JAVA_HOMEが別のJavaを指している可能性があります。
現在の設定を確認します。
echo $JAVA_HOME
さらに、実際に使用されているJavaを確認します。
which java
Javaのバージョンも確認します。
java -version
Android StudioではJava 17を使用しているのに、ターミナルではJava 8を使用している、といった状態になることがあります。
この場合、Android Studioからのビルドとターミナルからのビルドで結果が異なる可能性があります。
MacでJAVA_HOMEを確認する方法
Macでは、インストールされているJavaを次のコマンドで確認できます。
/usr/libexec/java_home -V
例えばJava 17を使用する場合は、次のように設定できます。
export JAVA_HOME=$(/usr/libexec/java_home -v 17)
Java 11を使用する場合は次のようになります。
export JAVA_HOME=$(/usr/libexec/java_home -v 11)
設定後、Javaバージョンを確認します。
java -version
原因5:Gradle Wrapperを使用していない
システムにインストールされているGradleを直接使用すると、プロジェクトが想定しているGradleバージョンと異なる場合があります。
Androidプロジェクトでは、基本的にGradle Wrapperを使用します。
MacやLinuxでは次のように実行します。
./gradlew build
次のようにシステムGradleを直接実行すると、別のバージョンが使用される場合があります。
gradle build
プロジェクトごとに適切なGradleバージョンを使用するため、通常は./gradlewを使用する方が安全です。
Gradleのバージョンを確認する
現在のGradleバージョンを確認するには、プロジェクトのターミナルで次のコマンドを実行します。
./gradlew --version
正常に実行できる場合は、Gradleや使用中のJVM情報が表示されます。
例えば、次のような情報を確認できます。
Gradle 8.x JVM: 17.x OS: Mac OS X
もしこのコマンド自体でCould not determine java version fromが表示される場合は、GradleとJavaの互換性を最初に確認してください。
原因6:Android Gradle Pluginが古い
Gradleだけでなく、Android Gradle Pluginが非常に古い場合も、新しいJDK環境へ移行する際に問題が発生することがあります。
古いプロジェクトでは、ルートのbuild.gradleに次のような記述があります。
dependencies { classpath 'com.android.tools.build:gradle:3.5.4' }
このような古いAndroid Gradle Pluginを使用している場合は、Gradleとあわせてアップデートを検討します。
Android Gradle Plugin、Gradle、JDKはそれぞれ互換性があります。
どれか1つだけ大きく更新すると、別のビルドエラーが発生することがあります。
原因7:古いプロジェクトを新しいAndroid Studioで開いた
数年前に作成したAndroid Studioプロジェクトを新しいAndroid Studioで開いた場合、このエラーが発生することがあります。
新しいAndroid Studioでは新しいJDKが使用される一方、プロジェクト側は古いGradleを使用しているためです。
例えば、次のような組み合わせです。
Android Studio:新しいバージョン JDK:17 Gradle:非常に古いバージョン Android Gradle Plugin:古いバージョン
この場合、GradleがJava 17を認識できず、エラーになることがあります。
解決方法1:Gradleを更新する
プロジェクトを今後も使用する場合は、Gradleを対応バージョンへ更新する方法があります。
gradle-wrapper.propertiesを開きます。
gradle/wrapper/gradle-wrapper.properties
そしてdistributionUrlを確認します。
distributionUrl=https\://services.gradle.org/distributions/gradle-x.x-bin.zip
Android Gradle Pluginに対応するGradleへ変更します。
解決方法2:JDKを変更する
古いプロジェクトをすぐにビルドしたい場合は、Gradleを更新せず、対応する古いJDKへ変更する方法もあります。
Android StudioのGradle JDKを変更します。
Settings → Build, Execution, Deployment → Build Tools → Gradle → Gradle JDK
例えば、Java 17でエラーになる古いプロジェクトでは、Java 11やJava 8に変更することで動作する場合があります。
これは一時的な解決方法として有効ですが、長期的に使用するプロジェクトではGradleやAndroid Gradle Pluginの更新も検討してください。
解決方法3:GradleとAndroid Gradle Pluginをまとめて更新する
古いAndroidプロジェクトを新しい環境へ移行する場合は、GradleとAndroid Gradle Pluginをセットで更新します。
一方だけを変更すると、次のような別のエラーが発生する可能性があります。
Minimum supported Gradle version is ~
または、次のような互換性エラーが表示されることがあります。
Unsupported Gradle version
Android Studioが提示するUpgrade Assistantを利用できる場合は、それを利用する方法もあります。
Gradle Syncを実行する
GradleやJDKの設定を変更したら、Gradle Syncを実行します。
File → Sync Project with Gradle Files
その後、再度ビルドしてください。
Build → Rebuild Project
Clean Projectを実行する
設定を修正しても古いビルド情報が残っている場合があります。
Android Studioから次を実行します。
Build → Clean Project Build → Rebuild Project
またはターミナルで次のコマンドを実行します。
./gradlew clean
Gradle Daemonを停止する
JDKを変更したあとも以前のJava環境をGradle Daemonが使用している場合があります。
その場合は、次のコマンドでGradle Daemonを停止します。
./gradlew --stop
その後、再度Gradleを実行します。
./gradlew build
JDKを切り替えた直後にビルド結果が変わらない場合は、Gradle Daemonを停止してから再実行すると解決することがあります。
よくある修正手順
古いAndroid Studioプロジェクトを新しいAndroid Studioで開き、次のエラーが出た場合:
Could not determine java version from '17.0.10'.
まず次の順番で確認します。
1. java -version を確認する 2. Gradleのバージョンを確認する 3. Android StudioのGradle JDKを確認する 4. GradleがJava 17に対応しているか確認する 5. 必要ならGradleを更新する 6. または対応する古いJDKへ変更する
どのJavaが使われているか分からない場合
次のコマンドを順番に確認すると、Java環境を把握しやすくなります。
java -version
echo $JAVA_HOME
./gradlew --version
Macの場合は、さらに次のコマンドも利用できます。
/usr/libexec/java_home -V
これらを比較すると、Android Studio、ターミナル、Gradleで異なるJavaが使用されていないか確認できます。
まとめ
Android StudioのCould not determine java version from ~は、Gradleが使用中のJavaバージョンを正しく認識できない場合に発生するエラーです。
特に多い原因は、古いGradleと新しいJDKを組み合わせていることです。
まずjava -versionとGradleのバージョンを確認し、Android StudioのGradle JDK設定も確認してください。
古いプロジェクトであれば、GradleとAndroid Gradle Pluginを対応するバージョンへ更新するか、一時的に対応する古いJDKへ切り替えることで解決できる場合があります。
このエラーでは、Javaコードの修正よりも、Gradle・Android Gradle Plugin・JDKのバージョンの組み合わせを確認することが重要です。
