'Android Gradle प्लग इन 8.0.0' एक मुख्य रिलीज़ है, जिसमें कई तरह के नए वर्शन शामिल हैं सुविधाओं और सुधारों के बारे में है.
इनके साथ काम करता है
कम से कम वर्शन | डिफ़ॉल्ट वर्शन | नोट | |
---|---|---|---|
ग्रेडल | 8.0 | 8.0 | ज़्यादा जानने के लिए, Gredle को अपडेट करना देखें. |
SDK टूल बनाने वाले टूल | 30.0.3 | 30.0.3 | SDK बिल्ड टूल इंस्टॉल करें या कॉन्फ़िगर करें. |
एनडीके | लागू नहीं | 25.1.8937393 | एनडीके के किसी दूसरे वर्शन को इंस्टॉल करें या कॉन्फ़िगर करें. |
जेडीके | 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)
इस छोटे अपडेट में ये गड़बड़ियां ठीक की गई हैं:
ठीक की गई समस्याएं | |
---|---|
गड़बड़ी: "टेबल में दिए गए आईडी के साथ, Version ब्लॉग की कोई ज़रूरत नहीं है" AGP 7.2.2 अपग्रेड करने के बाद -> 7.4.0
|
|
MarkTypeAsLive AGP 7.4.1 पर R8 NullPointerexception
|
|
[R8 4.0.53] Android 11 पर हार्ड क्लास की पुष्टि नहीं हो सकी
|
ब्रेकिंग बदलाव: मॉड्यूल लेवल की बिल्ड स्क्रिप्ट में नेमस्पेस ज़रूरी है
इसके बजाय, आपको मॉड्यूल लेवल की build.gradle.kts
फ़ाइल में नेमस्पेस सेट करना होगा
से ज़्यादा होने चाहिए. namespace
DSL प्रॉपर्टी का इस्तेमाल शुरू किया जा सकता है
की शुरुआत एजीपी 7.3 से हुई है. इस बारे में ज़्यादा जानने के लिए, यह देखें
नेमस्पेस सेट करें.
नेमस्पेस डीएसएल में माइग्रेट करते समय, इन समस्याओं के बारे में जानकारी रखें:
- एजीपी के पिछले वर्शन में, मुख्य नेमस्पेस से टेस्ट नेमस्पेस का अनुमान लगाया जाता है या
कुछ मामलों में गलत तरीके से भी ऐप्लिकेशन आईडी दर्ज करता है. AGP अपग्रेड असिस्टेंट,
अगर इसे पता चलता है कि आपके प्रोजेक्ट का मुख्य नेमस्पेस और टेस्ट नेमस्पेस ये हैं
एक जैसा. अगर अपग्रेड ब्लॉक किया गया है, तो आपको मैन्युअल तरीके से
testNamespace
को बदलना होगा और अपने सोर्स कोड में बदलाव करें. - टेस्ट नेमस्पेस बदलने के बाद, हो सकता है कि आपका कोड कंपाइल हो जाए
लेकिन रनटाइम के दौरान, आपके इंस्ट्रुमेंटेड टेस्ट फ़ेल हो जाते हैं. ऐसा तब हो सकता है, जब आपके
इंस्ट्रुमेंट्ड टेस्ट सोर्स कोड एक ऐसे संसाधन का रेफ़रंस देता है जो आपके दोनों में
androidTest
और ऐप्लिकेशन के सोर्स.
ज़्यादा जानकारी के लिए, यह देखें समस्या #191813691 टिप्पणी #19.
नुकसान पहुंचा सकने वाले बदलाव: विकल्प के लिए डिफ़ॉल्ट वैल्यू बनाएं
एजीपी 8.0 से शुरू करते हुए, इन फ़्लैग की डिफ़ॉल्ट वैल्यू बदलकर यह हो गई है बिल्ड की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. कुछ सुविधाओं का इस्तेमाल करने के लिए, अपने कोड को अडजस्ट करने में मदद पाने के लिए इन बदलावों के लिए, AGP Upgrade Assistant का इस्तेमाल करें (टूल > एजीपी अपग्रेड असिस्टेंट). Upgrade Assistant आपकी मदद करेगी नए व्यवहार के हिसाब से अपना कोड अपडेट करना या फ़्लैग करके सुरक्षा बढ़ाना पिछली कार्रवाई.
चिह्नित करें | नई डिफ़ॉल्ट वैल्यू | पिछली डिफ़ॉल्ट वैल्यू | नोट |
---|---|---|---|
android.defaults.buildfeatures.buildconfig |
false |
true |
AGP 8.0, डिफ़ॉल्ट रूप से BuildConfig जनरेट नहीं करता. आपको इनकी ज़रूरत होगी
का इस्तेमाल करें. |
android.defaults.buildfeatures.aidl |
false |
true |
AGP 8.0, डिफ़ॉल्ट रूप से एआईडीएल सपोर्ट को चालू नहीं करता. आपको यह बताना होगा इस विकल्प का इस्तेमाल करके उन प्रोजेक्ट में DSL का इस्तेमाल किया जा सकता है जहां आपको इसकी ज़रूरत है. यह फ़्लैग है AGP के 9.0 वर्शन में हटाए जाने की योजना है. |
android.defaults.buildfeatures.renderscript |
false |
true |
AGP 8.0 डिफ़ॉल्ट रूप से, RenderScript के साथ काम करने की सुविधा को चालू नहीं करता है. आपको ये काम करने होंगे इस विकल्प को उन प्रोजेक्ट में DSL का इस्तेमाल करके बताएं जहां आपको इसकी ज़रूरत है. यह 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 |
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 |
एएबी और APKs में, 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 |
एजीपी 8.0, डिफ़ॉल्ट रूप से कोई सॉफ़्टवेयर कॉम्पोनेंट नहीं बनाता है. इसके बजाय, AGP इन्हें बनाता है सॉफ़्टवेयर कॉम्पोनेंट सिर्फ़ उन वैरिएंट के लिए जिन्हें पब्लिश करने के लिए कॉन्फ़िगर किया गया है पब्लिशिंग DSL का उपयोग करके. |
एक्ज़ीक्यूशन प्रोफ़ाइल के लिए नया स्टेबल फ़्लैग
एजीपी में नया झंडे android.settings.executionProfile
शामिल है. इस फ़्लैग का इस्तेमाल इन कामों के लिए करें
यह नीति
SettingsExtension
.
ज़्यादा जानने के लिए, सेटिंग प्लगिन से जुड़ा दस्तावेज़ देखें.
एक्सपेरिमेंटल फ़्लैग की झलक देखने के लिए, रिलीज़ नोट की झलक देखें.
Kotlin लेज़ी प्रॉपर्टी असाइनमेंट काम नहीं करता है
अगर बिल्ड स्क्रिप्ट के लिए Gradle का Kotlin DSL इस्तेमाल किया जा रहा है, तो ध्यान रखें कि Android
Studio और AGP 8.0,
=
ऑपरेटर. इस सुविधा के बारे में ज़्यादा जानकारी के लिए, देखें
प्रॉडक्ट की जानकारी
और
दस्तावेज़.
बिल्ड ऐनालाइज़र टास्क की कैटगरी
Android Studio फ़्लमिंगो में शुरुआत की जा रही है. बिल्ड ऐनालाइज़र में इनके लिए एक नया डिफ़ॉल्ट व्यू जोड़ा गया है बिल्ड की अवधि पर असर डालने वाले टास्क हैं. अगर आपका प्रोजेक्ट AGP 8.0 या इसके बाद के वर्शन का इस्तेमाल करता है, बिल्ड को अलग-अलग दिखाने के बजाय, बिल्ड ऐनालाइज़र उन्हें टास्क के हिसाब से ग्रुप में बांटता है श्रेणी. उदाहरण के लिए, Android रिसॉर्स, Kotlin या Dexing से जुड़े टास्क इन्हें एक ग्रुप में रखा जाता है और फिर इन्हें बिल्ड की अवधि के हिसाब से क्रम में लगाया जाता है. इससे ये चीज़ें आसान हो जाती हैं यह जानें कि बिल्ड के समय पर किस कैटगरी का सबसे ज़्यादा असर पड़ता है. हर कैटगरी को बड़ा किया जा रहा है संबंधित टास्क की सूची दिखाता है. टास्क को अलग-अलग दिखाने के लिए, बिना ग्रुप किए, इसके हिसाब से ग्रुप करें ड्रॉप-डाउन का इस्तेमाल करें.
नया सेटिंग प्लगिन
AGP 8.0.0-alpha09 में नया सेटिंग प्लगिन उपलब्ध है. सेटिंग प्लगिन, ग्लोबल कॉन्फ़िगरेशन को एक ही जगह से मैनेज करता है. कॉन्फ़िगरेशन, जो सभी मॉड्यूल पर लागू होते हैं एक ही जगह पर, कॉन्फ़िगरेशन को कॉपी करके चिपकाने की ज़रूरत नहीं पड़ेगी मॉड्यूल देखें. इसके अलावा, टूल बनाने के लिए सेटिंग प्लगिन का इस्तेमाल किया जा सकता है एक्ज़िक्यूशन प्रोफ़ाइल या किसी टूल को चलाने के तरीके के बारे में अलग-अलग निर्देश, और उसके बीच स्विच कर सकता है.
सेटिंग प्लगिन का इस्तेमाल करने के लिए, settings.gradle
फ़ाइल में प्लगिन लागू करें:
apply plugin 'com.android.settings'
ग्लोबल कॉन्फ़िगरेशन को एक ही जगह से मैनेज करें
ग्लोबल कॉन्फ़िगरेशन को कॉन्फ़िगर करने के लिए, यहां नए android
ब्लॉक का इस्तेमाल करें:
settings.gradle
फ़ाइल. यहां एक उदाहरण दिया गया है:
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 वर्शन को इस तारीख तक अपग्रेड करें
JAVA_HOME
सेट कर रही हूँ
एनवायरमेंट वैरिएबल
या -Dorg.gradle.java.home
कमांड-लाइन का विकल्प
को आपकी JDK 17 इंस्टॉलेशन डायरेक्ट्री में सेव करना होगा.