Android StudioでRoomライブラリ+KSPを使う場合の依存関係(2024/12/27 最新版)
皆さん、こんにちは!又はこんばんは!初めての方は初めまして!
Androidのアプリ開発に関する記事を書いている「りおん」です。
今回の記事は、Roomライブラリ+KSPを使用する際に必要となる依存関係について書いた記事です。
2024年5月7日現在、下の公式サイトのみで依存関係を追加するだけでは不十分なことがあるため、公式サイト通りに依存関係を追加した際に対面したエラーとその解決法を順を追って説明します。
KSPを使う場合以外でも、同じエラー文が起きた場合にも参考にして頂けると幸いです。
2024年12月現在、依存関係が少し変わったので追加します。
※※※
2024年5月の時点では使用したAndroid StudioのバージョンはGiraffeです。依存関係は[Empty Activity]テンプレートに元々備えられているものから変更していません。
2024年12月の追加分のバージョンはAndroid Studio Ladybug | 2024.2.1 Patch 2です。依存関係は[Empty Activity]テンプレートに元々備えられているものから変更していません。
結論
まずは結論から話すと、2024年5月の時点では以下の依存関係で解決しました。
//最上位レベルの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")
}
ここからは追加で、2024年12月分は以下の依存関係で解決します
//最上位レベルのbuild.gradle.kts内
plugins {
...
id("com.google.devtools.ksp") version "2.0.0-1.0.22" apply false
id("androidx.room") version "2.6.1" apply false //スキーマをエキスポートする場合は必要
}
//モジュールレベルのbuild.gradle.kts内
plugins {
...
id("com.google.devtools.ksp")
id("androidx.room")//スキーマをエキスポートする場合は必要
}
android{
...
//スキーマをエキスポートする場合は必要
room {
schemaDirectory("$projectDir/schemas")
}
...
}
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")
}
気を付けてほしい点はkspを2024年12月時点で最新のid("com.google.devtools.ksp") version "2.1.0-1.0.29"を使用するとエラーが起きます。これはKotlinのバージョンがデフォルトで2.0.0となっており、kspの最新バージョンとは互換性が無いためです。
前提
下の公式サイトに示してある通りに進めていきます。
手順① 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"
}
}
この後、実行したところ無事動きました。