PC パソコン

Android Studio「Could not determine java version from ~」の原因と解決方法

Android Studioでプロジェクトをビルドした際に、次のようなエラーが表示されることがあります。

Could not determine java version from '~'.

このエラーは、Gradleが現在使用しているJavaのバージョンを正しく認識できない場合に発生します。

特に、古いGradleと新しいJavaを組み合わせている場合や、Android Studioで使用するJDKの設定が合っていない場合に発生しやすいエラーです。

「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のバージョンの組み合わせを確認することが重要です。