Android Gradle प्लग इन 8.0.0 एक बड़ी रिलीज़ है. इसमें कई नई सुविधाएं और सुधार शामिल हैं.
इनके साथ काम करता है
कम से कम वर्शन | डिफ़ॉल्ट वर्शन | नोट | |
---|---|---|---|
Gradle | 8.0 | 8.0 | ज़्यादा जानने के लिए, Gradle को अपडेट करना लेख पढ़ें. |
SDK टूल के लिए बिल्ड टूल | 30.0.3 | 30.0.3 | SDK Build Tools को इंस्टॉल या कॉन्फ़िगर करें. |
एनडीके | लागू नहीं | 25.1.8937393 | NDK का कोई दूसरा वर्शन इंस्टॉल या कॉन्फ़िगर करें. |
JDK | 17 | 17 | ज़्यादा जानने के लिए, JDK वर्शन सेट करना लेख पढ़ें. |
पैच रिलीज़
यहां 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 नहीं है"
|
|
markTypeAsLive AGP 7.4.1 में R8 NullPointerException
|
|
[R8 4.0.53] Android 11 पर, हार्ड क्लास की पुष्टि नहीं हो सकी
|
अहम बदलाव: मॉड्यूल-लेवल की बिल्ड स्क्रिप्ट में नेमस्पेस ज़रूरी है
आपको मेनिफ़ेस्ट फ़ाइल के बजाय, मॉड्यूल-लेवल build.gradle.kts
फ़ाइल में नेमस्पेस सेट करना होगा. AGP 7.3 से, namespace
DSL प्रॉपर्टी का इस्तेमाल शुरू किया जा सकता है. ज़्यादा जानने के लिए, नेमस्पेस सेट करना लेख पढ़ें.
नेमस्पेस डीएसएल पर माइग्रेट करते समय, इन समस्याओं का ध्यान रखें:
- AGP के पिछले वर्शन, कुछ मामलों में मुख्य नेमस्पेस या ऐप्लिकेशन आईडी से, टेस्ट नेमस्पेस का अनुमान गलत तरीके से लगाते हैं. अगर AGP Upgrade Assistant को पता चलता है कि आपके प्रोजेक्ट का मुख्य नेमस्पेस और टेस्ट नेमस्पेस एक ही है, तो वह अपग्रेड को ब्लॉक कर देती है. अगर अपग्रेड ब्लॉक है, तो आपको
testNamespace
को मैन्युअल तरीके से बदलना होगा और अपने सोर्स कोड में उसी हिसाब से बदलाव करना होगा. - टेस्ट नेमस्पेस बदलने के बाद, हो सकता है कि आपका कोड इकट्ठा हो जाए, लेकिन रनटाइम के दौरान इंस्ट्रूमेंट किए गए टेस्ट काम न करें. ऐसा तब हो सकता है, जब आपके इंस्ट्रूमेंट किए गए टेस्ट सोर्स कोड में, आपके
androidTest
और ऐप्लिकेशन सोर्स, दोनों में बताए गए किसी रिसॉर्स का रेफ़रंस दिया गया हो.
ज़्यादा जानकारी के लिए, समस्या #191813691 की टिप्पणी #19 देखें.
अहम बदलाव: बिल्ड के विकल्प की डिफ़ॉल्ट वैल्यू
AGP 8.0 से, इन फ़्लैग की डिफ़ॉल्ट वैल्यू बदल गई हैं, ताकि बाइल्ड की परफ़ॉर्मेंस को बेहतर बनाया जा सके. इनमें से कुछ बदलावों के साथ काम करने के लिए, अपने कोड में बदलाव करने में मदद पाने के लिए, AGP Upgrade Assistant (टूल > AGP Upgrade Assistant) का इस्तेमाल करें. अपग्रेड असिस्टेंट, नए व्यवहार को शामिल करने के लिए कोड अपडेट करने या पिछले व्यवहार को बनाए रखने के लिए फ़्लैग सेट करने में आपकी मदद करता है.
चिह्नित करें | नई डिफ़ॉल्ट वैल्यू | पिछली डिफ़ॉल्ट वैल्यू | नोट |
---|---|---|---|
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
फ़ाइल में डाला है, तो वैल्यू को अनदेखा कर दिया जाता है और AGP चेतावनियां दिखाता है.
चिह्नित करें | लागू की गई वैल्यू | नोट |
---|---|---|
android.dependencyResolutionAtConfigurationTime.warn |
true |
अगर AGP 8.0 को कॉन्फ़िगरेशन के दौरान रिज़ॉल्यूशन का पता चलता है, तो वह एक चेतावनी देता है. ऐसा इसलिए होता है, क्योंकि इससे Gradle कॉन्फ़िगरेशन के समय पर बुरा असर पड़ता है. |
android.r8.failOnMissingClasses |
true |
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 में SDK टूल डिपेंडेंसी की जानकारी जोड़ने की सुविधा चालू होने पर, 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 में, बिल्ड ऐनालाइज़र में उन टास्क के लिए एक नया डिफ़ॉल्ट व्यू है जिनसे बिल्ड में लगने वाले समय पर असर पड़ता है. अगर आपका प्रोजेक्ट AGP 8.0 या इसके बाद के वर्शन का इस्तेमाल करता है, तो टास्क को अलग-अलग दिखाने के बजाय, बिल्ड विश्लेषक उन्हें कैटगरी के हिसाब से ग्रुप करता है. उदाहरण के लिए, 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 वर्शन को अपग्रेड करें. इसके लिए, JDK 17 की इंस्टॉलेशन डायरेक्ट्री में JAVA_HOME
एनवायरमेंट वैरिएबल
या -Dorg.gradle.java.home
कमांड-लाइन विकल्प सेट करें.
ठीक की गई समस्याएं
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) |
|