Skip to content

Kotlin JVM target 21 エラーの修正方法

問題の説明

Android StudioをIguanaからLadyBugにアップグレードした後、プロジェクトのコンパイルが失敗し「Unknown Kotlin JVM target: 21」エラーが発生する問題です。具体的なエラーメッセージは以下の通りです:

Execution failed for task ':app:kaptGenerateStubsDebugKotlin'.
> Error while evaluating property 'compilerOptions.jvmTarget' of task ':app:kaptGenerateStubsDebugKotlin'.
   > Failed to calculate the value of property 'jvmTarget'.
      > Unknown Kotlin JVM target: 21

この問題は以下のような状況で発生します:

  • JDKの再インストールや設定変更を試みても解決しない
  • jvmTarget = "1.8" と設定しているにも関わらずエラーが発生
  • Android Studioのアップグレード後に突然発生
  • kapt(Kotlin Annotation Processing Tool)タスクの実行中にエラーが発生

根本的な原因は、Android Studio LadyBugがデフォルトでJDK 21を使用するようになりますが、Kotlinが正式にJDK 21をサポートしていないことにあります。

KotlinのJVMターゲットサポート状況(2024年10月現在)

  • 1.8: Java 8互換(サポート対象)
  • 11: Java 11互換(サポート対象)
  • 17: Java 17互換(サポート対象)
  • 21: Java 21互換(非サポート)

解決方法

方法1: JDKを17にダウングレード(推奨)

Android Studioの設定で使用するJDKバージョンを変更します:

  1. Android Studioを開く
  2. Preferences > Build, Execution, Deployment > Build Tools > Gradle に移動
  3. Gradle JDK セクションを見つける
  4. ドロップダウンから Download JDK を選択
  5. バージョン 17 のJDKをダウンロードして選択

Gradle JDK設定画面

JDKダウンロード画面

方法2: build.gradle ファイルの修正

app/build.gradle ファイルに以下の設定を追加します:

kotlin
android {
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17" // "17" を指定("1.8"でも可)
    }
}

この設定により、KotlinコンパイラがJava 17互換のバイトコードを生成するようになります。

注意

プロジェクト内のすべてのモジュール(サブプロジェクト、ライブラリモジュールを含む)に同じ設定を適用する必要があります。適用漏れがあるとエラーが解消しない可能性があります。

方法3: kaptタスク固有の設定(高度なケース)

プロジェクトでKotlinのアノテーションプロセッシング(kapt)を使用している場合、特定のタスクに対してのみJVMターゲットを指定できます:

kotlin
// build.gradle.kts (Kotlin DSL)
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile> {
    compilerOptions {
        jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17)
    }
}
groovy
// build.gradle (Groovy)
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile) {
    compilerOptions {
        jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
    }
}

補足事項

Flutterプロジェクトの場合

Flutterプロジェクトでこのエラーが発生した場合、android/app/build.gradle に以下を追加します:

kotlin
android {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

依存関係の更新

以下の依存関係を最新版に更新すると問題が解決する場合があります:

kotlin
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.20")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.21")

回避策と非推奨な方法

一時的な回避策として以下が可能ですが、恒久的な解決策としては推奨されません:

  • Android Studioを以前のバージョン(Koalaなど)にダウングレード
  • JDK 21のまま強制的に動作させる(不安定化のリスクあり)

重要

JDK 21を無理に使用しようとしないでください。Kotlinが正式にサポートするバージョン以外を使用すると、予期しない動作やコンパイルエラーを引き起こす可能性があります。公式サポート対象のJDK(1.8、11、17)を使用することが安定した開発の鍵です。

すべての修正を適用した後、Android Studioを再起動し、Gradleプロジェクトの同期を行うことを忘れずに行ってください。これにより設定変更が反映され、エラーが解決されるはずです。