Android Gradle प्लग इन 8.0.0 एक बड़ी रिलीज़ है. इसमें कई नई सुविधाएं और सुधार शामिल हैं.
इनके साथ काम करता है
कम से कम वर्शन | डिफ़ॉल्ट वर्शन | नोट | |
---|---|---|---|
ग्रेडल | 8.0 | 8.0 | ज़्यादा जानने के लिए, Gradle को अपडेट करना लेख पढ़ें. |
SDK टूल के लिए बिल्ड टूल | 30.0.3 | 30.0.3 | SDK बिल्ड टूल इंस्टॉल करें या कॉन्फ़िगर करें. |
एनडीके | लागू नहीं | 25.1.8937393 | एनडीके के किसी दूसरे वर्शन को इंस्टॉल करें या कॉन्फ़िगर करें. |
JDK | 17 | 17 | ज़्यादा जानने के लिए, JDK वर्शन सेट करना देखें. |
पैच रिलीज़
यहां Android Gradle प्लग इन के 8.0 वर्शन के लिए, पैच रिलीज़ की सूची दी गई है.
Android Gradle प्लग इन 8.0.2 (मई 2023)
एजीपी 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 अपग्रेड असिस्टेंट,
अगर इसे पता चलता है कि आपके प्रोजेक्ट का मुख्य नेमस्पेस और टेस्ट नेमस्पेस ये हैं
एक जैसा. अगर अपग्रेड ब्लॉक किया गया है, तो आपको मैन्युअल तरीके से
testNamespace
को बदलना होगा और अपने सोर्स कोड में बदलाव करें. - टेस्ट नेमस्पेस बदलने के बाद, हो सकता है कि आपका कोड कंपाइल हो जाए
लेकिन रनटाइम के दौरान, आपके इंस्ट्रुमेंटेड टेस्ट फ़ेल हो जाते हैं. ऐसा तब हो सकता है, जब आपके
इंस्ट्रुमेंट्ड टेस्ट सोर्स कोड एक ऐसे संसाधन का रेफ़रंस देता है जो आपके दोनों में
androidTest
और ऐप्लिकेशन के सोर्स.
ज़्यादा जानकारी के लिए, यह देखें समस्या #191813691 टिप्पणी #19.
नुकसान पहुंचा सकने वाले बदलाव: विकल्प के लिए डिफ़ॉल्ट वैल्यू बनाएं
AGP 8.0 से, इन फ़्लैग की डिफ़ॉल्ट वैल्यू बदल गई हैं, ताकि बाइल्ड की परफ़ॉर्मेंस को बेहतर बनाया जा सके. इनमें से कुछ बदलावों के साथ काम करने के लिए, अपने कोड में बदलाव करने में मदद पाने के लिए, AGP Upgrade Assistant (टूल > AGP Upgrade Assistant) का इस्तेमाल करें. Upgrade Assistant आपकी मदद करेगी नए व्यवहार के हिसाब से अपना कोड अपडेट करना या फ़्लैग करके सुरक्षा बढ़ाना पिछली कार्रवाई.
चिह्नित करें | नई डिफ़ॉल्ट वैल्यू | पिछली डिफ़ॉल्ट वैल्यू | नोट |
---|---|---|---|
android.defaults.buildfeatures.buildconfig |
false |
true |
AGP 8.0, डिफ़ॉल्ट रूप से BuildConfig जनरेट नहीं करता. आपको जिन प्रोजेक्ट में इस विकल्प की ज़रूरत है वहां डीएसएल का इस्तेमाल करके, इस विकल्प के बारे में बताना होगा. |
android.defaults.buildfeatures.aidl |
false |
true |
AGP 8.0, डिफ़ॉल्ट रूप से AIDL की सुविधा चालू नहीं करता. आपको यह बताना होगा इस विकल्प का इस्तेमाल करके उन प्रोजेक्ट में DSL का इस्तेमाल किया जा सकता है जहां आपको इसकी ज़रूरत है. इस फ़्लैग को 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 |
अगर एजीपी 8.0 को इस दौरान कॉन्फ़िगरेशन रिज़ॉल्यूशन का पता चलता है, तो इसके बारे में चेतावनी दिखती है कॉन्फ़िगरेशन का चरण पूरा कर सकता है, क्योंकि यह Gradle कॉन्फ़िगरेशन पर बुरा असर डालता है बार. |
android.r8.failOnMissingClasses |
true |
AGP 8.0 उस बिल्ड के लिए फ़ेल हो जाता है जो R8 का इस्तेमाल करता है. ऐसा तब होता है, जब कोई क्लास मौजूद नहीं होती है
पक्का करें कि DEX ऑप्टिमाइज़ेशन बेहतर हो. इसे ठीक करने के लिए, आपको
लाइब्रेरी मौजूद न हों या -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 बनाता है जिन्हें पब्लिश करने के लिए कॉन्फ़िगर किया गया है. |
एक्सीक्यूशन प्रोफ़ाइल के लिए नया स्टेबल फ़्लैग
एजीपी में नया झंडे android.settings.executionProfile
शामिल है. SettingsExtension
से, डिफ़ॉल्ट तौर पर लागू होने वाली प्रोफ़ाइल को बदलने के लिए, इस फ़्लैग का इस्तेमाल करें.
ज़्यादा जानने के लिए, सेटिंग प्लग इन का दस्तावेज़ देखें.
एक्सपेरिमेंटल फ़्लैग की झलक देखने के लिए, रिलीज़ की झलक देखें.
Kotlin में, लेज़ी प्रॉपर्टी असाइनमेंट की सुविधा काम नहीं करती
अगर बिल्ड स्क्रिप्ट के लिए Gradle का Kotlin DSL इस्तेमाल किया जा रहा है, तो ध्यान रखें कि Android
Studio और AGP 8.0,
=
ऑपरेटर. इस सुविधा के बारे में ज़्यादा जानकारी के लिए, यह देखें
प्रॉडक्ट की जानकारी
और
दस्तावेज़.
बिल्ड ऐनालाइज़र टास्क की कैटगरी
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"
}
}
डिफ़ॉल्ट प्रोफ़ाइल को ओवरराइड करने के लिए,
android.experimental.settings.executionProfile
प्रॉपर्टी
gradle.properties
फ़ाइल:
android.experimental.settings.executionProfile=high
इस प्रॉपर्टी को कमांड लाइन का इस्तेमाल करके भी सेट किया जा सकता है. इससे आपको
अलग-अलग वर्कफ़्लो को मैनेज किया जा सकता है. उदाहरण के लिए, अगर आपका इंटिग्रेशन लगातार चलता रहता है
तो आप बिना कमांड लाइन का इस्तेमाल करके, एक्ज़ीक्यूशन प्रोफ़ाइल बदल सकते हैं.
settings.gradle
फ़ाइल बदलें:
./gradlew assembleRelease \
-Pandroid.experimental.settings.executionProfile=ci
AGP 8.0 चलाने के लिए JDK 17 की ज़रूरत है
अपना ऐप्लिकेशन बनाने के लिए, Android Gradle प्लग इन 8.0 का इस्तेमाल करते समय, अब JDK 17 ज़रूरी है Gradle चलाने के लिए. Android Studio के फ़्लमिंगो में, JDK 17 को बंडल किया जाता है और Gradle को कॉन्फ़िगर किया जाता है इसे डिफ़ॉल्ट रूप से इस्तेमाल किया जा सकता है. इसका मतलब है कि Android Studio के ज़्यादातर उपयोगकर्ताओं को उनके प्रोजेक्ट के कॉन्फ़िगरेशन में कोई बदलाव होता है.
अगर आपको मैन्युअल तरीके से JDK वर्शन सेट करना है, तो का इस्तेमाल करता है, तो आपको JDK 17 या उसके बाद के वर्शन का इस्तेमाल करना होगा.
Android Studio के बिना AGP का इस्तेमाल करते समय, JDK वर्शन को अपग्रेड करें. इसके लिए, JDK 17 की इंस्टॉलेशन डायरेक्ट्री में JAVA_HOME
एनवायरमेंट वैरिएबल
या -Dorg.gradle.java.home
कमांड-लाइन विकल्प सेट करें.
ठीक की गई समस्याएं
'Android Gradle प्लग इन 8.0.0'
ठीक की गई समस्याएं | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Android Gradle प्लग इन |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
डेक्सर (D8) |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
लिंट |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lint इंटिग्रेशन |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Shrinker (R8) |
|
Android Gradle प्लग इन 8.0.1
ठीक की गई समस्याएं | ||||
---|---|---|---|---|
श्रिंकर (R8) |
|
'Android Gradle प्लग इन 8.0.2'
ठीक की गई समस्याएं | |||||
---|---|---|---|---|---|
Shrinker (R8) |
|