Android-KMP प्लगिन पर माइग्रेट करना

पहले, 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 टारगेट जोड़ने के पिछले तरीके की जगह आधिकारिक तौर पर इस्तेमाल किया जा सकता है. JetBrains, अब KMP के लिए com.android.library प्लग इन का इस्तेमाल करने की अनुमति नहीं देगा. साथ ही, आने वाले समय में होने वाले अपडेट और सुधारों का फ़ायदा भी नहीं मिलेगा.

किसी प्रोजेक्ट में Android-KMP प्लग इन लागू करना

अपने प्रोजेक्ट में Android-KMP प्लग इन लागू करने के दो मुख्य तरीके हैं:

प्लग इन को किसी मौजूदा मॉड्यूल पर लागू करना

किसी मौजूदा KMP लाइब्रेरी मॉड्यूल में Android-KMP प्लग इन लागू करने के लिए, यह तरीका अपनाएं:

  1. वर्शन कैटलॉग में प्लग इन की जानकारी दें. वर्शन कैटलॉग की TOML फ़ाइल (आम तौर पर gradle/libs.versions.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 को, इस्तेमाल किए जा रहे असल वर्शन से बदलें.

  2. रूट बिल्ड फ़ाइल में प्लग इन के एलान लागू करें. अपने प्रोजेक्ट की रूट डायरेक्ट्री में मौजूद build.gradle.kts (Kotlin) या build.gradle (Groovy) फ़ाइल खोलें. apply false का इस्तेमाल करके, 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
    }
  3. KMP लाइब्रेरी मॉड्यूल की बिल्ड फ़ाइल में प्लग इन लागू करें. अपने KMP लाइब्रेरी मॉड्यूल में, build.gradle.kts (Kotlin) या build.gradle (Groovy) फ़ाइल खोलें. अपनी फ़ाइल में सबसे ऊपर, plugins ब्लॉक में प्लग इन लागू करें:

    Kotlin

    plugins {
       alias(libs.plugins.kotlin.multiplatform)
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library)
    }

    Groovy

    plugins {
       alias(libs.plugins.kotlin.multiplatform)
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library)
    }
  4. Android KMP टारगेट को कॉन्फ़िगर करें. 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.) ...
    }
  5. बदलाव लागू करें. प्लग इन लागू करने और kotlin ब्लॉक को कॉन्फ़िगर करने के बाद, बदलाव लागू करने के लिए अपना Gradle प्रोजेक्ट सिंक करें.

प्लग इन की मदद से नया मॉड्यूल बनाना

सीधे Android Studio में जाकर भी, Kotlin Multiplatform लाइब्रेरी का नया मॉड्यूल बनाया जा सकता है. इससे ज़रूरी प्लग इन अपने-आप लागू हो जाते हैं. इनमें Android-KMP प्लग इन भी शामिल है. Android Studio में नया KMP लाइब्रेरी मॉड्यूल बनाने का तरीका जानने के लिए, किसी मौजूदा प्रोजेक्ट में Kotlin Multiplatform जोड़ना लेख पढ़ें.

मल्टीप्लैटफ़ॉर्म वाले पूरे नेटवर्क और बेहतर कॉन्फ़िगरेशन के बारे में ज़्यादा जानने के लिए, Kotlin Multiplatform के आधिकारिक दस्तावेज़ देखें.