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

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

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

नई सुविधाएं

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

डिफ़ॉल्ट रूप से, Java भाषा का वर्शन 8

AGP 4.2 वर्शन से, डिफ़ॉल्ट रूप से Java 8 भाषा लेवल का इस्तेमाल किया जाएगा. Java 8, Lambda फ़ंक्शन के साथ-साथ कई नई भाषाओं की सुविधाओं का ऐक्सेस देता है एक्सप्रेशन, मेथड के रेफ़रंस, और स्टैटिक इंटरफ़ेस मेथड के ज़रिए बताया जाता है. काम करने वाली सुविधाओं की पूरी सूची के लिए, 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 मशीनों पर, बाइल्ड की परफ़ॉर्मेंस बेहतर हो सकती है. नया जेवीएम रिसॉर्स कंपाइलर की सुविधा डिफ़ॉल्ट रूप से चालू होती है.

अब 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 का इस्तेमाल करने वाले नेटिव बिल्ड से लिया जाता है, डिफ़ॉल्ट रूप से सिर्फ़ C/C++ कंपाइलर आउटपुट दिखाता है. पहले, बनाई गई हर फ़ाइल के लिए आउटपुट की एक लाइन जनरेट होती थी. इस वजह से, जानकारी देने वाले बहुत सारे मैसेज जनरेट होते थे.

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

इस प्रॉपर्टी को, gradle.properties फ़ाइल या कमांड लाइन लिखें.

gradle.properties
android.native.buildOutput=verbose

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

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

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

एजीपी 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). इस बदलाव में Gredle का नया तरीका और यह साथ काम करता है कॉन्फ़िगरेशन कैश मेमोरी

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

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

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

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

Studio पर Android की सुविधा Gradle प्लग इन (AGP)

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

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

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

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

org.gradle.jvmargs=-XX:+UseParallelGC

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

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

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

minSdk = 28 या उससे ज़्यादा होने पर, APK में मौजूद कंप्रेस नहीं की गई DEX फ़ाइलें

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

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

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

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

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

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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