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

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

この記事からわかること

  • Kotlin/Android Studiokaptからksp移行する方法
  • kapt/kspとは?

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

kapt(Kotlin Annotation Processing Tool)とは?

公式リファレンス:

Kapt(Kotlin Annotation Processing Tool)」とはJavaのアノテーションプロセッサをKotlinでも使えるようにするためのツールです。DaggerGlide、RoomMoshiなどの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という別のツールへの移行が公式から推奨されています。

公式リファレンス:kapt から KSP に移行する

ksp(Kotlin Symbol Processing)とは?

公式リファレンス:ksp(Kotlin Symbol Processing)

ksp(Kotlin Symbol Processing)」はkaptに変わるJavaのアノテーションプロセッサをKotlinでも使えるようにするためのツールです。Kotlin用に設計されているのでkaptよりも高速に動作します。

DaggerGlide、RoomMoshiなど主流のライブラリはすでに移行が完了しているので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

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article