1
0

More than 1 year has passed since last update.

Room/Hiltのkaptをkspにしてみる

Posted at

この記事の内容

GradleのAnnotationProcesserを、kaptからkspにするお話です。

そもそもAnnotationProcesserって何?

「AnnotationProcesser」は、コンパイルの時にコードを自動生成しましょうという機能です。
これはjavaの機能で、ソースに埋め込まれているアノテーションに基づいてコードを自動生成します。

このAnnotateionProcesserをkotlinで書かれたソースでもできるようにしたのが、「kapt(kotlin annotation processer tools)」です。
で、kaptを高速化させたのが、「KSP(kotlin symbol processing)」になります。

細かい話は、公式ページにお任せしますが、kaptでは、kotlinからjavaのコードに変換することで、Java AnnotaionProcesserが理解できるようにしてから、コードの自動生成を行っていました。
kspは、kotlinから直接コードを自動生成する(javaで中間コードを生成しない)ので早い!らしいです。(ちゃんとはかってませんが、体感できるレベルで早いです)

RoomとHiltをKSPに移行する

gradle

build.gradle

build.gradle
plugins {
    id 'com.android.application' version '8.1.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.8.10' apply false
    id 'org.jetbrains.kotlin.plugin.serialization' version '1.8.10' apply false
    id 'com.google.dagger.hilt.android' version '2.47' apply false
+   id 'com.google.devtools.ksp' version '1.8.10-1.0.9' apply false
}

app/build.gradle

app/build.gradle
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'org.jetbrains.kotlin.plugin.serialization'
-   id 'kotlin-kapt'
+   id 'com.google.devtools.ksp'
    id 'com.google.dagger.hilt.android'
}

android {
    defaultConfig {
-       kapt {
-           arguments {
-               arg("room.schemaLocation", "$projectDir/schemas")
-           }
-       }
+       ksp {
+           arg("room.schemaLocation", "$projectDir/schemas")
+       }
+   }
}

dependencies {
    // hilt
    def hilt_version = "2.47"
    implementation "com.google.dagger:hilt-android:$hilt_version"
-   kapt "com.google.dagger:hilt-compiler:$hilt_version"
+   ksp "com.google.dagger:hilt-compiler:$hilt_version"
    implementation 'androidx.hilt:hilt-navigation-compose:1.0.0'

    // Room
    def room_version = "2.5.2"
    implementation "androidx.room:room-runtime:$room_version"
    implementation "androidx.room:room-ktx:$room_version"
-   kapt "androidx.room:room-compiler:$room_version"
+   ksp "androidx.room:room-compiler:$room_version"
}

room.schemaLocationのところは、Roomの設定でexportSchemaがtrueの時に必要な記述です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0