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

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

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

नई सुविधाएं

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

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

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

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

// 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 साइनिंग की मदद से ADB का इस्तेमाल करके, बड़े APK को तेज़ी से डिप्लॉय किया जा सकता है में इंक्रीमेंटल APK इंस्टॉलेशन Android 11. यह नया फ़्लैग, डिप्लॉयमेंट में APK साइनिंग चरण का ध्यान रखता है प्रोसेस.

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

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

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

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

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

gradle.property
android.native.buildOutput=verbose

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

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

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

एजीपी 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 बंडल की सुविधा उपलब्ध है. चलाने के लिए नए बंडल किए गए JDK का इस्तेमाल करते समय Gradle, तो इसकी वजह से जेवीएम की परफ़ॉर्मेंस पर असर पड़ सकता है या साथ काम नहीं कर सकता कचरा इकट्ठा करने वाले टूल में बदलाव किए जाने की वजह से. इन समस्याओं के बारे में नीचे बताया गया है.

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

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

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

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, अब minSdk = 28 या उच्च. इससे APK का साइज़ बढ़ जाता है, लेकिन इसका असर कम होता है और डाउनलोड साइज़ करीब-करीब उतना ही है.

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

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

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

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

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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