Android Gradle प्लग इन 4.2.0 (मार्च 2021)

इनके साथ काम करता है

कम से कम वर्शन डिफ़ॉल्ट वर्शन नोट
Gradle 6.7.1 लागू नहीं ज़्यादा जानने के लिए, Gradle को अपडेट करना लेख पढ़ें.
एसडीके बिल्ड टूल 30.0.2 30.0.2 एसडीके बिल्ड टूल इंस्टॉल करें या कॉन्फ़िगर करें.
एनडीके लागू नहीं 21.4.7075529 NDK का कोई दूसरा वर्शन इंस्टॉल करें या कॉन्फ़िगर करें.

नई सुविधाएं

Android Gradle प्लगिन के इस वर्शन में, ये नई सुविधाएं शामिल हैं.

Java भाषा का डिफ़ॉल्ट वर्शन 8

AGP के वर्शन 4.2 से, Java 8 के भाषा लेवल का इस्तेमाल डिफ़ॉल्ट रूप से किया जाएगा. Java 8 में, भाषा से जुड़ी कई नई सुविधाओं का ऐक्सेस मिलता है. इनमें लैम्डा एक्सप्रेशन, मेथड रेफ़रंस, और स्टैटिक इंटरफ़ेस मेथड शामिल हैं. इस्तेमाल की जा सकने वाली सुविधाओं की पूरी सूची देखने के लिए, Java 8 का दस्तावेज़ देखें.

अगर आपको पुराने वर्शन का इस्तेमाल करना है, तो अपने मॉड्यूल-लेवल की build.gradle.kts या build.gradle फ़ाइल में Java 7 के बारे में साफ़ तौर पर बताएं:

// build.gradle
android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}
// build.gradle.kts
android {
  ...
  compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}

नया जेवीएम रिसॉर्स कंपाइलर

Android Gradle प्लगिन 4.2 टूल में मौजूद नया JVM रिसॉर्स कंपाइलर, AAPT2 रिसॉर्स कंपाइलर के कुछ हिस्सों की जगह लेता है. इससे बिल्ड की परफ़ॉर्मेंस बेहतर हो सकती है. खास तौर पर, Windows मशीन पर. नया JVM रिसॉर्स कंपाइलर, डिफ़ॉल्ट रूप से चालू होता है.

अब v3 और v4 पर साइन इन किया जा सकता है

Android Gradle प्लग इन 4.2 में, अब APK v3 और APK v4 के साइनिंग फ़ॉर्मैट काम करते हैं. अपने बिल्ड में इनमें से किसी एक या दोनों फ़ॉर्मैट को चालू करने के लिए, अपने मॉड्यूल-लेवल build.gradle या build.gradle.kts फ़ाइल में ये प्रॉपर्टी जोड़ें:

// build.gradle
android {
  ...
  signingConfigs {
    config {
        ...
        enableV3Signing true
        enableV4Signing true
    }
  }
}
// build.gradle.kts
android {
  ...
  signingConfigs {
      config {
          ...
          enableV3Signing = true
          enableV4Signing = true
      }
  }
}

APK v4 साइनिंग की मदद से, Android 11 में ADB इंक्रीमेंटल APK इंस्टॉलेशन का इस्तेमाल करके, बड़े APK को तुरंत डिप्लॉय किया जा सकता है. यह नया फ़्लैग, डिप्लॉयमेंट प्रोसेस में APK साइन करने के चरण का ध्यान रखता है.

हर वैरिएंट के लिए ऐप्लिकेशन साइनिंग की सुविधा कॉन्फ़िगर करना

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

इस उदाहरण में, Kotlin या Groovy में onVariants() तरीके का इस्तेमाल करके, हर वैरिएंट के लिए ऐप्लिकेशन पर हस्ताक्षर करने की सुविधा सेट अप करने का तरीका बताया गया है:

androidComponents {
    onVariants(selector().withName("fooDebug"), {
        signingConfig.enableV1Signing.set(false)
        signingConfig.enableV2Signing.set(true)
    })

नई Gradle प्रॉपर्टी: android.native.buildOutput

बिल्ड आउटपुट में ज़्यादा जानकारी न दिखे, इसके लिए AGP 4.2, नेटिव बिल्ड से मिले मैसेज फ़िल्टर करता है. ये नेटिव बिल्ड, CMake और ndk-build का इस्तेमाल करते हैं. AGP 4.2 डिफ़ॉल्ट रूप से सिर्फ़ C/C++ कंपाइलर का आउटपुट दिखाता है. पहले, बनाई गई हर फ़ाइल के लिए आउटपुट की एक लाइन जनरेट होती थी. इससे सूचना वाले मैसेज की संख्या बहुत ज़्यादा हो जाती थी.

अगर आपको पूरा नेटिव आउटपुट देखना है, तो नई Gradle प्रॉपर्टी android.native.buildOutput को verbose पर सेट करें.

इस प्रॉपर्टी को gradle.properties फ़ाइल में या कमांड लाइन के ज़रिए सेट किया जा सकता है.

gradle.properties
android.native.buildOutput=verbose

कमांड लाइन
-Pandroid.native.buildOutput=verbose

इस प्रॉपर्टी की डिफ़ॉल्ट वैल्यू quiet है.

gradle.properties फ़ाइलों के व्यवहार में बदलाव

AGP 4.2 से, सबप्रोजेक्ट से Gradle प्रॉपर्टी को अब बदला नहीं जा सकता. दूसरे शब्दों में कहें, तो अगर आपने रूट प्रोजेक्ट के बजाय किसी सबप्रोजेक्ट की gradle.properties फ़ाइल में कोई प्रॉपर्टी तय की है, तो उसे अनदेखा कर दिया जाएगा.

उदाहरण के लिए, पिछली रिलीज़ में AGP, <var>projectDir</var>/gradle.properties, <var>projectDir</var>/app/gradle.properties, <var>projectDir</var>/library/gradle.properties वगैरह से वैल्यू पढ़ता था. ऐप्लिकेशन मॉड्यूल के लिए, अगर एक ही Gradle प्रॉपर्टी <var>projectDir</var>/gradle.properties और <var>projectDir</var>/app/gradle.properties, दोनों में मौजूद होती थी, तो <var>projectDir</var>/app/gradle.properties से मिली वैल्यू को प्राथमिकता दी जाती थी.

AGP 4.2 में, इस व्यवहार को बदल दिया गया है.अब AGP, सबप्रोजेक्ट में gradle.properties से वैल्यू लोड नहीं करेगा. उदाहरण के लिए, <var>projectDir</var>/app/gradle.properties). यह बदलाव, Gradle के नए वर्शन के हिसाब से किया गया है. साथ ही, इसमें कॉन्फ़िगरेशन कैश मेमोरी की सुविधा काम करती है

gradle.properties फ़ाइलों में वैल्यू सेट करने के बारे में ज़्यादा जानकारी के लिए, Gradle के दस्तावेज़ देखें.

Gradle के साथ काम करने की सुविधा और कॉन्फ़िगरेशन में बदलाव

Android Studio में चलाने पर, Gradle बिल्ड टूल, Studio के बंडल किए गए JDK का इस्तेमाल करता है. पिछली रिलीज़ में, JDK 8 को Studio के साथ बंडल किया गया था. हालांकि, 4.2 में अब JDK 11 को बंडल किया गया है. Gradle को चलाने के लिए, बंडल किए गए नए JDK का इस्तेमाल करने पर, कुछ समस्याएं आ सकती हैं. इसके अलावा, गार्बेज कलेक्टर में हुए बदलावों की वजह से, JVM की परफ़ॉर्मेंस पर भी असर पड़ सकता है. इन समस्याओं के बारे में यहां बताया गया है.

ध्यान दें: हमारा सुझाव है कि Gradle को JDK 11 के साथ चलाया जाए. हालांकि, Project Structure डायलॉग में जाकर, Gradle को चलाने के लिए इस्तेमाल किए जाने वाले JDK को बदला जा सकता है. इस सेटिंग को बदलने से, Gradle को चलाने के लिए इस्तेमाल किया जाने वाला JDK ही बदलेगा. इससे Studio को चलाने के लिए इस्तेमाल किया जाने वाला JDK नहीं बदलेगा.

Android Gradle प्लग-इन (एजीपी) के साथ Studio की संगतता

Android Studio 4.2, AGP 3.1 और इसके बाद के वर्शन का इस्तेमाल करने वाले प्रोजेक्ट खोल सकता है. हालांकि, इसके लिए ज़रूरी है कि AGP, Gradle 4.8.1 और इसके बाद के वर्शन पर चल रहा हो. Gradle के साथ काम करने से जुड़ी ज़्यादा जानकारी के लिए, Gradle अपडेट करना लेख पढ़ें.

JDK 11 के लिए Gradle बिल्ड को ऑप्टिमाइज़ करना

JDK 11 के इस अपडेट का असर, JVM के डिफ़ॉल्ट कॉन्फ़िगरेशन पर पड़ता है. ऐसा इसलिए, क्योंकि JDK 8 पैरलल गार्बेज कलेक्टर का इस्तेमाल करता है, जबकि JDK 11 G1 गार्बेज कलेक्टर का इस्तेमाल करता है.

बिल्ड की परफ़ॉर्मेंस को बेहतर बनाने के लिए, हमारा सुझाव है कि पैरलल गार्बेज कलेक्टर की मदद से, अपने Gradle बिल्ड की जांच करें. gradle.properties में जाकर, ये सेट करें:

org.gradle.jvmargs=-XX:+UseParallelGC

अगर इस फ़ील्ड में पहले से ही अन्य विकल्प सेट हैं, तो नया विकल्प जोड़ें:

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

अलग-अलग कॉन्फ़िगरेशन के साथ बिल्ड स्पीड को मेज़र करने के लिए, अपने बिल्ड की प्रोफ़ाइल बनाएं लेख पढ़ें.

जब minSdk = 28 या इससे ज़्यादा हो, तब APK में DEX फ़ाइलें कंप्रेस नहीं की जाती हैं

AGP अब APK में DEX फ़ाइलों को डिफ़ॉल्ट रूप से बिना कंप्रेस किए पैकेज करता है. ऐसा तब होता है, जब minSdk = 28 या इससे ज़्यादा हो. इससे APK का साइज़ बढ़ जाता है. हालांकि, डिवाइस पर इंस्टॉल किए जाने वाले ऐप्लिकेशन का साइज़ कम हो जाता है. साथ ही, डाउनलोड किए जाने वाले ऐप्लिकेशन का साइज़ लगभग उतना ही रहता है.

AGP को कंप्रेस की गई DEX फ़ाइलों को पैकेज करने के लिए मजबूर करने के लिए, अपनी build.gradle फ़ाइल में यह कोड जोड़ें:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

कंप्रेस की गई नेटिव लाइब्रेरी को पैकेज करने के लिए, डीएसएल का इस्तेमाल करना

हमारा सुझाव है कि नेटिव लाइब्रेरी को बिना कंप्रेस किए पैकेज करें. ऐसा इसलिए, क्योंकि इससे आपके ऐप्लिकेशन का इंस्टॉल साइज़ और डाउनलोड साइज़ कम हो जाता है. साथ ही, उपयोगकर्ताओं के लिए ऐप्लिकेशन तेज़ी से लोड होता है. हालांकि, अगर आपको Android Gradle प्लगिन को अपने ऐप्लिकेशन को बनाते समय कंप्रेस की गई नेटिव लाइब्रेरी को पैकेज करने की अनुमति देनी है, तो अपने ऐप्लिकेशन की build.gradle फ़ाइल में useLegacyPackaging को true पर सेट करें:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

फ़्लैग useLegacyPackaging, मेनिफ़ेस्ट एट्रिब्यूट extractNativeLibs की जगह लेता है. ज़्यादा जानकारी के लिए, रिलीज़ नोट नेटिव लाइब्रेरी को डिफ़ॉल्ट रूप से कंप्रेस नहीं किया जाता है देखें.