पहले से मौजूद Kotlin पर माइग्रेट करना

Android Gradle प्लग इन 9.0 में, Kotlin के लिए पहले से मौजूद सहायता की सुविधा जोड़ी गई है. साथ ही, इसे डिफ़ॉल्ट रूप से चालू किया गया है. इसका मतलब है कि अब आपको Kotlin सोर्स फ़ाइलों को कंपाइल करने के लिए, अपनी बिल्ड फ़ाइलों में org.jetbrains.kotlin.android (या kotlin-android) प्लगिन लागू करने की ज़रूरत नहीं है. Kotlin पहले से मौजूद होने की वजह से, आपकी बिल्ड फ़ाइलें आसान होती हैं. साथ ही, AGP और kotlin-android प्लगिन के बीच कंपैटिबिलिटी से जुड़ी समस्याओं से बचा जा सकता है.

Kotlin को चालू करना

Kotlin के साथ काम करने के लिए, आपको AGP 9.0 या इसके बाद के वर्शन की ज़रूरत होगी. AGP 9.0 में, उन सभी मॉड्यूल के लिए Kotlin पहले से ही चालू होती है जिनमें AGP लागू किया जाता है. इसलिए, इसे चालू करने के लिए आपको कुछ भी करने की ज़रूरत नहीं है. हालांकि, अगर आपने gradle.properties फ़ाइल में android.builtInKotlin=false सेट करके, पहले से मौजूद Kotlin का इस्तेमाल बंद कर दिया था, तो आपको इस सेटिंग को हटाना होगा या इसे चालू करने के लिए android.builtInKotlin=true सेट करना होगा.

Kotlin के बिल्ट-इन वर्शन का इस्तेमाल करने के लिए, आपको अपने प्रोजेक्ट में कुछ बदलाव करने होंगे. इसलिए, Kotlin के बिल्ट-इन वर्शन को चालू करने के बाद, अपने प्रोजेक्ट को माइग्रेट करने के लिए अगले चरण पूरे करें.

माइग्रेशन के चरण

अपने प्रोजेक्ट को AGP के पुराने वर्शन से AGP 9.0 या इसके बाद के वर्शन पर अपग्रेड करने के बाद, आपको यह गड़बड़ी का मैसेज दिख सकता है. इसके अलावा, बिल्ट-इन Kotlin को मैन्युअल तरीके से चालू करने के बाद भी यह मैसेज दिख सकता है:

Failed to apply plugin 'org.jetbrains.kotlin.android'.
> Cannot add extension with name 'kotlin', as there is an extension already registered with that name.

...या

Failed to apply plugin 'com.jetbrains.kotlin.android'
> The 'org.jetbrains.kotlin.android' plugin is no longer required for Kotlin support since AGP 9.0.

ऐसा इसलिए है, क्योंकि Kotlin में पहले से मौजूद सुविधा के लिए, आपको अपने प्रोजेक्ट में कुछ बदलाव करने होंगे. इस गड़बड़ी को ठीक करने के लिए, यह तरीका अपनाएं.

  1. kotlin-android प्लगिन हटाना
  2. अगर ज़रूरी हो, तो kotlin-kapt प्लगिन को माइग्रेट करें
  3. अगर ज़रूरी हो, तो kotlinOptions{} ब्लॉक को माइग्रेट करें

1. kotlin-android प्लगिन हटाना

org.jetbrains.kotlin.android (या kotlin-android) प्लगिन को मॉड्यूल-लेवल की उन बिल्ड फ़ाइलों से हटाएं जहां आपने इसे लागू किया है. प्लगिन हटाने के लिए इस्तेमाल किया जाने वाला कोड, इस बात पर निर्भर करता है कि प्लगिन के बारे में जानकारी देने के लिए वर्शन कैटलॉग का इस्तेमाल किया जा रहा है या नहीं.

वर्शन कैटलॉग के साथ

Kotlin

// Module-level build file
plugins {
    alias(libs.plugins.kotlin.android)
}

Groovy

// Module-level build file
plugins {
    alias(libs.plugins.kotlin.android)
}

कोई वर्शन कैटलॉग नहीं है

Kotlin

// Module-level build file
plugins {
    id("org.jetbrains.kotlin.android")
}

Groovy

// Module-level build file
plugins {
    id 'org.jetbrains.kotlin.android'
}

इसके बाद, प्लगिन को सबसे ऊपर लेवल की बिल्ड फ़ाइल से हटाएं:

वर्शन कैटलॉग के साथ

Kotlin

// Top-level build file
plugins {
    alias(libs.plugins.kotlin.android) apply false
}

Groovy

// Top-level build file
plugins {
    alias(libs.plugins.kotlin.android) apply false
}

कोई वर्शन कैटलॉग नहीं है

Kotlin

// Top-level build file
plugins {
    id("org.jetbrains.kotlin.android") version "KOTLIN_VERSION" apply false
}

Groovy

// Top-level build file
plugins {
    id 'org.jetbrains.kotlin.android' version 'KOTLIN_VERSION' apply false
}

अगर वर्शन कैटलॉग का इस्तेमाल किया जा रहा है, तो प्लगिन डेफ़िनिशन को वर्शन कैटलॉग की TOML फ़ाइल (आम तौर पर gradle/libs.versions.toml) से भी हटाएं:

[plugins]
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "KOTLIN_VERSION" }

2. अगर ज़रूरी हो, तो kotlin-kapt प्लगिन माइग्रेट करें

अगर आपने अपनी बिल्ड फ़ाइलों में org.jetbrains.kotlin.kapt (या kotlin-kapt) का इस्तेमाल किया है, तो यह प्लगिन, Kotlin में पहले से मौजूद सुविधाओं के साथ काम नहीं करेगा. आपको इस प्लगिन को com.android.legacy-kapt प्लगिन से बदलना होगा. इसके लिए, Android Gradle प्लगिन के मौजूदा वर्शन का इस्तेमाल करें.

उदाहरण के लिए, वर्शन कैटलॉग की मदद से, वर्शन कैटलॉग की TOML फ़ाइल को इस तरह अपडेट करें:

[plugins]
android-application = { id = "com.android.application", version.ref = "AGP_VERSION" }

# Add the following plugin definition
legacy-kapt = { id = "com.android.legacy-kapt", version.ref = "AGP_VERSION" }

# Remove the following plugin definition
kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "KOTLIN_VERSION" }

इसके बाद, अपनी बिल्ड फ़ाइलें अपडेट करें:

Kotlin

// Top-level build file
plugins {
    alias(libs.plugins.legacy.kapt) apply false
    alias(libs.plugins.kotlin.kapt) apply false
}

Groovy

// Top-level build file
plugins {
    alias(libs.plugins.legacy.kapt) apply false
    alias(libs.plugins.kotlin.kapt) apply false
}

Kotlin

// Module-level build file
plugins {
    alias(libs.plugins.legacy.kapt)
    alias(libs.plugins.kotlin.kapt)
}

Groovy

// Module-level build file
plugins {
    alias(libs.plugins.legacy.kapt)
    alias(libs.plugins.kotlin.kapt)
}

3. अगर ज़रूरी हो, तो kotlinOptions{} ब्लॉक को माइग्रेट करें

अगर android.kotlinOptions{} डीएसएल का इस्तेमाल किया जा रहा है, तो आपको इसे kotlin.compilerOptions{} डीएसएल पर माइग्रेट करना होगा.

उदाहरण के लिए, इस कोड को अपडेट करें:

Kotlin

android {
    kotlinOptions {
        languageVersion = "2.0"
        jvmTarget = "11"
    }
}

Groovy

android {
    kotlinOptions {
        languageVersion = "2.0"
        jvmTarget = "11"
    }
}

...को नए डीएसएल में बदलें:

Kotlin

kotlin {
    compilerOptions {
        languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0
        // Optional: Set jvmTarget
        // jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11
    }
}

Groovy

kotlin {
    compilerOptions {
        languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0
        // Optional: Set jvmTarget
        // jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11
    }
}

समस्याओं की शिकायत करें

ऊपर दिए गए चरणों को पूरा करने के बाद, अगर आपको कोई समस्या आती है, तो समस्या #438678642 के ब्यौरे में जाकर, ज्ञात समस्याएं देखें. अगर ज़रूरी हो, तो हमें सुझाव/राय दें या शिकायत करें.

Kotlin के बिल्ट-इन वर्शन से ऑप्ट आउट करना

अगर आपको अपने प्रोजेक्ट को माइग्रेट करने में समस्या आ रही है, ताकि बिल्ट-इन Kotlin का इस्तेमाल किया जा सके, तो gradle.properties फ़ाइल में android.builtInKotlin = false सेट करें. इससे बिल्ट-इन Kotlin को कुछ समय के लिए बंद किया जा सकेगा. ऐसा करने पर, बिल्ड में एक चेतावनी दिखेगी. इसमें आपको बिल्ट-इन Kotlin पर माइग्रेट करने के लिए कहा जाएगा. ऐसा इसलिए, क्योंकि AGP 10.0 से पहले, AGP 9.x के आने वाले वर्शन में बिल्ट-इन Kotlin को बंद नहीं किया जा सकेगा.

मॉड्यूल के हिसाब से माइग्रेशन

android.builtInKotlin Gradle प्रॉपर्टी की मदद से, उन सभी मॉड्यूल के लिए बिल्ट-इन Kotlin को चालू या बंद किया जा सकता है जहां AGP लागू किया जाता है.

अगर आपको एक साथ सभी मॉड्यूल माइग्रेट करने में मुश्किल हो रही है, तो एक-एक करके मॉड्यूल माइग्रेट किए जा सकते हैं:

  1. सभी मॉड्यूल के लिए, पहले से मौजूद Kotlin को बंद करने के लिए, gradle.properties फ़ाइल में android.builtInKotlin = false सेट करें.

  2. जिस मॉड्यूल में आपको Kotlin को पहले से उपलब्ध कराना है उस पर com.android.experimental.built-in-kotlin प्लग इन लागू करें. इसके लिए, Android Gradle प्लग इन के मौजूदा वर्शन का इस्तेमाल करें.

  3. इस मॉड्यूल को Kotlin में माइग्रेट करने के लिए, माइग्रेशन के पिछले चरण पूरे करें.

  4. सभी मॉड्यूल माइग्रेट करने के बाद, gradle.properties में android.builtInKotlin = false सेटिंग और अपनी बिल्ड फ़ाइलों में com.android.experimental.built-in-kotlin प्लगिन हटाएं.