अपने बिल्ड कॉन्फ़िगरेशन को ग्रूवी से Kotlin में माइग्रेट करें

'Android Gradle प्लग इन 4.0' के Gradle बिल्ड में Kotlin का इस्तेमाल करने की सुवि��ा जोड़ी गई इसका कॉन्फ़िगरेशन प्रोग्रामिंग भाषा है इसका इस्तेमाल, आम तौर पर Gradle कॉन्फ़िगरेशन फ़ाइलों में किया जाता है.

Gradle स्क्रिप्ट लिखने के लिए, ग्रूवी की जगह Kotlin को प्राथमिकता दी जाती है, क्योंकि Kotlin और पढ़ने में आसान. साथ ही, यह कंपाइल-टाइम की जांच और IDE के लिए बेहतर सुविधा देता है.

फ़िलहाल, Kotlin में Android Studio के कोड में बेहतर इंटिग्रेशन की सुविधा मिलती है ग्रूवी से तुलना करने पर, Kotlin का इस्तेमाल करने वाले बिल्ड आम तौर पर इससे धीमे होते हैं यह ऐप्लिकेशन बनाने का सबसे सही तरीका है. इसलिए, परफ़ॉर्मेंस तय करते समय यह तय करें कि माइग्रेट करें.

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

टाइमलाइन

Android Studio जिराफ़ के साथ नए प्रोजेक्ट में, Kotlin DSL का इस्तेमाल किया जाता है बिल्ड कॉन्फ़िगरेशन के लिए डिफ़ॉल्ट रूप से (build.gradle.kts). इससे बेहतर सिंटैक्स के साथ ग्रूवी डीएसएल (build.gradle) के मुकाबले, इसमें बदलाव करने का अनुभव हाइलाइट करना, कोड पू��ा करना, और एलानों पर नेविगेट करना. ज़्यादा जानने के लिए, देखें Gredle Kotlin DSL Primer.

सामान्य शब्द

Kotlin DSL: इसका मतलब है मुख्य रूप से Android Gradle प्लग इन Kotlin DSL या, कभी-कभी इसमें Gradle Kotlin DSL शामिल है.

माइ��्रेशन गाइड में, "Kotlin" और "Kotlin DSL" इनका इस्तेमाल एक-दूसरे की जगह पर किया जाता है. इसी तरह, "ग्रूवी" और "ग्रूवी डीएसएल" इनका इस्तेमाल एक-दूसरे की जगह पर किया जाता है.

स्क्रिप्ट फ़ाइल को नाम देना

स्क्रिप्ट फ़ाइल एक्सटेंशन के नाम, बिल्ड फ़ाइल की भाषा के हिसाब से तय होते हैं इसमें:

  • ग्रूवी में लिखी गई Gradle बिल्ड फ़ाइलें, .gradle फ़ाइल के नाम का एक्सटेंशन इस्तेमाल करती हैं.
  • Kotlin में लिखी गई Gradle बिल्ड फ़ाइलें .gradle.kts फ़ाइल नाम का इस्तेमाल करती हैं एक्सटेंशन चुनें.

सिंटैक्स को बदलना

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

तरीके से जुड़े कॉल में ब्रैकेट जोड़ें

ग्रूवी की मदद से, मेथड कॉल में ब्रैकेट को छोड़ा जा सकता है, जबकि Kotlin को उन्हें. अपने कॉन्फ़िगरेशन को माइग्रेट करने के लिए, इस तरह के ब्रैकेट में ब्रैकेट जोड़ें मेथड कॉल शामिल नहीं हैं. यह कोड, Groovy पर सेटिंग कॉन्फ़िगर करने का तरीका बताता है:

compileSdkVersion 30

यह वही कोड है जो Kotlin में लिखा है:

compileSdkVersion(30)

= को असाइनमेंट कॉल में जोड़ें

अच्छे DSL से आपको असाइनमेंट ऑपरेटर = को छोड़ने की सुविधा मिलती है, जब प्रॉपर्टी असाइन करता है, जबकि Kotlin को इसकी ज़रूरत होती है. इस कोड में बताया गया है कि ग्रूवी में प्रॉपर्टी असाइन करें:

java {
    sourceCompatibility JavaVersion.VERSION_17
    targetCompatibility JavaVersion.VERSION_17
}

यह कोड ��ताता है कि Kotlin में प्रॉपर्टी कैसे असाइन करें:

java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

स्ट्रिंग बदलें

यहां ग्रूवी और Kotlin के बीच के अंतर दिए गए हैं:

  • स्ट्रिंग के लिए डबल कोट: Groovy, सिंगल कोट का इस्तेमाल करके स्ट्रिंग तय करने की सुविधा देता है, जबकि Kotlin की ज़रूरत डबल कोट का इस्तेमाल करें.
  • डॉट एक्सप्रेशन पर स्ट्रिंग इंटरपोलेशन: ग्रूवी में, इसका इस्तेमाल किया जा सकता है इसके लिए बस $ प्रीफ़िक्स है स्ट्रिंग इंटरपोलेशन का इस्तेमाल किया जा सकता है, लेकिन Kotlin के लिए यह ज़रूरी है कि आप डॉट वाले एक्सप्रेशन को कर्ली ब्रैकेट के साथ रैप करें. उदाहरण के लिए, Graovy में इस्तेमाल किया जा सकता है $project.rootDir, जैसा कि इस स्निपेट में दिखाया गया है:

        myRootDirectory = "$project.rootDir/tools/proguard-rules-debug.pro"
        

    हालांकि, Kotlin में पिछला कोड, toString() को project, project.rootDir पर नहीं. कन्वर्ज़न वैल्यू हासिल करने के लिए रूट डायरेक्ट्री की वैल्यू के तौर पर, ${project.rootDir} एक्सप्रेशन को रैप करें कर्ली ब्रेसेस के साथ:

        myRootDirectory = "${project.rootDir}/tools/proguard-rules-debug.pro"
        

    इस बारे में ज़्यादा जानने के लिए, यह देखें स्ट्रिंग टेंप्लेट Kotlin दस्तावेज़ में.

फ़ाइल एक्सटेंशन का नाम बदलें

बिल्ड फ़ाइल का कॉन्टेंट माइग्रेट करते समय, उसमें .kts जोड़ें. उदाहरण के लिए, कोई बिल्ड फ़ाइल चुनें, जैसे कि settings.gradle फ़ाइल. फ़ाइल का नाम बदलकर यह करें: settings.gradle.kts पर जाएं और फ़ाइल के कॉन्टेंट को Kotlin में बदलें. पक्का करें कि हर बिल्ड फ़ाइल के माइग्रेशन के बाद भी प्रोजेक्ट को कंपाइल किया जाता है.

सबसे पहले अपनी छोटी से छोटी फ़ाइलों को माइग्रेट करें, बेहतर अनुभव पाएं, और फिर आगे बढ़ें. आप आपके पास किसी प्रोजेक्ट में Kotlin और Groovy बिल्ड फ़ाइलें मौजूद हो��ी हैं. इसलिए, इन फ़ाइलों को डाउनलोड करने में थोड़ा समय लें करते हैं.

def को val या var से बदलें

def को val या var से बदलें, जो कि Kotlin की मदद से वैरिएबल तय करने का तरीका. यह Grovy में एक वैरिएबल घोषणा है:

def building64Bit = false

यह वही कोड है जो Kotlin में लिखा है:

val building64Bit = false

बूलियन प्रॉपर्टी के शुरू में is लगाएं

अच्छा बनाया गया, प्रॉपर्टी में कटौती के लॉजिक का इस्तेमाल करता है जो प्रॉपर्टी के नाम से तय होते हैं. बूलियन प्रॉपर्टी foo के लिए, इसके घटने के तरीके यह getFoo, setFoo या isFoo हो सकता है. इसलिए, एक बार Kotlin में बदला गया, आपको प्रॉपर्टी के नामों को कम किए गए तरीकों मे�� बदलना होगा जो Kotlin के साथ काम नहीं करते हैं. उदाहरण के लिए, buildTypes डीएसएल बूलियन एलिमेंट, तो आपको उनकी शुरुआत is में करनी होगी. यह कोड ग्रूवी में बूलियन प्रॉपर्टी सेट करने का तरीका दिखाता है:

android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            ...
        }
        debug {
            debuggable true
            ...
        }
    ...

नीचे दिया गया कोड Kotlin में है. ध्यान दें कि प्रॉपर्टी प्रीफ़िक्स लगी हैं is ने बनाया.

android {
    buildTypes {
        getByName("release") {
            isMinifyEnabled = true
            isShrinkResources = true
            ...
        }
        getByName("debug") {
            isDebuggable = true
            ...
        }
    ...

सूचियों और मैप को बदलें

ग्रूवी और Kotlin में सूचियों और मैप को अलग-अलग सिंटैक्स का इस्तेमाल करके तय किया जाता है. ग्रूवी [] का इस्तेमाल करता है, जबकि Kotlin में कलेक्शन बनाने के तरीकों को साफ़ तौर पर कॉल किया जाता है listOf या mapOf. [] को listOf या mapOf से बदलना �� भूलें. ऐसा तब करें, जब माइग्रेट हो रहा है.

यहां ग्रूवी बनाम Kotlin में लिस्ट बनाने का तरीका बताया गया है:

jvmOptions += ["-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError</code>"]

यह वही कोड है जो Kotlin में लिखा है:

jvmOptions += listOf("-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError")

यहां बताया गया है कि ग्रूवी बनाम Kotlin में मैप कैसे तय करें:

def myMap = [key1: 'value1', key2: 'value2']

यह वही कोड है जो Kotlin में लिखा है:

val myMap = mapOf("key1" to "value1", "key2" to "value2")

बिल्ड टाइप कॉन्फ़िगर करें

Kotlin DSL में सिर्फ़ डीबग और रिलीज़ बिल्ड टाइप उपलब्ध हैं और ज़ाहिर हो सकता है. अन्य सभी कस्टम बिल्ड टाइप को मैन्युअल तरीके से बनाया जाना चाहिए.

Graovy में डीबग, रिलीज़, और कुछ अन्य बिल्ड टाइप इस्तेमाल किए जा सकते हैं तो उन्हें सबसे पहले बनाया जा सकता है. नीचे दिया गया कोड स्निपेट, debug, release, और benchmark बिल्ड टाइप करते हैं.

buildTypes {
 debug {
   ...
 }
 release {
   ...
 }
 benchmark {
   ...
 }
}

Kotlin में एक जैसा कॉन्फ़िगरेशन बनाने के लिए, आपको साफ़ तौर पर, benchmark बिल्ड टाइप.

buildTypes {
 debug {
   ...
 }

 release {
   ...
 }
 register("benchmark") {
    ...
 }
}

बिल्डस्क्रिप्ट से प्लगिन ब्लॉक पर माइग्रेट करें

अगर आपका बिल्ड buildscript {} ब्लॉक करने के लिए, आपको plugins {} ब्लॉक करें. plugins {} ब्लॉक की मदद से, प्लगिन लागू करना आसान हो जाता है और यह इनके साथ ठीक से काम करता है वर्शन कैटलॉग.

इसके अलावा, जब बिल्ड फ़ाइलों में plugins {} ब्लॉक का इस्तेमाल किया जाता है, Android Studio को ऐप्लिकेशन के बिल्ड के काम न करने पर भी कॉन्टेक्स्ट का पता होता है. यह कॉन्टेक्स्ट यह आपकी Kotlin DSL फ़ाइलों को ठीक करने में मदद करता है, क्य��ंकि इससे Studio IDE को कोड पूरा करें और अन्य उपयोगी सुझाव दें.

प्लग इन आईडी ढूंढें

buildscript {} ब्लॉक, बिल्ड क्लासपाथ में प्लगिन जोड़ता है. इसके लिए, यह Maven कोऑर्डिनेट उदाहरण के लिए, com.android.tools.build:gradle:7.4.0, plugins {} ब्लॉक के बजाय प्लगिन आईडी का इस्तेमाल करता है.

ज़्यादातर प्लगिन के लिए, प्लगिन आईडी वह स्ट्रिंग होती है जिसका इस्तेमाल करके, उन्हें लागू किया जाता है apply plugin. उदाहरण के लिए, नीचे दिए गए प्लगिन आईडी Android Gradle प्लग इन:

  • com.android.application
  • com.android.library
  • com.android.lint
  • com.android.test

आपको यहां प्लगिन की पूरी सूची मिलेगी: Google Maven रिपॉज़िटरी.

Kotlin प्लगिन का रेफ़रंस एक से ज़्यादा प्लगिन आईडी के साथ दिया जा सकता है. हमारा सुझाव है कि आप नेमस्पेस किए गए प्लगिन आईडी का इस्तेमाल करके, उसे शॉर्टहैंड से लेकर नेमस्पेस किए गए प्लगिन आईडी में रीफ़ैक्टर किया जाता है निम्न तालिका:

शॉर्टहैंड प्लगिन आईडी नेमस्पेस किए गए प्लगिन आईडी
kotlin org.jetbrains.kotlin.jvm
kotlin-android org.jetbrains.kotlin.android
kotlin-kapt org.jetbrains.kotlin.kapt
kotlin-parcelize org.jetbrains.kotlin.plugin.parcelize

आप यहां भी प्लगिन खोज सकते हैं Gradle प्लग इन पोर्टल, Maven सेंट्रल रिपॉज़िटरी और Google Maven रिपॉज़िटरी. मैसेज पढ़ा गया कस्टम ग्रेडल प्लगिन डेवलप करना देखें.

रीफ़ैक्टरिंग का काम करें

इस्तेमाल किए जाने वाले प्लगिन के आईडी जानने के बाद, यह तरीका अपनाएं:

  1. अगर buildscript {} में एलान किए गए प्लगिन के लिए, आपके पास अब भी डेटा स्टोर करने की जगह है ब्लॉक करें, उन्हें settings.gradle में ले जाएं फ़ाइल का इस्तेमाल करें.

  2. टॉप-लेवल में मौजूद plugins {} ब्लॉक में प्लगिन जोड़ें build.gradle फ़ाइल. आपको आईडी और प्लगिन का संस्करण यहां दिया गया है. अगर प्लगिन को ज़रूरत न हो रूट प्रोजेक्ट पर लागू करने के लिए, apply false का इस्तेमाल करें.

  3. टॉप-लेवल की build.gradle.kts फ़ाइल से classpath एंट्री हटाएं.

  4. प्लग इन को लागू करने के लिए, उन्हें यहां दिए गए plugins {} ब्लॉक में जोड़ें मॉड्यूल-लेवल की build.gradle फ़ाइल. आपको केवल प्लग इन की यहां आईडी डालें, क्योंकि वर्शन को रूट प्रोजेक्ट से इनहेरिट किया गया है.

  5. मॉड्यूल-लेवल से प्लगिन के लिए, apply plugin कॉल को हटाएं build.gradle फ़ाइल.

उदाहरण के लिए, यह सेटअप buildscript {} ब्लॉक का इस्तेमाल करता है:

// Top-level build.gradle file
buildscript {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
    dependencies {
        classpath("com.android.tools.build:gradle:7.4.0")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0")
        ...
    }
}

// Module-level build.gradle file
apply(plugin: "com.android.application")
apply(plugin: "kotlin-android")

इस तरह का सेटअप, plugins {} ब्लॉक का इस्तेमाल करके किया जाता है:

// Top-level build.gradle file
plugins {
   id 'com.android.application' version '7.4.0' apply false
   id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
   ...
}

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

// settings.gradle
pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

प्लगिन ��्लॉक को बदलें

plugins {} ब्लॉक से प्लगिन लागू करना, Groovy और Kotlin में एक जैसा होता है. नीचे दिया गया कोड यह दिखाता है कि जब आप वर्शन कैटलॉग:

// Top-level build.gradle file
plugins {
   alias libs.plugins.android.application apply false
   ...
}

// Module-level build.gradle file
plugins {
   alias libs.plugins.android.application
   ...
}

इस कोड से यह पता चलता है कि Kotlin में ऐसा ही कैसे किया जा सकता है:

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

// Module-level build.gradle.kts file
plugins {
   alias(libs.plugins.android.application)
   ...
}

नीचे दिया गया कोड यह बताता है कि जब आप नहीं हैं, तब भी ग्रूवी में प्लगिन कैसे लागू करें वर्शन कैटलॉग का इस्तेमाल करके:

// Top-level build.gradle file
plugins {
   id 'com.android.application' version '7.3.0' apply false
   ...
}

// Module-level build.gradle file
plugins {
   id 'com.android.application'
   ...
}

इस कोड से यह पता चलता है कि Kotlin में ऐसा ही कैसे किया जा सकता है:

// Top-level build.gradle.kts file
plugins {
   id("com.android.application") version "7.3.0" apply false
   ...
}

// Module-level build.gradle.kts file
plugins {
   id("com.android.application")
   ...
}

plugins {} ब्लॉक के बारे में ज़्यादा जानकारी के लिए, लागू करना देखें प्लगिन Gradle दस्तावेज़ में देखा जा सकता है.

अन्य चीज़ें

अन्य फ़ंक्शन के Kotlin कोड के सैंपल के लिए, नीचे दी गई जानकारी देखें दस्तावेज़ पेज:

पहले से मालूम समस्याएं

फ़िलहाल, एक जानी-पहचानी समस्या इसका मतलब है कि Kotlin के साथ बिल्ड की स्पीड धीमी हो सकती है, ग्रूवी के मुकाबले.

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

आपकी समस्या को प्राथमिकता के हिसाब से निपटाने के लिए, हमें जो जानकारी चाहिए उसे कैसे उपलब्ध कराएं, यह जानने के लिए देखें बिल्ड टूल और Gradle बग की जानकारी. इसके बाद, Google की मदद से गड़बड़ी की शिकायत करो समस्याओं को ट्रैक करने वाला सार्वजनिक टूल.

ज़्यादा संसाधन

Kotlin के साथ लिखी गई Gradle बिल्ड फ़ाइलों के काम करने का उदाहरण, देखें अब Android में, सैंपल ऐप्लिकेशन GitHub पर.