Android Gradle प्लग इन 4.2.0 (मार्च 2021)
इनके साथ काम करता है
कम से कम वर्शन | डिफ़ॉल्ट वर्शन | नोट | |
---|---|---|---|
Gradle | 6.7.1 | लागू नहीं | ज़्यादा जानने के लिए, Gradle को अपडेट करना लेख पढ़ें. |
SDK टूल के लिए बिल्ड टूल | 30.0.2 | 30.0.2 | SDK Build Tools को इंस्टॉल या कॉन्फ़िगर करें. |
एनडीके | लागू नहीं | 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
का इस्तेमाल करने वाले नेटिव बिल्ड से मैसेज फ़िल्टर करता है, ताकि बिल्ड आउटपुट में गड़बड़ी न हो. साथ ही, डिफ़ॉल्ट रूप से सिर्फ़ 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 के साथ चलाएं. हालांकि, 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 में किए गए इस अपडेट का असर, JVM के गार्बेज कलेक्टर के डिफ़ॉल्ट कॉन्फ़िगरेशन पर पड़ता है. इसकी वजह यह है कि 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 प्लग इन से कंप्रेस की गई नेटिव लाइब्रेरी को पैकेज कराना है, तो अपने ऐप्लिकेशन की build.gradle
फ़ाइल में useLegacyPackaging
को true
पर सेट करें:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
फ़्लैग useLegacyPackaging
, मेनिफ़ेस्ट एट्रिब्यूट extractNativeLibs
की जगह लेता है. ज़्यादा जानकारी के लिए, रिलीज़ नोट देखें
डिफ़ॉल्ट रूप से कंप्रेस नहीं की गई नेटिव लाइब्रेरी.