見出し画像

Android StudioでRoomライブラリ+KSPを使う場合の依存関係

皆さん、こんにちは!又はこんばんは!初めての方は初めまして!
Androidのアプリ開発に関する記事を書いている「りおん」です。

今回の記事は、Roomライブラリ+KSPを使用する際に必要となる依存関係について書いた記事です。

2024年5月7日現在、下の公式サイトのみで依存関係を追加するだけでは不十分なことがあるため、公式サイト通りに依存関係を追加した際に対面したエラーとその解決法を順を追って説明します。

KSPを使う場合以外で、同じエラー文が起きた場合にも参考にして頂けると幸いです。

※使用したAndroid StudioのバージョンはGiraffeです。依存関係は[Empty Activity]テンプレートに元々備えられているものから変更していません。


結論

まずは結論から話すと、以下の依存関係で解決しました。

//最上位レベルのbuild.gradle.kts内
plugins {
    ...
    id("org.jetbrains.kotlin.android") version "1.9.10" apply false
    id("com.google.devtools.ksp") version "1.9.10-1.0.13" apply false
}
//モジュールレベルのbuild.gradle.kts内
plugins {
    ...
    id("com.google.devtools.ksp")
}

android{
  ...
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
  ...
    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.3"
    }
  ...
}

dependencies {
  ...
    val room_version = "2.6.1"
    implementation("androidx.room:room-runtime:$room_version")
    implementation("androidx.room:room-ktx:$room_version")
    ksp("androidx.room:room-compiler:$room_version")
}

前提

下の公式サイトに示してある通りに進めていきます。

手順① Roomライブラリに関する依存関係を追加

モジュールレベルのbuild.gradle.kts内に以下の依存関係を追加します。
この際は[sync now]を押してもエラーは起きません。

dependencies {
  val room_version = "2.6.1"
    implementation("androidx.room:room-runtime:$room_version")
    implementation("androidx.room:room-ktx:$room_version")
...
}

手順② KSPの依存関係を追加

モジュールレベルのbuild.gradle.kts内に以下の依存関係を追加します。
この後に[sync now]を押すとエラーが起きます。

ksp("androidx.room:room-compiler:$room_version")

エラー1:Unresolved reference: ksp

このエラーの原因はKSPプラグインを追加していないことにあります。

手順③ KSPプラグインの追加

エラー1を解決するため、最上位レベルのbuild.gradle.kts内に以下のコードを追加します。

//最上位レベルのbuild.gradle.kts内
plugins {
    id("com.google.devtools.ksp") version "1.8.10-1.0.9" apply false
}

参考

この後[sync now]を押してもエラーは出ません。
しかし、[実行]を押すとエラーが出ます。

エラー2:'compileDebugJavaWithJavac' task (current target is 1.8) and 'kspDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version.

このエラーはJavaのバージョンが不一致を起こしているため発生します。

手順④ プロジェクトのjavaバージョンを17にする

エラー2を解決するため、モジュールレベルのbild.gradele.ktsを以下のように変更し、プロジェクトのjavaバージョンを17にします。

コメントアウトしているものが変更前のコード

この後[sync now]を押してもエラーは出ません。
しかし、[実行]を押すとエラーが出ます。

エラー3:java.lang.NoSuchMethodError: 'kotlin.sequences.Sequence com.google.devtools.ksp.processing.Resolver.getPackagesWithAnnotation(java.lang.String)'

この問題について調べたところ、KotlinのバージョンとKSPのバージョンを最新のものにすれば解決するということがわかりました。

手順⑤ KotlinのバージョンとKSPのバージョンを最新のものにする

エラー3を解決するため、最上位レベルのbuild.gradle.kts内を以下のように変更します。

//最上位レベルのbuild.gradle.kts内
plugins {
    //id("com.google.devtools.ksp") version "1.8.10-1.0.9" apply false
    id("org.jetbrains.kotlin.android") version "1.9.10" apply false
    id("com.google.devtools.ksp") version "1.9.10-1.0.13" apply false
}

この後[sync now]を押してもエラーは出ません。
しかし、[実行]を押すとエラーが出ます。

エラー4:Caused by: org.jetbrains.kotlin.gradle.tasks.CompilationErrorException: Compilation error. See log for more details

このエラーは以下のサイトからわかるように、手順⑤で使用したKotlinのバージョンと互換性のないComposeのバージョンを使用したことが原因です。

手順⑥ Composeのバージョンを変更する

エラー4を解決するため、上記のサイトを基に、モジュールレベルのbuild.gradle.ktsを変更します。

android{
...
    composeOptions {
        //kotlinCompilerExtensionVersion = "1.4.2"
       kotlinCompilerExtensionVersion = "1.5.3" 
    }
}

この後、実行したところ無事動きました。

この記事が気に入ったらサポートをしてみませんか?