🔨

【Android】kapt から KSP に切り替えてビルド速度を改善する

2023/03/14に公開

kapt

  • Kotlin Annotation Processing Toolの略
  • アノテーションに基づいてコードを自動生成するJava annotation processorsKotlinでも使えるようにするためのもの
  • DataBindingMoshiRoomなどで使う
  • 現在はメンテナンスモードとなっている(kapt compiler plugin

問題点

  • kaptJavaのスタブを生成するが、スタブ生成には高い負荷がかかるので、ビルド時間にも影響してしまう
  • 上記の理由で、次に登場する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 導入

今回はRoomKSPを使ったときのビルド速度の変化を見てみたいと思います。

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ってタスクが減ってるので、これがスタブ生成かな?

HiltKSPの対応がまだなのでそのままにしています。)

参考

Discussion