Bermigrasi dari kapt ke KSP

Kapt (Alat Pemrosesan Anotasi Kotlin) memungkinkan Anda menggunakan pemroses anotasi Java dengan kode Kotlin, meskipun pemroses tersebut tidak memiliki dukungan khusus untuk Kotlin. Hal ini dilakukan dengan membuat stub Java dari file Kotlin yang kemudian dapat dibaca prosesor. Pembuatan stub ini adalah operasi yang mahal dan memiliki dampak signifikan terhadap kecepatan build.

KSP (Kotlin Symbol Processing) adalah alternatif yang lebih mengutamakan Kotlin untuk kapt. KSP menganalisis kode Kotlin secara langsung, yang lebih cepat hingga 2x. Kotlin juga memiliki pemahaman yang lebih baik tentang konstruksi bahasa Kotlin.

Anda dapat menjalankan kapt dan KSP bersama-sama dalam project saat bermigrasi, dan migrasi dapat dilakukan modul demi modul, library demi library.

Berikut ini ringkasan langkah-langkah migrasi:

  1. Memeriksa library yang Anda gunakan untuk dukungan KSP
  2. Menambahkan plugin KSP ke project
  3. Mengganti pemroses anotasi dengan KSP
  4. Menghapus plugin kapt

Memeriksa library yang Anda gunakan untuk dukungan KSP

Untuk memulai, periksa apakah library yang Anda gunakan dengan kapt sudah memiliki dukungan KSP. Hal ini berlaku untuk banyak library populer (termasuk Dagger, Glide, Room, dan Moshi), dan yang lainnya menambahkan dukungan.

Anda dapat memeriksa daftar library yang didukung dalam dokumentasi, atau melihat dokumentasi dan issue tracker library yang Anda gunakan.

Menambahkan plugin KSP ke project

Pertama, deklarasikan plugin KSP di file build.gradle.kts level teratas. Pastikan Anda memilih versi KSP yang selaras dengan versi Kotlin project Anda. Anda dapat menemukan daftar rilis di halaman GitHub KSP.

Kotlin

plugins {
    id("com.google.devtools.ksp") version "2.0.21-1.0.27" apply false
}

Groovy

plugins {
    id 'com.google.devtools.ksp' version '2.0.21-1.0.27' apply false
}

Kemudian, aktifkan KSP di file build.gradle.kts level modul:

Kotlin

plugins {
    id("com.google.devtools.ksp")
}

Groovy

plugins {
    id 'com.google.devtools.ksp'
}

Mengganti pemroses anotasi dengan KSP

Dengan mengaktifkan KSP, Anda dapat mulai mengganti penggunaan kapt dengan KSP. Untuk sebagian besar library, hal ini hanya memerlukan pengubahan kapt menjadi ksp pada deklarasi dependensi, karena deklarasi akan mengirimkan pemroses anotasi dan pemroses KSP dalam artefak yang sama.

Kotlin

dependencies {
    kapt("androidx.room:room-compiler:2.5.0")
    ksp("androidx.room:room-compiler:2.5.0")
}

Groovy

dependencies {
    kapt 'androidx.room:room-compiler:2.5.0'
    ksp 'androidx.room:room-compiler:2.5.0'
}

Setelah berpindah ke KSP, sinkronkan dan build project Anda untuk melihat apakah project tersebut masih berfungsi dengan benar.

Beberapa masalah umum yang harus diperhatikan:

  • Beberapa library tidak mendukung kumpulan fitur yang sama persis dengan kapt dan KSP. Jika kode Anda rusak setelah dimigrasikan, periksa dokumentasi library.
  • KSP memiliki informasi jenis Kotlin yang lebih akurat daripada kapt (misalnya tentang nullability), yang berarti bahwa pemroses KSP dapat menjadi lebih akurat dalam memenuhi persyaratan jenis. Proses ini mungkin juga memerlukan beberapa perbaikan dalam kode sumber, selain mengupdate file build Anda.
  • Jika sebelumnya Anda meneruskan argumen ke pemroses anotasi, Anda mungkin harus meneruskan argumen tersebut ke KSP sekarang. Perhatikan bahwa format argumen kapt dan KSP mungkin berbeda. Lihat dokumentasi KSP dan baca dokumentasi library yang Anda gunakan untuk mempelajari lebih lanjut.

Menghapus plugin kapt

Jika tidak ada lagi dependensi yang disertakan dengan kapt dalam modul Anda, hapus plugin kapt.

Jika dideklarasikan dalam blok plugin:

Kotlin

plugins {
    id("org.jetbrains.kotlin.kapt")
}

Groovy

plugins {
    id 'org.jetbrains.kotlin.kapt'
}

Jika menggunakan sintaksis plugin penerapan menggunakan Groovy:

apply plugin: 'kotlin-kapt'

Anda juga harus menghapus konfigurasi yang tertinggal terkait kapt, seperti:

Kotlin


kapt {
    correctErrorTypes = true
    useBuildCache = true
}

Groovy


kapt {
    correctErrorTypes true
    useBuildCache true
}

Referensi lainnya