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

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

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

नई सुविधाएं

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

डिफ़ॉल्ट रूप से Java लैंग्वेज का वर्शन 8

वर्शन 4.2 से, AGP डिफ़ॉल्ट रूप से 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 टूल में मौजूद, जेवीएम रिसॉर्स कंपाइलर, 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 Incremental 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++ कंपाइलर का आउटपुट दिखाता है.ndk-build पहले, हर फ़ाइल के लिए आउटपुट की एक लाइन जनरेट होती थी. इससे सूचना देने वाले मैसेज की संख्या बढ़ जाती थी.

अगर आपको नेटिव आउटपुट का पूरा हिस्सा देखना है, तो नई 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, वगैरह से वैल्यू पढ़ता था. ऐप्लिकेशन मॉड्यूल के लिए, अगर <var>projectDir</var>/gradle.properties और <var>projectDir</var>/app/gradle.properties दोनों में Gradle की एक ही प्रॉपर्टी मौजूद थी, तो <var>projectDir</var>/app/gradle.properties की वैल्यू को प्राथमिकता दी जाती थी.

AGP 4.2 में, इस व्यवहार को बदल दिया गया है. अब AGP, सबप्रोजेक्ट में मौजूद gradle.properties से वैल्यू लोड नहीं करेगा. जैसे, <var>projectDir</var>/app/gradle.properties). यह बदलाव, new Gradle behavior को दिखाता है. साथ ही, यह configuration caching की सुविधा के साथ काम करता है

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

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

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

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

Android Gradle प्लगिन (AGP) के साथ Studio की कंपैटबिलिटी

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 फ़ाइलें कंप्रेस नहीं की जातीं

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