【Kotlin/Android Studio】kaptからkspへ移行する手順!
この記事からわかること
- Kotlin/Android Studioでkaptからkspに移行する方法
- kapt/kspとは?
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Narwhal Feature Drop
- Android OS:15以降
- Kotlin:2.0.21
- AGP:8.12.3
- Gradle:8.13
- ksp:2.2.21-2.0.4
- macOS(M1):Tahoe 26.0.1
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へ移行する(Groovy)
移行方法は簡単でkaptで定義していた箇所を入れ替えていくだけです。導入するkspのバージョンはKotlinのバージョンと同じになるように指定してください。バージョンはKSP GitHub Releasesで確認できます。バージョニングは2.2.21(Kotlinのバージョン)-2.0.4(kspのバージョン)になっています。
plugins {
id 'com.android.application' version '8.12.3' apply false
id 'com.android.library' version '8.12.3' apply false
// kotlinのバージョンも確認
id 'org.jetbrains.kotlin.jvm' version "2.2.21" apply false
id 'com.google.gms.google-services' version "4.4.4" apply false
// kspを追加
// リリースノート[https://github.com/google/ksp/releases]
id 'com.google.devtools.ksp' version '2.2.21-2.0.4' 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"
}
これで移行は完了です。意外と簡単なので早めに対応しておくことをお勧めします。
kaptからkspへ移行する(kts)
plugins {
// Kotlinの定義まで飛んでバージョンに合わせる
alias(libs.plugins.kotlin.android) apply false
// kspを追加
id("com.google.devtools.ksp") version "2.2.21-2.0.4" apply false
}
plugins {
// 追加
id("com.google.devtools.ksp")
}
// 〜〜〜〜〜〜〜〜〜〜〜
dependencies {
// KSP を使ったコンパイラ
ksp(libs.androidx.room.compiler)
}
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
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。






