🔨
【Android】kapt から KSP に切り替えてビルド速度を改善する
kapt
-
Kotlin Annotation Processing Tool
の略 - アノテーションに基づいてコードを自動生成する
Java annotation processors
をKotlin
でも使えるようにするためのもの -
DataBinding
、Moshi
、Room
などで使う - 現在はメンテナンスモードとなっている(kapt compiler plugin)
問題点
-
kapt
はJava
のスタブを生成するが、スタブ生成には高い負荷がかかるので、ビルド時間にも影響してしまう - 上記の理由で、次に登場する
KSP
を使用することが推奨されている
KSP
-
Kotlin Symbol Processing
の略 -
KSP
ではKotlin
のコードを直接分析することでJava
のスタブ生成が必要なくなり、ビルド速度が改善する -
kapt
よりも2倍高速(らしい)!! - よって
KSP
を導入することで、ビルド時間の改善が期待できる
開発環境
Android Studio Flamingo | 2022.2.1 Beta 5
Kotlin: 1.7.20
Gradle: 7.4.0-rc03
KSP の初期設定
build.gradle(Project)
plugins {
id 'com.google.devtools.ksp' version '1.7.20-1.0.6' apply false
}
build.gradle(Module)
plugins {
id 'com.google.devtools.ksp'
}
KSP 導入
今回はRoom
でKSP
を使ったときのビルド速度の変化を見てみたいと思います。
build.gradle(Module)
plugins {
id 'com.google.devtools.ksp'
}
dependencies {
def roomVersion = "2.5.0"
implementation "androidx.room:room-ktx:$roomVersion"
annotationProcessor "androidx.room:room-compiler:$roomVersion"
ksp "androidx.room:room-compiler:$roomVersion"
}
KSP
をサポートしているライブラリは Supported libraries から確認することができます。
以下のビルド時間を確認する方法は 【Android】タスクごとのビルド時間を確認する を参照してください!
kapt(24.3s) | KSP(19.9s) |
---|---|
24.3s
から19.9s
に改善されました!
kaptGenerateStubsDebugKotlin
ってタスクが減ってるので、これがスタブ生成かな?
(Hilt
はKSP
の対応がまだなのでそのままにしています。)
Discussion