Kapt (Kotlin Annotation Processing Tool) की मदद से, Kotlin कोड के साथ Java annotation processors का इस्तेमाल किया जा सकता है. भले ही, उन प्रोसेसर में Kotlin के लिए खास तौर पर सहायता उपलब्ध न हो. इसके लिए, आपकी Kotlin फ़ाइलों से Java स्टब जनरेट किए जाते हैं. इसके बाद, प्रोसेसर उन्हें पढ़ सकते हैं. स्टब जनरेट करना एक महंगा ऑपरेशन है और इससे बिल्ड की स्पीड पर काफ़ी असर पड़ता है.
KSP (Kotlin Symbol Processing), kapt का Kotlin-first विकल्प है. KSP, Kotlin कोड का सीधे तौर पर विश्लेषण करता है. इसलिए, यह दो गुना ज़्यादा तेज़ है. यह Kotlin भाषा के स्ट्रक्चर को भी बेहतर तरीके से समझता है.
माइग्रेट करते समय, अपने प्रोजेक्ट में kapt और KSP को एक साथ चलाया जा सकता है. साथ ही, माइग्रेशन को मॉड्यूल के हिसाब से और लाइब्रेरी के हिसाब से किया जा सकता है.
माइग्रेशन के चरणों के बारे में यहां खास जानकारी दी गई है:
- देखें कि KSP के साथ काम करने वाली लाइब्रेरी का इस्तेमाल किया जा रहा हो
- अपने प्रोजेक्ट में KSP प्लगिन जोड़ना
- एनोटेशन प्रोसेसर को KSP से बदलें
- kapt प्लगिन हटाएं
देखें कि KSP के साथ काम करने वाली लाइब्रेरी का इस्तेमाल किया जा रहा हो
शुरू करने के लिए, देखें कि kapt के साथ इस्तेमाल की जा रही लाइब्रेरी में KSP का सपोर्ट है या नहीं. कई लोकप्रिय लाइब्रेरी (जैसे कि Dagger, Glide, Room, और Moshi) के लिए, यह सुविधा उपलब्ध है. साथ ही, अन्य लाइब्रेरी के लिए भी यह सुविधा जोड़ी जा रही है.
दस्तावेज़ में जाकर, इस्तेमाल की जा सकने वाली लाइब्रेरी की सूची देखें. इसके अलावा, इस्तेमाल की जा रही लाइब्रेरी के दस्तावेज़ और समस्या ट्रैकर देखें.
अपने प्रोजेक्ट में KSP प्लगिन जोड़ना
सबसे पहले, अपने टॉप लेवल की build.gradle.kts फ़ाइल में KSP प्लगिन के बारे में बताएं.
आपको KSP के GitHub पेज पर रिलीज़ की सूची मिल सकती है.
Kotlin
plugins { id("com.google.devtools.ksp") version "2.3.4" apply false }
Groovy
plugins { id 'com.google.devtools.ksp' version '2.3.4' apply false }
इसके बाद, मॉड्यूल-लेवल की build.gradle.kts फ़ाइल में KSP चालू करें:
Kotlin
plugins { id("com.google.devtools.ksp") }
Groovy
plugins { id 'com.google.devtools.ksp' }
एनोटेशन प्रोसेसर को KSP से बदलें
KSP चालू होने पर, kapt की जगह KSP का इस्तेमाल किया जा सकता है. ज़्यादातर लाइब्रेरी के लिए, डिपेंडेंसी डिक्लेरेशन में kapt को ksp में बदलने की ज़रूरत होती है. ऐसा इसलिए, क्योंकि वे अपने एनोटेशन प्रोसेसर और KSP प्रोसेसर को एक ही आर्टफ़ैक्ट में शिप करती हैं.
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 पर माइग्रेट करने के बाद, अपने प्रोजेक्ट को सिंक और बिल्ड करें. इससे आपको यह पता चलेगा कि यह अब भी सही तरीके से काम कर रहा है या नहीं.
यहां कुछ सामान्य समस्याएं बताई गई हैं:
- कुछ लाइब्रेरी में, KAPT और KSP के साथ सुविधाओं का एक जैसा सेट काम नहीं करता. अगर माइग्रेट करने के बाद आपका कोड काम नहीं करता है, तो लाइब्रेरी का दस्तावेज़ देखें.
- KSP में, kapt की तुलना में Kotlin टाइप की ज़्यादा सटीक जानकारी होती है. उदाहरण के लिए, nullability के बारे में. इसका मतलब है कि KSP प्रोसेसर, टाइप की ज़रूरी शर्तों के बारे में ज़्यादा सटीक जानकारी दे सकते हैं. इसके लिए, आपको अपनी बिल्ड फ़ाइलों को अपडेट करने के साथ-साथ, सोर्स कोड में भी कुछ बदलाव करने पड़ सकते हैं.
- अगर आपने एनोटेशन प्रोसेसर को पहले से ही आर्ग्युमेंट पास किए हैं, तो अब आपको KSP को भी वे आर्ग्युमेंट पास करने होंगे. ध्यान दें कि kapt और KSP के बीच, आर्ग्युमेंट का फ़ॉर्मैट अलग-अलग हो सकता है. ज़्यादा जानने के लिए, KSP दस्तावेज़ देखें. साथ ही, इस्तेमाल की जा रही लाइब्रेरी का दस्तावेज़ पढ़ें.
kapt प्लगिन हटाएं
जब आपके मॉड्यूल में kapt के साथ कोई डिपेंडेंसी शामिल न हो, तब kapt प्लगिन हटा दें.
अगर इसे plugins ब्लॉक में बताया गया है, तो:
Kotlin
plugins {id("org.jetbrains.kotlin.kapt")}
Groovy
plugins {id 'org.jetbrains.kotlin.kapt'}
अगर यह Groovy का इस्तेमाल करके, apply plugin सिंटैक्स का इस्तेमाल कर रहा था, तो:
apply plugin: 'kotlin-kapt'
आपको kapt से जुड़े बचे हुए कॉन्फ़िगरेशन को भी हटा देना चाहिए. जैसे:
Kotlin
kapt { correctErrorTypes = true useBuildCache = true }
Groovy
kapt { correctErrorTypes true useBuildCache true }