Kapt'tan KSP'ye geçiş

Kapt (Kotlin Ek Açıklama İşleme Aracı), Java ek açıklama işleyicilerini Kotlin koduyla kullanmanıza olanak tanır. Bu işleyiciler Kotlin için özel destek sunmasa bile. Bu işlem, Kotlin dosyalarınızdan işlemcilerin okuyabileceği Java stub'ları oluşturarak yapılır. Bu taslak oluşturma işlemi pahalı bir işlemdir ve derleme hızını önemli ölçüde etkiler.

KSP (Kotlin Simge İşleme), kapt'a öncelik veren bir Kotlin alternatifidir. KSP, Kotlin kodunu doğrudan analiz eder ve bu işlem 2 kata kadar daha hızlıdır. Ayrıca Kotlin dil yapılarını daha iyi anlayabilirsiniz.

Taşıma işlemi sırasında kapt ve KSP'yi projenizde birlikte çalıştırabilirsiniz. Taşıma işlemi, modül modül ve kitaplık kitaplık yapılabilir.

Taşıma adımlarına genel bir bakış:

  1. KSP desteği için kullandığınız kitaplıkları kontrol edin
  2. KSP eklentisini projenize ekleme
  3. Ek açıklama işleyicileri KSP ile değiştirme
  4. kapt eklentisini kaldırma

KSP desteği için kullandığınız kitaplıkları kontrol edin

Başlamak için kapt ile kullandığınız kitaplıklarda KSP desteğinin olup olmadığını kontrol edin. Bu durum, birçok popüler kitaplıkta (Dagger, Glide, Room ve Moshi dahil) geçerlidir. Diğer kitaplıklar da bu desteği ekliyor.

Belgelerde desteklenen kitaplıkların listesini kontrol edebilir veya kullandığınız kitaplıkların belgelerine ve sorun izleyicisine bakabilirsiniz.

KSP eklentisini projenize ekleme

Öncelikle, KSP eklentisini üst düzey build.gradle.kts dosyanızda tanımlayın. Projenizin Kotlin sürümüne uygun bir KSP sürümü seçtiğinizden emin olun. Sürümlerin listesini KSP GitHub sayfasında bulabilirsiniz.

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
}

Ardından, modül düzeyindeki build.gradle.kts dosyanızda KSP'yi etkinleştirin:

Kotlin

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

Groovy

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

Ek açıklama işleyicileri KSP ile değiştirme

KSP etkinleştirildiğinde kapt kullanımlarını KSP ile değiştirmeye başlayabilirsiniz. Notlandırma işleyicilerini ve KSP işleyicilerini aynı yapıda gönderdikleri için, kitaplıkların büyük bir çoğunluğu için bu işlem, bağımlılık beyanında kapt değerinin ksp olarak değiştirilmesini gerektirir.

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'
}

KSP'ye geçtikten sonra, projenizin hâlâ düzgün çalışıp çalışmadığını görmek için senkronize edin ve derleyin.

Dikkat edilmesi gereken yaygın sorunlardan bazıları şunlardır:

  • Bazı kitaplıklar, kapt ve KSP ile tam olarak aynı özellik grubunu desteklemez. Taşıma işleminden sonra kodunuz çalışmazsa kitaplığın dokümanlarını kontrol edin.
  • KSP, kapt'tan daha doğru Kotlin türü bilgilerine sahiptir (örneğin, boş değer olabilirlik hakkında). Bu, KSP işleyicilerinin tür koşulları hakkında daha hassas olabileceği anlamına gelir. Bu, derleme dosyalarınızı güncellemenin yanı sıra kaynak kodunuzda da bazı düzeltmeler yapılmasını gerektirebilir.
  • Daha önce ek açıklama işleyiciye bağımsız değişkenler gönderiyorsanız bu bağımsız değişkenleri artık KSP'ye göndermeniz gerekebilir. Bağımsız değişkenlerin biçiminin kapt ile KSP arasında farklılık gösterebileceğini unutmayın. Daha fazla bilgi edinmek için KSP dokümanlarını ve kullandığınız kitaplığın dokümanlarını inceleyin.

kapt eklentisini kaldırma

Modülünüzde artık kapt ile birlikte dahil edilmiş bağımlılığınız kalmadığında kapt eklentisini kaldırın.

Bir eklentiler bloğunda bildirildiyse:

Kotlin

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

Groovy

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

Groovy kullanarak apply plugin söz dizimini kullanıyorsa:

apply plugin: 'kotlin-kapt'

Ayrıca, kapt ile ilgili kalan yapılandırmaları da kaldırmanız gerekir. Örneğin:

Kotlin


kapt {
    correctErrorTypes = true
    useBuildCache = true
}

Groovy


kapt {
    correctErrorTypes true
    useBuildCache true
}

Ek kaynaklar