Android Gradle प्लगिन 8.0.0 एक मुख्य रिलीज़ है. इसमें कई नई सुविधाएं और सुधार शामिल हैं.
इनके साथ काम करता है
| सबसे पुराना वर्शन | डिफ़ॉल्ट वर्शन | नोट | |
|---|---|---|---|
| ग्रेडल | 8.0 | 8.0 | ज़्यादा जानकारी के लिए, Gradle को अपडेट करने का तरीका देखें. |
| SDK Build Tools | 30.0.3 | 30.0.3 | एसडीके बिल्ड टूल इंस्टॉल करें या कॉन्फ़िगर करें. |
| एनडीके (NDK) | लागू नहीं | 25.1.8937393 | एनडीके का कोई दूसरा वर्शन इंस्टॉल करें या कॉन्फ़िगर करें. |
| जेडीके | 17 | 17 | ज़्यादा जानने के लिए, जेडीके वर्शन सेट करना लेख पढ़ें. |
पैच रिलीज़
यहां Android Gradle प्लगिन 8.0 के लिए पैच रिलीज़ की सूची दी गई है.
Android Gradle प्लगिन 8.0.2 (मई 2023)
एजीपी 8.0.2 में ठीक की गई गड़बड़ियों की सूची देखने के लिए, Android Studio 2022.2.1 में ठीक की गई समस्याएं देखें.
Android Gradle प्लगिन 8.0.1 (मई 2023)
इस छोटे से अपडेट में, ये गड़बड़ियां ठीक की गई हैं:
| ठीक की गई समस्याएं | |
|---|---|
|
एजीपी 7.2.2 से 7.4.0 पर अपग्रेड करने के बाद, गड़बड़ी का यह मैसेज मिला: "टेबल में दिए गए आईडी के साथ कोई VersionRequirement नहीं है"
|
|
|
AGP 7.4.1 में markTypeAsLive पर R8 NullPointerException गड़बड़ी
|
|
|
[R8 4.0.53] Android 11 पर हार्ड क्लास की पुष्टि नहीं हो सकी
|
|
नुकसान पहुंचा सकने वाला बदलाव: मॉड्यूल-लेवल की बिल्ड स्क्रिप्ट में नेमस्पेस ज़रूरी है
आपको मेनिफ़ेस्ट फ़ाइल के बजाय, मॉड्यूल-लेवल की build.gradle.kts फ़ाइल में नेमस्पेस सेट करना होगा. AGP 7.3 या इसके बाद के वर्शन से, namespace डीएसएल प्रॉपर्टी का इस्तेमाल शुरू किया जा सकता है. ज़्यादा जानने के लिए, नेमस्पेस सेट करने का तरीका देखें.
नेमस्पेस डीएसएल पर माइग्रेट करते समय, इन समस्याओं का ध्यान रखें:
- एजीपी के पिछले वर्शन, कुछ मामलों में मुख्य नेमस्पेस या ऐप्लिकेशन आईडी से टेस्ट नेमस्पेस का गलत अनुमान लगाते हैं. अगर AGP अपग्रेड असिस्टेंट को पता चलता है कि आपके प्रोजेक्ट का मुख्य नेमस्पेस और टेस्ट नेमस्पेस एक ही है, तो वह अपग्रेड को ब्लॉक कर देता है. अगर अपग्रेड ब्लॉक है, तो आपको
testNamespaceको मैन्युअल तरीके से बदलना होगा. साथ ही, इसके हिसाब से अपने सोर्स कोड में बदलाव करना होगा. - टेस्ट नेमस्पेस बदलने के बाद, हो सकता है कि आपका कोड कंपाइल हो जाए, लेकिन रनटाइम के दौरान आपके इंस्ट्रुमेंटेड टेस्ट फ़ेल हो जाएं. ऐसा तब हो सकता है, जब आपके इंस्ट्रुमेंटेड टेस्ट सोर्स कोड में, आपके
androidTestऔर ऐप्लिकेशन सोर्स, दोनों में तय किए गए किसी संसाधन का रेफ़रंस दिया गया हो.
ज़्यादा जानकारी के लिए, समस्या #191813691 टिप्पणी #19 देखें.
नुकसान पहुंचा सकने वाले बदलाव: बिल्ड के विकल्प की डिफ़ॉल्ट वैल्यू
AGP 8.0 से, इन फ़्लैग की डिफ़ॉल्ट वैल्यू बदल गई हैं, ताकि बिल्ड की परफ़ॉर्मेंस को बेहतर बनाया जा सके. इनमें से कुछ बदलावों के साथ काम करने के लिए, अपने कोड में बदलाव करने से जुड़ी मदद पाने के लिए, AGP अपग्रेड असिस्टेंट (टूल > AGP अपग्रेड असिस्टेंट) का इस्तेमाल करें. अपग्रेड असिस्टेंट, नए व्यवहार के हिसाब से कोड को अपडेट करने या पिछले व्यवहार को बनाए रखने के लिए फ़्लैग सेट करने में आपकी मदद करता है.
| झंडा | नई डिफ़ॉल्ट वैल्यू | पिछली डिफ़ॉल्ट वैल्यू | नोट |
|---|---|---|---|
android.defaults.buildfeatures.buildconfig |
false |
true |
एजीपी 8.0, डिफ़ॉल्ट रूप से BuildConfig जनरेट नहीं करता. आपको जिन प्रोजेक्ट में इस विकल्प की ज़रूरत है उनमें डीएसएल का इस्तेमाल करके, इसे तय करना होगा. |
android.defaults.buildfeatures.aidl |
false |
true |
एजीपी 8.0 में, एआईडीएल की सुविधा डिफ़ॉल्ट रूप से चालू नहीं होती. आपको जिन प्रोजेक्ट में इस विकल्प की ज़रूरत है उनमें डीएसएल का इस्तेमाल करके, इस विकल्प को तय करना होगा. इस फ़्लैग को AGP 9.0 में हटा दिया जाएगा. |
android.defaults.buildfeatures.renderscript |
false |
true |
AGP 8.0 में, RenderScript की सुविधा डिफ़ॉल्ट रूप से चालू नहीं होती. आपको जिन प्रोजेक्ट में इस विकल्प की ज़रूरत है उनमें डीएसएल का इस्तेमाल करके, इस विकल्प को तय करना होगा. इस फ़्लैग को AGP 9.0 में हटा दिया जाएगा. |
android.nonFinalResIds |
true |
false |
AGP 8.0, डिफ़ॉल्ट रूप से नॉन-फ़ाइनल फ़ील्ड वाली R क्लास जनरेट करता है. |
android.nonTransitiveRClass |
true |
false |
AGP 8.0, सिर्फ़ मौजूदा मॉड्यूल में तय किए गए संसाधनों के लिए R क्लास जनरेट करता है. |
android.enableR8.fullMode |
true |
false |
AGP 8.0, R8 के फ़ुल मोड को डिफ़ॉल्ट रूप से चालू करता है. ज़्यादा जानकारी के लिए, R8 का फ़ुल मोड देखें. |
नुकसान पहुंचा सकने वाले बदलाव: लागू की गई बिल्ड विकल्प वैल्यू
AGP 8.0 से, इन फ़्लैग की वैल्यू नहीं बदली जा सकतीं. अगर इन्हें gradle.properties फ़ाइल में तय किया जाता है, तो वैल्यू को अनदेखा कर दिया जाता है और एजीपी चेतावनियां दिखाता है.
| झंडा | लागू की गई वैल्यू | नोट |
|---|---|---|
android.dependencyResolutionAtConfigurationTime.warn |
true |
अगर AGP 8.0 को कॉन्फ़िगरेशन के फ़ेज़ के दौरान कॉन्फ़िगरेशन रिज़ॉल्यूशन का पता चलता है, तो वह चेतावनी देता है. ऐसा इसलिए होता है, क्योंकि इससे Gradle कॉन्फ़िगरेशन के समय पर बुरा असर पड़ता है. |
android.r8.failOnMissingClasses |
true |
अगर DEX को बेहतर तरीके से ऑप्टिमाइज़ करने के लिए ज़रूरी क्लास मौजूद नहीं हैं, तो AGP 8.0 उन बिल्ड को फ़ेल कर देता है जो R8 का इस्तेमाल करते हैं. इसे ठीक करने के लिए, आपको मौजूद नहीं होने वाली लाइब्रेरी या -dontwarn कीप नियम जोड़ने होंगे. ज़्यादा जानकारी के लिए,
R8 श्रिंकर में क्लास मौजूद न होने की चेतावनियां
देखें. |
android.testConfig.useRelativePath |
true |
यूनिट टेस्ट में Android के संसाधनों, ऐसेट, और मेनिफ़ेस्ट का इस्तेमाल करने की सुविधा चालू होने पर, AGP 8.0 एक test_config.properties फ़ाइल जनरेट करता है. इसमें सिर्फ़ रिलेटिव पाथ होते हैं. इससे यह पक्का होता है कि Android यूनिट टेस्ट, Gradle बिल्ड कैश मेमोरी का इस्तेमाल हमेशा कर सकें. |
android.useNewJarCreator |
true |
AGP, JAR फ़ाइलें बनाते समय Zipflinger लाइब्रेरी का इस्तेमाल करता है, ताकि बिल्ड की परफ़ॉर्मेंस को बेहतर बनाया जा सके. |
android.bundletool.includeRepositoriesInDependencyReport |
true |
AAB और APK में एसडीके टूल की डिपेंडेंसी की जानकारी जोड़ने की सुविधा चालू होने पर, AGP 8.0 इस जानकारी में प्रोजेक्ट रिपॉज़िटरी की सूची भी जोड़ता है. ज़्यादा जानने के लिए, Play Console के लिए डिपेंडेंसी की जानकारी देखें. |
android.enableArtProfiles |
true |
अब बेसलाइन प्रोफ़ाइलें हमेशा जनरेट होती हैं. ज़्यादा जानकारी के लिए, बेसलाइन प्रोफ़ाइलें देखें. |
android.enableNewResourceShrinker |
true |
डिफ़ॉल्ट रूप से, नए रिसॉर्स श्रिंकर का इस्तेमाल करें. संसाधन कम करने वाले नए टूल में, डाइनैमिक सुविधाओं के लिए सहायता शामिल है. |
android.enableSourceSetPathsMap |
true |
इसका इस्तेमाल, रिलेटिव रिसॉर्स पाथ मैपिंग की कंप्यूटिंग के लिए किया जाता है, ताकि Gradle बिल्ड ज़्यादातर अप-टू-डेट रहें. |
android.cacheCompileLibResources |
true |
कंपाइल की गई लाइब्रेरी के रिसॉर्स अब डिफ़ॉल्ट रूप से कैश मेमोरी में सेव किए जा सकते हैं. ऐसा इसलिए, क्योंकि Gradle, प्रोजेक्ट की जगह के हिसाब से रिसॉर्स फ़ाइलों को ट्रैक करता है. android.enableSourceSetPathsMap चालू होना ज़रूरी है. |
android.disableAutomaticComponentCreation |
true |
AGP 8.0, डिफ़ॉल्ट रूप से कोई SoftwareComponent नहीं बनाता. इसके बजाय, एजीपी सिर्फ़ उन वैरिएंट के लिए SoftwareComponents बनाता है जिन्हें पब्लिशिंग डीएसएल का इस्तेमाल करके पब्लिश करने के लिए कॉन्फ़िगर किया गया है. |
एग्ज़ीक्यूशन प्रोफ़ाइल के लिए नया स्टेबल फ़्लैग
एजीपी में नया फ़्लैग android.settings.executionProfile शामिल है. SettingsExtension से डिफ़ॉल्ट एक्ज़ीक्यूशन प्रोफ़ाइल को बदलने के लिए, इस फ़्लैग का इस्तेमाल करें. ज़्यादा जानने के लिए, सेटिंग प्लगिन का दस्तावेज़ देखें.
एक्सपेरिमेंट के तौर पर उपलब्ध फ़्लैग की झलक देखने के लिए, लॉन्च से पहले झलक देखने के लिए बनाए गए वर्शन के रिलीज़ नोट देखें.
Kotlin लेज़ी प्रॉपर्टी असाइनमेंट की सुविधा उपलब्ध नहीं है
अगर अपनी बिल्ड स्क्रिप्ट के लिए Gradle के Kotlin DSL का इस्तेमाल किया जा रहा है, तो ध्यान दें कि Android Studio और AGP 8.0, = ऑपरेटर का इस्तेमाल करके एक्सपेरिमेंट के तौर पर प्रॉपर्टी असाइन करने की सुविधा के साथ काम नहीं करते. इस सुविधा के बारे में ज़्यादा जानने के लिए, प्रॉडक्ट की जानकारी और दस्तावेज़ देखें.
Build Analyzer में टास्क की कैटगरी
Android Studio Flamingo से, Build Analyzer में उन टास्क के लिए एक नया डिफ़ॉल्ट व्यू उपलब्ध है जो बिल्ड की अवधि पर असर डालते हैं. अगर आपका प्रोजेक्ट AGP 8.0 या इसके बाद के वर्शन का इस्तेमाल करता है, तो Build Analyzer टास्क को अलग-अलग दिखाने के बजाय, उन्हें कैटगरी के हिसाब से ग्रुप करता है. उदाहरण के लिए, Android रिसॉर्स, Kotlin या Dexing से जुड़े टास्क को एक साथ ग्रुप किया जाता है. इसके बाद, उन्हें बिल्ड होने में लगने वाले समय के हिसाब से क्रम में लगाया जाता है. इससे आपको यह पता लगाने में मदद मिलती है कि किस कैटगरी का बिल्ड टाइम पर सबसे ज़्यादा असर पड़ता है. हर कैटगरी को बड़ा करने पर, उससे जुड़े टास्क की सूची दिखती है. टास्क को ग्रुप में न रखकर अलग-अलग दिखाने के लिए, इसके हिसाब से ग्रुप बनाएं ड्रॉप-डाउन का इस्तेमाल करें.

सेटिंग का नया प्लगिन
AGP 8.0.0-alpha09 में, सेटिंग का नया प्लगिन उपलब्ध है. सेटिंग प्लगिन की मदद से, ग्लोबल कॉन्फ़िगरेशन को एक ही जगह पर सेंट्रलाइज़ किया जा सकता है. ये कॉन्फ़िगरेशन, सभी मॉड्यूल पर लागू होते हैं. इसलिए, आपको कॉन्फ़िगरेशन को कई मॉड्यूल में कॉपी करके चिपकाने की ज़रूरत नहीं पड़ती. इसके अलावा, सेटिंग प्लग इन का इस्तेमाल करके, टूल एग्ज़ीक्यूशन प्रोफ़ाइलें बनाई जा सकती हैं. इसके अलावा, टूल को चलाने के लिए अलग-अलग निर्देश बनाए जा सकते हैं और उनके बीच स्विच किया जा सकता है.
सेटिंग प्लगिन का इस्तेमाल करने के लिए, settings.gradle फ़ाइल में प्लगिन लागू करें:
apply plugin 'com.android.settings'
ग्लोबल कॉन्फ़िगरेशन को एक ही जगह से मैनेज करना
ग्लोबल कॉन्फ़िगरेशन को कॉन्फ़िगर करने के लिए, settings.gradle फ़ाइल में नए android ब्लॉक का इस्तेमाल करें. यहां एक उदाहरण दिया गया है:
android {
compileSdk 31
minSdk 28
...
}
टूल को इस्तेमाल करने से जुड़ी प्रोफ़ाइलें
सेटिंग प्लग इन की मदद से, कुछ टूल के लिए एक्ज़ीक्यूशन प्रोफ़ाइलें भी बनाई जा सकती हैं. एक्ज़ीक्यूशन प्रोफ़ाइल से यह तय होता है कि कोई टूल कैसे चलाया जाए. एनवायरमेंट के हिसाब से, अलग-अलग एक्ज़ीक्यूशन प्रोफ़ाइलें चुनी जा सकती हैं. एग्ज़ीक्यूशन प्रोफ़ाइल में, किसी टूल के लिए जेवीएम आर्ग्युमेंट सेट किए जा सकते हैं. साथ ही, उसे अलग प्रोसेस में चलाने के लिए कॉन्फ़िगर किया जा सकता है. सिर्फ़ R8 टूल का इस्तेमाल किया जा सकता है.
एग्ज़ीक्यूशन प्रोफ़ाइलें बनाएं और settings.gradle फ़ाइल में डिफ़ॉल्ट एग्ज़ीक्यूशन प्रोफ़ाइल सेट करें, जैसा कि इस उदाहरण में दिखाया गया है:
android {
execution {
profiles {
high {
r8 {
jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
runInSeparateProcess true
}
}
low {
r8 {
jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
runInSeparateProcess true
}
}
ci {
r8.runInSeparateProcess false
}
}
defaultProfile "low"
}
}
डिफ़ॉल्ट प्रोफ़ाइल को बदलने के लिए, gradle.properties फ़ाइल में android.experimental.settings.executionProfile प्रॉपर्टी का इस्तेमाल करके कोई दूसरी प्रोफ़ाइल चुनें:
android.experimental.settings.executionProfile=high
इस प्रॉपर्टी को कमांड लाइन का इस्तेमाल करके भी सेट किया जा सकता है. इससे आपको अलग-अलग वर्कफ़्लो सेट अप करने की सुविधा मिलती है. उदाहरण के लिए, अगर आपके पास लगातार इंटिग्रेशन वाला वर्कफ़्लो है, तो settings.gradle फ़ाइल में बदलाव किए बिना, एक्ज़ीक्यूशन प्रोफ़ाइल को बदलने के लिए कमांड लाइन का इस्तेमाल किया जा सकता है:
./gradlew assembleRelease \
-Pandroid.experimental.settings.executionProfile=ci
AGP 8.0 को चलाने के लिए JDK 17 ज़रूरी है
अपने ऐप्लिकेशन को बनाने के लिए Android Gradle प्लगिन 8.0 का इस्तेमाल करते समय, Gradle को चलाने के लिए अब JDK 17 ज़रूरी है. Android Studio Flamingo में JDK 17 बंडल किया गया है. साथ ही, Gradle को डिफ़ॉल्ट रूप से इसका इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है. इसका मतलब है कि Android Studio का इस्तेमाल करने वाले ज़्यादातर लोगों को अपने प्रोजेक्ट के कॉन्फ़िगरेशन में कोई बदलाव करने की ज़रूरत नहीं है.
अगर आपको Android Studio में AGP के इस्तेमाल किए जाने वाले जेडीके वर्शन को मैन्युअल तरीके से सेट करना है, तो आपको जेडीके 17 या इसके बाद के वर्शन का इस्तेमाल करना होगा.
Android Studio के बिना एजीपी का इस्तेमाल करते समय, जेडीके वर्शन को अपग्रेड करें. इसके लिए, JAVA_HOME एनवायरमेंट वैरिएबल या -Dorg.gradle.java.home कमांड-लाइन विकल्प को जेडीके 17 की इंस्टॉलेशन डायरेक्ट्री पर सेट करें.
ठीक की गई समस्याएं
Android Gradle प्लगिन 8.0.2
| ठीक की गई समस्याएं | |||||
|---|---|---|---|---|---|
| Shrinker (R8) |
|
||||
Android Gradle प्लगिन 8.0.1
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Shrinker (R8) |
|
|||
Android Gradle प्लगिन 8.0.0
| ठीक की गई समस्याएं | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Android Gradle प्लगिन |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Dexer (D8) |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| लिंट |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| लिंट इंटिग्रेशन |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Shrinker (R8) |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||