पहले, Android को KMP प्रोजेक्ट में इंटिग्रेट करने का एक ही तरीका था. इसके लिए, सामान्य Android लाइब्रेरी Gradle प्लग इन का इस्तेमाल करना होता था: com.android.library
. हालांकि, अब इस तरीके का इस्तेमाल नहीं किया जा सकता. इसके बजाय, com.android.kotlin.multiplatform.library
प्लग-इन का इस्तेमाल किया जा सकता है. इसे Android-KMP प्लग-इन भी कहा जाता है. इस गाइड में, नए प्लग इन पर माइग्रेट करने का तरीका बताया गया है.
मुख्य सुविधाएं और अंतर
Android-KMP प्लग इन (com.android.kotlin.multiplatform.library
) को खास तौर पर, KMP प्रोजेक्ट के लिए बनाया गया है. यह कई अहम मामलों में, सामान्य com.android.library
प्लग इन से अलग है:
- सिंगल वैरिएंट आर्किटेक्चर: यह प्लग इन सिंगल वैरिएंट के साथ काम करता है. साथ ही, स्टैंडर्ड Android लाइब्रेरी प्रोजेक्ट में आम तौर पर पाए जाने वाले प्रॉडक्ट फ़्लेवर और बिल्ड टाइप के लिए सहायता हटाकर, बिल्ड प्रोसेस को आसान बनाता है. इससे, कॉन्फ़िगरेशन को आसान बनाना और KMP Android लाइब्रेरी के लिए, बिल्ड की परफ़ॉर्मेंस को बेहतर बनाना संभव हो पाता है.
- KMP के लिए ऑप्टिमाइज़ किया गया: इस प्लग इन को खास तौर पर Kotlin के लिए डिज़ाइन किया गया है. यह प्लग इन, कई प्लैटफ़ॉर्म पर काम करने वाली लाइब्रेरी के लिए है. इसमें, शेयर किए गए Kotlin कोड और अलग-अलग प्लैटफ़ॉर्म पर काम करने की सुविधा पर फ़ोकस किया गया है. इस वजह से, इसमें Android के लिए बने नेटिव बिल्ड, एआईडीएल (Android इंटरफ़ेस डेफ़िनिशन लैंग्वेज), और रेंडरस्क्रिप्ट के लिए सहायता नहीं मिलती. ये आम तौर पर, केएमपी के शेयर किए गए कोड के कॉन्टेक्स्ट में काम के नहीं होते.
- टेस्ट डिफ़ॉल्ट रूप से बंद होते हैं: कई प्लैटफ़ॉर्म वाले एनवायरमेंट में, बिल्ड की स्पीड को और बेहतर बनाने के लिए, टेस्ट डिफ़ॉल्ट रूप से बंद होते हैं. अगर आपके प्रोजेक्ट के लिए ज़रूरी हो, तो साफ़ तौर पर जांच चालू की जा सकती है. यह होस्ट (यूनिट टेस्ट) और डिवाइस (इंस्ट्रूमेंटेशन टेस्ट) पर किए जाने वाले टेस्ट, दोनों पर लागू होता है.
- Android का कोई टॉप-लेवल एक्सटेंशन नहीं: प्लग इन, आपकी Gradle बिल्ड फ़ाइलों में टॉप-लेवल
android
एक्सटेंशन नहीं बनाता. कॉन्फ़िगरेशन को Kotlin के मल्टीप्लैटफ़ॉर्म डीएसएल मेंandroidLibrary
ब्लॉक की मदद से मैनेज किया जाता है. इससे, KMP प्रोजेक्ट का स्ट्रक्चर एक जैसा बना रहता है. - Java कंपाइलेशन के लिए ऑप्ट-इन करना: Java कंपाइलेशन, डिफ़ॉल्ट रूप से चालू नहीं होता. अगर आपकी KMP लाइब्रेरी को Java पर आधारित कोड को कॉम्पाइल करना है, तो आपको अपने
kotlin
ब्लॉक मेंandroidLibrary
कॉन्फ़िगरेशन ब्लॉक मेंwithJava()
एपीआई का इस्तेमाल करके, साफ़ तौर पर ऑप्ट इन करना होगा. इससे, कोड को कंपाइल करने की प्रोसेस को बेहतर तरीके से कंट्रोल किया जा सकता है. साथ ही, जब Java-based कोड को कंपाइल करने की ज़रूरत न हो, तब बिल्ड करने में लगने वाले समय को कम किया जा सकता है.
माइग्रेशन के फ़ायदे
Android-KMP प्लग इन, KMP प्रोजेक्ट के लिए ये फ़ायदे देता है:
- बिल्ड की परफ़ॉर्मेंस और स्थिरता को बेहतर बनाया गया है: Android-KMP प्लग इन को, KMP प्रोजेक्ट में बिल्ड की स्पीड को ऑप्टिमाइज़ करने और स्थिरता को बेहतर बनाने के लिए डिज़ाइन किया गया है. इसका बेहतर स्ट्रक्चर और KMP वर्कफ़्लो पर फ़ोकस, बेहतर और भरोसेमंद बिल्ड प्रोसेस में मदद करता है.
- बेहतर IDE इंटिग्रेशन: यह प्लग इन, Android Studio और Kotlin के अन्य IDE के साथ बेहतर इंटिग्रेशन उपलब्ध कराता है. इससे, KMP Android लाइब्रेरी के साथ काम करते समय, कोड को बेहतर तरीके से पूरा करने, नेविगेट करने, डीबग करने, और डेवलपर के अनुभव को बेहतर बनाने में मदद मिलती है.
- प्रोजेक्ट कॉन्फ़िगरेशन को आसान बनाना: Android-KMP प्लग इन, वैरिएंट जैसी Android से जुड़ी मुश्किलों को हटाकर, केएमपी प्रोजेक्ट के लिए कॉन्फ़िगरेशन को आसान बनाता है. इससे, बेहतर और आसानी से मैनेज की जा सकने वाली बिल्ड फ़ाइलें मिलती हैं. साथ ही, KMP Android डेवलपमेंट में नए डेवलपर को कम समय में ज़्यादा सीखने को मिलता है.
पहले,
com.android.library
प्लग इन का इस्तेमाल करके Android को KMP प्रोजेक्ट में इंटिग्रेट करने पर, कई प्लैटफ़ॉर्म वाले स्ट्रक्चर में Android Gradle प्लग इन और Kotlin Gradle प्लग इन के बीच इंटरैक्शन की वजह से, सोर्स सेट के नाम गलत हो जाते थे. उदाहरण के लिए, Android इंस्ट्रूमेंट किए गए टेस्ट को कॉन्फ़िगर करने के लिए, सोर्स सेट का नामandroidAndroidTest
रखा गया था. नाम रखने का यह तरीका, स्टैंडर्ड KMP प्रोजेक्ट स्ट्रक्चर के बारे में जानने वाले डेवलपर के लिए आसान नहीं था. - आधिकारिक और सुझाया गया समाधान:
com.android.kotlin.multiplatform.library
प्लग इन,com.android.library
प्लग इन का इस्तेमाल करके, KMP लाइब्रेरी में Android टारगेट जोड़ने के पिछले तरीके की जगह, आधिकारिक तौर पर इस्तेमाल किया जा सकता है. KMP के लिएcom.android.library
प्लग इन का इस्तेमाल जारी रखने पर, JetBrains अब इसकी सुविधाएं उपलब्ध नहीं कराएगा. साथ ही, आने वाले समय में होने वाले अपडेट और सुधारों का फ़ायदा भी नहीं मिलेगा.
किसी प्रोजेक्ट में Android-KMP प्लग इन लागू करना
अपने प्रोजेक्ट में Android-KMP प्लग इन लागू करने के दो मुख्य तरीके हैं: * मौजूदा KMP लाइब्रेरी मॉड्यूल के लिए, अपनी Gradle फ़ाइलों में मैन्युअल रूप से बदलाव करें. * नए KMP लाइब्रेरी मॉड्यूल के लिए, Android Studio के यूज़र इंटरफ़ेस (यूआई) से सीधे नया मॉड्यूल बनाएं.
प्लग इन को किसी मौजूदा मॉड्यूल पर लागू करना
किसी मौजूदा KMP लाइब्रेरी मॉड्यूल में Android-KMP प्लग इन लागू करने के लिए, यह तरीका अपनाएं:
अपना वर्शन कैटलॉग TOML फ़ाइल खोलें और
plugins
सेक्शन में यह जोड़ें:[plugins] kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "KOTLIN_PLUGIN_VERSION" } android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "ANDROID_KMP_PLUGIN_VERSION" }
KOTLIN_PLUGIN_VERSION और ANDROID_KMP_PLUGIN_VERSION को, इस्तेमाल किए जा रहे असल वर्शन से बदलें.
अपनी
build.gradle.kts
(Kotlin) याbuild.gradle
(Groovy) फ़ाइल को अपने KMP लाइब्रेरी मॉड्यूल के रूट में खोलें.अपनी फ़ाइल में सबसे ऊपर,
plugins
ब्लॉक में प्लग इन लागू करें:Kotlin
plugins { alias(libs.plugins.kotlin.multiplatform) apply false // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) apply false }
Groovy
plugins { alias(libs.plugins.kotlin.multiplatform) apply false // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) apply false }
Android टारगेट तय करने के लिए, Kotlin Multiplatform ब्लॉक (
kotlin
) को कॉन्फ़िगर करें.kotlin
ब्लॉक में,androidLibrary
का इस्तेमाल करके Android टारगेट की जानकारी दें:Kotlin
kotlin { androidLibrary { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { sourceSetTreeName = "test" } compilations.configureEach { compilerOptions.configure { jvmTarget.set( org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 ) } } } sourceSets { androidMain { dependencies { // Add Android-specific dependencies here } } getByName("androidHostTest") { dependencies { } } getByName("androidDeviceTest") { dependencies { } } } // ... other targets (JVM, iOS, etc.) ... }
Groovy
kotlin { androidLibrary { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { it.sourceSetTreeName = "test" } compilations.configureEach { compilerOptions.options.jvmTarget.set( org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 ) } } sourceSets { androidMain { dependencies { } } androidHostTest { dependencies { } } androidDeviceTest { dependencies { } } } // ... other targets (JVM, iOS, etc.) ... }
प्लग इन लागू करने और
kotlin
ब्लॉक को कॉन्फ़िगर करने के बाद, बदलाव लागू करने के लिए अपना Gradle प्रोजेक्ट सिंक करें.
प्लग इन की मदद से नया मॉड्यूल बनाना
सीधे Android Studio में जाकर भी, Kotlin Multiplatform लाइब्रेरी का नया मॉड्यूल बनाया जा सकता है. इससे ज़रूरी प्लग इन अपने-आप लागू हो जाते हैं. इनमें Android-KMP प्लग इन भी शामिल है. Android Studio में नया KMP लाइब्रेरी मॉड्यूल बनाने का तरीका जानने के लिए, किसी मौजूदा प्रोजेक्ट में Kotlin Multiplatform जोड़ना लेख पढ़ें.
मल्टीप्लैटफ़ॉर्म वाले पूरे नेटवर्क और बेहतर कॉन्फ़िगरेशन के बारे में ज़्यादा जानने के लिए, Kotlin Multiplatform के आधिकारिक दस्तावेज़ देखें.