Kapt (Kotlin Ek Açıklama İşleme Aracı), Kotlin için özel destek sunmasa bile Java ek açıklama işlemcilerini Kotlin koduyla kullanabilmenizi sağlar. Bu, Kotlin dosyalarınızdan işlemcilerin okuyabileceği Java artıkları oluşturarak yapılır. Bu saplama oluşturma işlemi pahalı bir işlemdir ve derleme hızı üzerinde önemli bir etkiye sahiptir.
KSP (Kotlin Symbol İşleme), kapt'ın Kotlin'e öncelik veren alternatifidir. KSP, Kotlin kodunu doğrudan analiz eder. Bu işlem 2 kata kadar daha hızlıdır. Ayrıca, Kotlin'in dil yapılarını daha iyi anlamış.
Kapt şu anda bakım modunda. Mümkün olduğunda kapt'tan KSP'ye geçmenizi öneririz. Çoğu durumda, bu taşıma işlemi yalnızca projenizin derleme yapılandırmasında değişiklik yapılmasını gerektirir.
Taşıma sırasında projenizde kapt ve KSP'yi yan yana çalıştırabilirsiniz. Taşıma işlemi ise modül ve kitaplık bazında gerçekleştirilebilir.
Taşıma adımlarına ilişkin bir genel bakışı burada bulabilirsiniz:
- KSP desteği için kullandığınız kitaplıkları kontrol etme
- KSP eklentisini projenize ekleyin
- Ek açıklama işlemcilerini KSP ile değiştirme
- kapt eklentisini kaldırın
KSP desteği için kullandığınız kitaplıkları kontrol etme
Başlamak için, kapt ile kullandığınız kitaplıkların zaten KSP desteğine sahip olup olmadığını kontrol edin. Bu durum, birçok popüler kitaplık (Dagger, Glide, Room ve Moshi dahil) için geçerlidir ve diğerleri tarafından desteklenmeye devam etmektedir.
Belgelerde desteklenen kitaplıkların listesini kontrol edebilir veya kullandığınız kitaplıkların dokümanlarına ve sorun izleyicisine bakabilirsiniz.
KSP eklentisini projenize ekleyin
Öncelikle, üst düzey build.gradle.kts
dosyanızda KSP eklentisini tanımlayın.
Projenizin Kotlin sürümüyle uyumlu 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 "1.8.10-1.0.9" apply false }
Modern
plugins { id 'com.google.devtools.ksp' version '1.8.10-1.0.9' apply false }
Ardından, modül düzeyindeki build.gradle.kts
dosyanızda KSP'yi etkinleştirin:
Kotlin
plugins { id("com.google.devtools.ksp") }
Modern
plugins { id 'com.google.devtools.ksp' }
Ek açıklama işlemcilerini KSP ile değiştirme
KSP etkinleştirildiğinde, kapt kullanımlarını KSP ile değiştirmeye başlayabilirsiniz. Ek açıklama işlemcisini ve KSP işlemcisini aynı yapıda gönderen kitaplıkların çok büyük bir kısmında bu işlem, bağımlılık bildiriminde kapt'ın ksp olarak değiştirilmesini gerektirir.
Kotlin
dependencies {kapt("androidx.room:room-compiler:2.5.0")ksp("androidx.room:room-compiler:2.5.0") }
Modern
dependencies {kapt 'androidx.room:room-compiler:2.5.0'ksp 'androidx.room:room-compiler:2.5.0' }
KSP'ye geçtikten sonra, hâlâ düzgün çalışıp çalışmadığını görmek için projenizi senkronize edip oluşturun.
Dikkat edilmesi gereken bazı yaygın sorunlar:
- Bazı kitaplıklar, kapt ve KSP ile tam olarak aynı özellik grubunu desteklemez. Kodunuz taşıma işleminden sonra bozulursa kitaplıktaki dokümanları kontrol edin.
- KSP, kapt'tan daha doğru Kotlin türü bilgilerine sahiptir (örneğin, boş değer olabilir). Bu da KSP işlemcilerinin tür gereksinimleri hakkında daha kesin sonuçlar verebileceği anlamına gelir. Bu işlem, derleme dosyalarınızı güncellemenin yanı sıra kaynak kodunuzda da bazı düzeltmeler yapmanızı gerektirebilir.
- Önceden ek açıklama işlemcisine bağımsız değişkenler ilettiyseniz bu bağımsız değişkenleri artık KSP'ye aktarmanız gerekir. Bağımsız değişkenlerin biçiminin kapt ve KSP arasında farklı olabileceğini unutmayın. Daha fazla bilgi edinmek için KSP belgelerini inceleyin ve kullandığınız kitaplığın belgelerine bakın.
kapt eklentisini kaldırın
Artık modülünüzde kapt
kapsamındaki herhangi bir bağımlılığınız yoksa kapt eklentisini kaldırın.
Bir eklenti bloğunda tanımlanmışsa:
Kotlin
plugins {id("org.jetbrains.kotlin.kapt")}
Modern
plugins {id 'org.jetbrains.kotlin.kapt'}
Groovy kullanarak "uygulama eklentisi söz dizimini" kullanıyorsa:
apply plugin: 'kotlin-kapt'
Ayrıca, kapt ile ilgili kalan yapılandırmaları da kaldırmalısınız. Örneğin:
Kotlin
kapt { correctErrorTypes = true useBuildCache = true }
Modern
kapt { correctErrorTypes true useBuildCache true }