Android Gradle प्लग इन 8.0.0 एक मुख्य रिलीज़ है. इसमें कई नई सुविधाएं और सुधार शामिल हैं.
इनके साथ काम करता है
कम से कम वर्शन | डिफ़ॉल्ट वर्शन | नोट | |
---|---|---|---|
Gradle | 8.0 | 8.0 | ज़्यादा जानने के लिए, Gradle को अपडेट करने का तरीका देखें. |
एसडीके बिल्ड टूल | 30.0.3 | 30.0.3 | एसडीके बिल्ड टूल इंस्टॉल करें या कॉन्फ़िगर करें. |
एनडीके | लागू नहीं | 25.1.8937393 | एनडीके का कोई दूसरा वर्शन इंस्टॉल करें या कॉन्फ़िगर करें. |
जेडीके | 17 | 17 | ज़्यादा जानने के लिए, जेडीके वर्शन सेट करना लेख पढ़ें. |
पैच रिलीज़
यहां Android Gradle प्लग इन 8.0 के लिए पैच रिलीज़ की सूची दी गई है.
Android Gradle प्लग इन 8.0.2 (मई 2023)
AGP 8.0.2 में ठीक की गई गड़बड़ियों की सूची देखने के लिए, Android Studio 2022.2.1 में ठीक की गई गड़बड़ियों पर जाएं.
Android Gradle प्लग इन 8.0.1 (मई 2023)
इस छोटे अपडेट में, इन गड़बड़ियों को ठीक किया गया है:
ठीक की गई समस्याएं | |
---|---|
गड़बड़ी: AGP 7.2.2 से 7.4.0 पर अपग्रेड करने के बाद, "टेबल में दिए गए आईडी के साथ कोई VersionRequirement नहीं है"
|
|
R8 NullPointerException at markTypeAsLive AGP 7.4.1
|
|
[R8 4.0.53] Android 11 पर क्लास की पुष्टि नहीं हो सकी
|
अहम बदलाव: मॉड्यूल-लेवल की बिल्ड स्क्रिप्ट में नेमस्पेस की ज़रूरत होगी
आपको मेनिफ़ेस्ट फ़ाइल के बजाय, मॉड्यूल-लेवल की build.gradle.kts
फ़ाइल में नेमस्पेस सेट करना होगा. AGP 7.3 या इसके बाद के वर्शन में, namespace
डीएसएल प्रॉपर्टी का इस्तेमाल किया जा सकता है. ज़्यादा जानने के लिए, नेमस्पेस सेट करने का तरीका देखें.
नेमसpace DSL पर माइग्रेट करते समय, इन समस्याओं के बारे में जानें:
- AGP के पिछले वर्शन में, कुछ मामलों में मुख्य नेमस्पेस या ऐप्लिकेशन आईडी से टेस्ट नेमस्पेस का अनुमान गलत तरीके से लगाया जाता है. अगर AGP अपग्रेड असिस्टेंट को पता चलता है कि आपके प्रोजेक्ट का मुख्य नेमस्पेस और टेस्ट नेमस्पेस एक ही है, तो वह अपग्रेड को ब्लॉक कर देता है. अगर अपग्रेड करने की सुविधा ब्लॉक कर दी गई है, तो आपको
testNamespace
को मैन्युअल तरीके से बदलना होगा और अपने सोर्स कोड में उसके हिसाब से बदलाव करना होगा. - टेस्ट नेमस्पेस बदलने के बाद, ऐसा हो सकता है कि आपका कोड कंपाइल हो जाए, लेकिन इंस्ट्रुमेंट की गई टेस्ट, रनटाइम में फ़ेल हो जाएं. ऐसा तब हो सकता है, जब आपके इंस्ट्रुमेंट किए गए टेस्ट के सोर्स कोड में,
androidTest
और ऐप्लिकेशन, दोनों सोर्स में तय किए गए किसी संसाधन का रेफ़रंस दिया गया हो.
ज़्यादा जानकारी के लिए, समस्या #191813691 टिप्पणी #19 देखें.
बदलावों के बारे में जानकारी: बिल्ड के विकल्प की डिफ़ॉल्ट वैल्यू
AGP 8.0 से, इन फ़्लैग की डिफ़ॉल्ट वैल्यू बदल गई हैं, ताकि बिल्ड की परफ़ॉर्मेंस को बेहतर बनाया जा सके. इनमें से कुछ बदलावों के साथ काम करने के लिए, अपने कोड में बदलाव करने से जुड़ी मदद पाने के लिए, AGP अपग्रेड असिस्टेंट (टूल > AGP अपग्रेड असिस्टेंट) का इस्तेमाल करें. अपग्रेड असिस्टेंट, नए व्यवहार के हिसाब से कोड को अपडेट करने या पिछले व्यवहार को बनाए रखने के लिए फ़्लैग सेट करने में आपकी मदद करती है.
चिह्नित करें | नई डिफ़ॉल्ट वैल्यू | पिछली डिफ़ॉल्ट वैल्यू | नोट |
---|---|---|---|
android.defaults.buildfeatures.buildconfig |
false |
true |
AGP 8.0, डिफ़ॉल्ट रूप से BuildConfig जनरेट नहीं करता है. आपको इस विकल्प को उन प्रोजेक्ट में डीएसएल का इस्तेमाल करके सेट करना होगा जहां इसकी ज़रूरत है. |
android.defaults.buildfeatures.aidl |
false |
true |
AGP 8.0 में, AIDL की सुविधा डिफ़ॉल्ट रूप से चालू नहीं होती. आपको इस विकल्प को उन प्रोजेक्ट में डीएसएल का इस्तेमाल करके सेट करना होगा जहां इसकी ज़रूरत है. इस फ़्लैग को 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 नहीं बनाता है. इसके बजाय, AGP सिर्फ़ उन वैरिएंट के लिए SoftwareComponents बनाता है जिन्हें पब्लिशिंग डीएसएल का इस्तेमाल करके पब्लिश करने के लिए कॉन्फ़िगर किया गया है. |
एक्ज़ीक्यूशन प्रोफ़ाइल के लिए नया स्टेबल फ़्लैग
AGP में नया फ़्लैग 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
...
}
टूल एक्ज़ीक्यूशन प्रोफ़ाइल
सेटिंग प्लगिन की मदद से, कुछ टूल के लिए एक्ज़ीक्यूशन प्रोफ़ाइलें भी बनाई जा सकती हैं. एक्ज़ीक्यूशन प्रोफ़ाइल से यह तय होता है कि टूल कैसे चलाया जाएगा. एनवायरमेंट के हिसाब से, अलग-अलग एक्ज़ीक्यूशन प्रोफ़ाइल चुनी जा सकती हैं. एक्ज़ीक्यूशन प्रोफ़ाइल में, किसी टूल के लिए JVM आर्ग्युमेंट सेट किए जा सकते हैं. साथ ही, इसे किसी अलग प्रोसेस में चलाने के लिए कॉन्फ़िगर किया जा सकता है. फ़िलहाल, सिर्फ़ 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 Plugin 8.0 का इस्तेमाल करके ऐप्लिकेशन बनाने के लिए, अब Gradle को चलाने के लिए JDK 17 की ज़रूरत होती है. Android Studio Flamingo में JDK 17 बंडल होता है. साथ ही, Gradle को डिफ़ॉल्ट रूप से इसका इस्तेमाल करने के लिए कॉन्फ़िगर किया जाता है. इसका मतलब है कि Android Studio के ज़्यादातर उपयोगकर्ताओं को अपने प्रोजेक्ट में कॉन्फ़िगरेशन से जुड़े कोई भी बदलाव करने की ज़रूरत नहीं होती.
अगर आपको Android Studio में AGP के लिए इस्तेमाल किए जाने वाले JDK वर्शन को मैन्युअल तरीके से सेट करना है, तो आपको JDK 17 या उसके बाद वाले वर्शन का इस्तेमाल करना होगा.
Android Studio से अलग AGP का इस्तेमाल करते समय, JDK के वर्शन को अपग्रेड करें. इसके लिए, JAVA_HOME
एनवायरमेंट वैरिएबल
या -Dorg.gradle.java.home
कमांड-लाइन विकल्प
को JDK 17 की इंस्टॉलेशन डायरेक्ट्री पर सेट करें.
ठीक की गई समस्याएं
Android Gradle प्लग इन 8.0.0
ठीक की गई समस्याएं | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Android Gradle प्लगिन |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Dexer (D8) |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lint |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lint इंटिग्रेशन |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Shrinker (R8) |
|
Android Gradle प्लग इन 8.0.1
ठीक की गई समस्याएं | ||||
---|---|---|---|---|
Shrinker (R8) |
|
Android Gradle प्लग इन 8.0.2
ठीक की गई समस्याएं | |||||
---|---|---|---|---|---|
Shrinker (R8) |
|