【Kotlin/Android Studio】kaptからkspへ移行する手順!

この記事からわかること
- Kotlin/Android Studioでkaptからkspに移行する方法
- kapt/kspとは?
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Meerkat
- Kotlin:2.0.21
- AGP:8.9.2
- Gradle:8.11.1
- Mac M1:Sequoia 15.4
kapt(Kotlin Annotation Processing Tool)とは?
「Kapt(Kotlin Annotation Processing Tool)」とはJavaのアノテーションプロセッサをKotlinでも使えるようにするためのツールです。Dagger
やGlide、
Room
、Moshi
などのJavaライブラリではJava時代のPluggable Annotation Processing APIという機能を使用しています。Kotlinで開発するアプリからこれらのライブラリを使用する場合に、アノテーションが正しく使用できるようにするためのツールとしてkaptが使用されていました。
プロジェクトにはid 'kotlin-kapt'
やkapt "androidx.room:room-compiler:$room_version"
と記述して有効にしていたと思います。
plugins {
// 〜〜〜〜〜〜〜
id 'kotlin-kapt'
}
android {
// 〜〜〜〜〜〜〜
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
}
}
}
dependencies {
// 〜〜〜〜〜〜〜
def room_version = "2.5.0"
implementation "androidx.room:room-runtime:$room_version"
implementation "androidx.room:room-ktx:$room_version"
kapt "androidx.room:room-compiler:$room_version"
}
そんなkaptですがメンテナンスモードになってしまったためkspという別のツールへの移行が公式から推奨されています。
ksp(Kotlin Symbol Processing)とは?
公式リファレンス:ksp(Kotlin Symbol Processing)
「ksp(Kotlin Symbol Processing)」はkaptに変わるJavaのアノテーションプロセッサをKotlinでも使えるようにするためのツールです。Kotlin用に設計されているのでkaptよりも高速に動作します。
Dagger
やGlide、
Room
、Moshi
など主流のライブラリはすでに移行が完了しているのでkspに移行しても問題なく動作することが確認できています。
kaptからkspへ移行する
移行方法は簡単でkaptで定義していた箇所を入れ替えていくだけです。
plugins {
id 'com.android.application' version '8.9.2' apply false
id 'com.android.library' version '8.9.2' apply false
// Kotlinのバージョンも確認
id("org.jetbrains.kotlin.jvm") version "2.0.21" apply false
id("com.google.gms.google-services") version "4.4.0" apply false
// 追加
id 'com.google.devtools.ksp' version '2.0.21-1.0.27' apply false
}
plugins {
// id 'kotlin-kapt'
// 追加
id 'com.google.devtools.ksp'
}
dependencies {
kapt "androidx.room:room-compiler:$room_version"
// kapt "androidx.room:room-compiler:$room_version"
// 追加
ksp "androidx.room:room-compiler:$room_version"
}
これで移行は完了です。意外と簡単なので早めに対応しておくことをお勧めします。
superclass access check failed: class org.jetbrains.kotlin.kapt3.base.javac.KaptJavaCompiler
kaptのまま使用していた際に以下のようなエラーが発生したことがありました。このエラーもkspへ移行したところ発生しなくなったので関係していたのかもしれません。
superclass access check failed: class org.jetbrains.kotlin.kapt3.base.javac.KaptJavaCompiler (in unnamed module @0x3d6c5d4b) cannot access class com.sun.tools.javac.main.JavaCompiler (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.main to unnamed module @0x3d6c5d4b
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。