इस पेज पर, Android Gradle प्लगिन (AGP) की प्रीव्यू रिलीज़ के लिए रिलीज़ नोट दिए गए हैं.
Android Gradle प्लगिन 9.0
Android Gradle प्लग इन 9.0, AGP का नया मेजर वर्शन है. इसमें एपीआई और व्यवहार से जुड़े बदलाव किए गए हैं.
Android Gradle प्लग इन 9.0.0-beta03 पर अपडेट करने के लिए, Android Studio Otter 3 Feature Drop | 2025.2.3 में Android Gradle प्लग इन अपग्रेड असिस्टेंट का इस्तेमाल करें.
AGP अपग्रेड असिस्टेंट, आपके प्रोजेक्ट को अपग्रेड करते समय मौजूदा व्यवहारों को बनाए रखने में मदद करता है. इससे आपको AGP 9.0 का इस्तेमाल करने के लिए, अपने प्रोजेक्ट को अपग्रेड करने की सुविधा मिलती है. भले ही, आप AGP 9.0 में सभी नए डिफ़ॉल्ट को अपनाने के लिए तैयार न हों.
इनके साथ काम करता है
Android Gradle प्लगिन 9.0.0-beta03, ज़्यादा से ज़्यादा Android के एपीआई लेवल 36 के साथ काम करता है.
Android Gradle प्लग इन 9.0.0-beta03 के लिए, Gradle 9.0.0 की ज़रूरत होती है.
| कम से कम वर्शन | डिफ़ॉल्ट वर्शन | नोट | |
|---|---|---|---|
| Gradle | 9.1.0 | 9.1.0 | ज़्यादा जानने के लिए, Gradle को अपडेट करने का तरीका देखें. |
| एसडीके बिल्ड टूल | 36.0.0 | 36.0.0 | एसडीके बिल्ड टूल इंस्टॉल करें या कॉन्फ़िगर करें. |
| NDK | लागू नहीं | 28.2.13676358 | एनडीके का कोई दूसरा वर्शन इंस्टॉल करें या कॉन्फ़िगर करें. |
| जेडीके | 17 | 17 | ज़्यादा जानने के लिए, जेडीके वर्शन सेट करना लेख पढ़ें. |
android डीएसएल क्लास अब सिर्फ़ नए सार्वजनिक इंटरफ़ेस लागू करती हैं
पिछले कुछ सालों में, हमने अपने डीएसएल और एपीआई के लिए नए इंटरफ़ेस लॉन्च किए हैं, ताकि यह बेहतर तरीके से कंट्रोल किया जा सके कि कौनसे एपीआई सार्वजनिक हैं. AGP के 7.x और 8.x वर्शन में, अब भी पुराने डीएसएल टाइप (उदाहरण के लिए, BaseExtension) का इस्तेमाल किया जाता है. इनमें नए सार्वजनिक इंटरफ़ेस भी लागू किए गए थे, ताकि इंटरफ़ेस पर काम जारी रहने के दौरान भी कंपैटिबिलिटी बनी रहे.
AGP 9.0 में, सिर्फ़ हमारे नए डीएसएल इंटरफ़ेस का इस्तेमाल किया जाता है. साथ ही, लागू करने के तरीके को नए टाइप में बदल दिया गया है, जो पूरी तरह से छिपे हुए हैं. इससे, काम न करने वाले पुराने वैरिएंट एपीआई का ऐक्सेस भी हट जाता है.
AGP 9.0 पर अपडेट करने के लिए, आपको ये काम करने पड़ सकते हैं:
- पक्का करें कि आपका प्रोजेक्ट, पहले से मौजूद
Kotlin के साथ काम करता हो:
org.jetbrains.kotlin.androidप्लगिन, नए डीएसएल के साथ काम नहीं करता. KMP प्रोजेक्ट को Android Gradle Library Plugin for KMP पर स्विच करें:
org.jetbrains.kotlin.multiplatformप्लगिन का इस्तेमाल,com.android.libraryऔरcom.android.applicationप्लगिन के साथ एक ही Gradle सबप्रोजेक्ट में नहीं किया जा सकता. यह नए डीएसएल के साथ काम नहीं करता.अपनी बिल्ड फ़ाइलें अपडेट करें: इंटरफ़ेस में बदलाव करने का मकसद, डीएसएल को ज़्यादा से ज़्यादा एक जैसा रखना है. हालांकि, कुछ छोटे बदलाव हो सकते हैं.
नए डीएसएल और एपीआई को रेफ़रंस करने के लिए, कस्टम बिल्ड लॉजिक अपडेट करें: इंटरनल डीएसएल के सभी रेफ़रंस को, सार्वजनिक डीएसएल इंटरफ़ेस से बदलें. ज़्यादातर मामलों में, यह एक-से-एक रिप्लेसमेंट होगा.
applicationVariantsऔर इसी तरह के अन्य एपीआई की जगह, नएandroidComponentsएपीआई का इस्तेमाल करें. यह प्रोसेस ज़्यादा मुश्किल हो सकती है, क्योंकिandroidComponentsAPI को ज़्यादा स्थिर बनाने के लिए डिज़ाइन किया गया है, ताकि प्लगिन लंबे समय तक काम कर सकें. उदाहरणों के लिए, हमारी Gradle Recipes देखें.तीसरे पक्ष के प्लगिन अपडेट करें: ऐसा हो सकता है कि तीसरे पक्ष के कुछ प्लगिन अब भी उन इंटरफ़ेस या एपीआई पर निर्भर हों जो अब उपलब्ध नहीं हैं. उन प्लगिन के ऐसे वर्शन पर माइग्रेट करें जो AGP 9.0 के साथ काम करते हैं.
नए डीएसएल इंटरफ़ेस पर स्विच करने से, प्लगिन और Gradle बिल्ड स्क्रिप्ट को इन एपीआई का इस्तेमाल करने से रोका जा सकता है:
android ब्लॉक में बंद किया गया एपीआई |
फ़ंक्शन | प्रतिस्थापन |
|---|---|---|
applicationVariants,libraryVariants,testVariants, औरunitTestVariants
|
AGP में नई सुविधाएं जोड़ने के लिए, प्लगिन के लिए एक्सटेंशन पॉइंट. |
इसे androidComponents.onVariants एपीआई से बदलें. उदाहरण के लिए:
androidComponents { onVariants() { variant -> variant.signingConfig .enableV1Signing.set(false) } } |
variantFilter
|
इस कुकी की मदद से, चुने गए वैरिएंट को बंद किया जा सकता है. |
इसे androidComponents.beforeVariants एपीआई से बदलें. उदाहरण के लिए:
androidComponents { beforeVariants( selector() .withBuildType("debug") .withFlavor("color", "blue") ) { variantBuilder -> variantBuilder.enable = false } } |
deviceProvider औरtestServer
|
Android डिवाइसों और एम्युलेटर पर टेस्ट चलाने के लिए, कस्टम टेस्ट एनवायरमेंट रजिस्टर करना. | Gradle मैनेज किए गए डिवाइसों पर स्विच करें. |
sdkDirectory,ndkDirectory,bootClasspath,adbExecutable, औरadbExe
|
कस्टम टास्क के लिए, Android SDK के अलग-अलग कॉम्पोनेंट का इस्तेमाल करना. |
androidComponents.sdkComponents पर स्विच करें.
|
registerArtifactType,registerBuildTypeSourceProvider,registerProductFlavorSourceProvider,registerJavaArtifact,registerMultiFlavorSourceProvider, औरwrapJavaSourceSet |
यह सुविधा अब काम नहीं करती. यह सुविधा, Android Studio में जनरेट किए गए सोर्स को हैंडल करने से जुड़ी है. यह AGP 7.2.0 में काम नहीं करती. | इन एपीआई के बदले कोई दूसरी सुविधा नहीं जोड़ी जा रही है. |
dexOptions
|
dx टूल से जुड़ी पुरानी सेटिंग. इस टूल को d8 से बदल दिया गया है. Android Gradle प्लगिन 7.0 के बाद से, किसी भी सेटिंग का कोई असर नहीं पड़ा है.
|
इसकी जगह सीधे तौर पर किसी दूसरे फ़ंक्शन का इस्तेमाल नहीं किया जा सकता. |
generatePureSplits
|
झटपट ऐप्लिकेशन के लिए कॉन्फ़िगरेशन स्प्लिट जनरेट करना. | कॉन्फ़िगरेशन स्प्लिट शिप करने की सुविधा, अब Android ऐप्लिकेशन बंडल में पहले से मौजूद है. |
aidlPackagedList
|
लाइब्रेरी के लिए एपीआई के तौर पर इसे उपलब्ध कराने के लिए, AAR में पैकेज करने के लिए AIDL फ़ाइलें. साथ ही, इस लाइब्रेरी पर निर्भर रहने वाले ऐप्लिकेशन. |
यह अब भी LibraryExtension पर दिखता है, लेकिन अन्य एक्सटेंशन टाइप पर नहीं.
|
अगर आपने AGP 9.0 पर अपडेट किया है और आपको गड़बड़ी का यह मैसेज दिखता है, तो इसका मतलब है कि आपका प्रोजेक्ट अब भी कुछ पुराने टाइप के रेफ़रंस दे रहा है:
java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension
अगर तीसरे पक्ष के ऐसे प्लगिन की वजह से आपको ब्लॉक किया गया है जो काम नहीं करते, तो आपके पास ऑप्ट आउट करने का विकल्प होता है. ऐसा करने पर, आपको डीएसएल के साथ-साथ पुराने वर्शन वाले एपीआई के लिए, पुराने तरीके से लागू किए गए कोड वापस मिल जाएंगे.
ऐसा करते समय, नए इंटरफ़ेस भी उपलब्ध होते हैं. साथ ही, आपके पास अब भी अपने बिल्ड लॉजिक को नए एपीआई में अपडेट करने का विकल्प होता है. ऑप्ट आउट करने के लिए, इस लाइन को अपनी gradle.properties फ़ाइल में शामिल करें:
android.newDsl=false
AGP 9.0 पर अपग्रेड करने से पहले, नए एपीआई पर अपग्रेड करना भी शुरू किया जा सकता है. नए इंटरफ़ेस, AGP के कई वर्शन में मौजूद हैं. इसलिए, आपके पास नए और पुराने इंटरफ़ेस का इस्तेमाल करने का विकल्प होता है. AGP API के रेफ़रंस दस्तावेज़ों में, AGP के हर वर्शन के लिए एपीआई सर्फ़ेस दिखाया गया है. साथ ही, यह भी बताया गया है कि हर क्लास, तरीका, और फ़ील्ड कब जोड़ा गया था.
हम 9.0 के ऐल्फ़ा फ़ेज़ के दौरान, प्लगिन बनाने वाले लोगों से संपर्क कर रहे हैं. इससे उन्हें ऐसे प्लगिन बनाने और रिलीज़ करने में मदद मिलेगी जो नए मोड के साथ पूरी तरह से काम करते हैं. साथ ही, हम Android Studio में AGP अपग्रेड असिस्टेंट को बेहतर बनाएंगे, ताकि आपको माइग्रेट करने में मदद मिल सके.
अगर आपको लगता है कि नए डीएसएल या वैरिएंट एपीआई में कुछ सुविधाएं या फ़ंक्शन मौजूद नहीं हैं, तो कृपया जल्द से जल्द समस्या की शिकायत करें.
Kotlin में पहले से मौजूद
Android Gradle प्लग इन 9.0 में, Kotlin के लिए पहले से मौजूद सहायता की सुविधा जोड़ी गई है. साथ ही, इसे डिफ़ॉल्ट रूप से चालू किया गया है. इसका मतलब है कि अब आपको Kotlin सोर्स फ़ाइलों को कंपाइल करने के लिए, अपनी बिल्ड फ़ाइलों में org.jetbrains.kotlin.android (या kotlin-android) प्लगिन लागू करने की ज़रूरत नहीं है.
इससे AGP के साथ Kotlin को इंटिग्रेट करना आसान हो जाता है. साथ ही, इससे बंद किए गए एपीआई का इस्तेमाल नहीं करना पड़ता और कुछ मामलों में परफ़ॉर्मेंस बेहतर होती है.
इसलिए, जब अपने प्रोजेक्ट को AGP 9.0 पर अपग्रेड किया जाता है, तब आपको बिल्ट-इन Kotlin पर माइग्रेट करना या ऑप्ट आउट करना होगा.
आपके पास उन Gradle सबप्रोजेक्ट के लिए, Kotlin के लिए पहले से मौजूद सुविधा को चुनिंदा तौर पर बंद करने का विकल्प होता है जिनमें Kotlin सोर्स नहीं हैं.
Kotlin Gradle प्लगिन 2.2.10 पर रनटाइम डिपेंडेंसी
Android Gradle प्लग इन 9.0, Kotlin Gradle प्लग इन (KGP) 2.2.10 पर निर्भर करता है. यह Kotlin के साथ काम करने की सुविधा के लिए ज़रूरी कम से कम वर्शन है.
इसका मतलब है कि अगर आपने Kotlin के बिल्ट-इन वर्शन का इस्तेमाल नहीं किया है और KGP के 2.2.10 से कम वर्शन का इस्तेमाल किया है, तो Gradle, KGP के वर्शन को अपने-आप 2.2.10 पर अपग्रेड कर देगा.
इसी तरह, अगर KSP का इस्तेमाल किया जा रहा है और उसका वर्शन 2.2.10-2.0.2 से कम है, तो AGP, KSP के वर्शन को 2.2.10-2.0.2 पर अपग्रेड कर देगा, ताकि वह KGP के वर्शन से मैच हो सके.
इसलिए, अगर आपको Kotlin के बिल्ट-इन वर्शन का इस्तेमाल नहीं करना है और KGP या KSP के पुराने वर्शन का इस्तेमाल करना है, तो आपको टॉप-लेवल की बिल्ड फ़ाइल में यह कोड जोड़ना होगा:
buildscript {
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("KGP_VERSION") }
}
classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin") {
version { strictly("KSP_VERSION") }
}
}
}
टेस्ट फ़िक्चर के लिए आईडीई की सुविधा
AGP 9.0 में, Android Studio IDE के लिए टेस्ट फ़िक्चर की सुविधा पूरी तरह से उपलब्ध है. इस सुविधा का इस्तेमाल करने के लिए, AGP 9.0.0-alpha07 या इसके बाद का वर्शन इस्तेमाल करें.
व्यवहार में बदलाव
Android Gradle प्लगइन 9.0 में ये नए बदलाव किए गए हैं:
| व्यवहार | सुझाव |
|---|---|
Android Gradle प्लग इन 9.0, डिफ़ॉल्ट रूप से NDK के r28c वर्शन का इस्तेमाल करता है.
|
आपको जिस NDK वर्शन का इस्तेमाल करना है उसे साफ़ तौर पर बताएं. |
| Android Gradle प्लग इन 9.0 में, लाइब्रेरी का इस्तेमाल करने वाले लोगों को डिफ़ॉल्ट रूप से, कंपाइल एसडीके के उसी या इससे ज़्यादा वर्शन का इस्तेमाल करना होता है. |
किसी लाइब्रेरी का इस्तेमाल करते समय, उसी या उससे ज़्यादा कंपाइल SDK टूल का इस्तेमाल करें.
अगर ऐसा नहीं किया जा सकता या आपको लाइब्रेरी का इस्तेमाल करने वाले लोगों को स्विच करने के लिए ज़्यादा समय देना है, तो AarMetadata.minCompileSdk को साफ़ तौर पर सेट करें.
|
AGP 9.0 में, Gradle की इन प्रॉपर्टी की डिफ़ॉल्ट वैल्यू अपडेट की गई हैं. इससे आपको अपग्रेड करते समय, AGP 8.13 के व्यवहार को बनाए रखने का विकल्प मिलता है:
| प्रॉपर्टी | फ़ंक्शन | AGP 8.13 से AGP 9.0 में बदलाव | सुझाव |
|---|---|---|---|
android. |
android ब्लॉक के लेगसी वर्शन को दिखाए बिना, नए डीएसएल इंटरफ़ेस का इस्तेमाल करें.इसका यह भी मतलब है कि अब लेगसी वैरिएंट एपीआई, जैसे कि android.applicationVariants
को ऐक्सेस नहीं किया जा सकता.
|
false → true |
android.newDsl=false सेट करके, इससे ऑप्ट आउट किया जा सकता है.आपके प्रोजेक्ट में इस्तेमाल किए गए सभी प्लगिन और बिल्ड लॉजिक के साथ काम करने वाले प्लगिन उपलब्ध होने पर, ऑप्ट आउट करने की सुविधा हटा दें. |
android. |
इस विकल्प को चुनने पर, Kotlin में पहले से मौजूद सुविधाएं चालू हो जाती हैं | false → true |
अगर हो सके, तो बिल्ट-इन Kotlin पर माइग्रेट करें या ऑप्ट आउट करें. |
android. |
यह नियम लागू करता है कि हर लाइब्रेरी का पैकेज का नाम अलग हो. | false → true |
अपने प्रोजेक्ट में मौजूद सभी लाइब्रेरी के लिए, पैकेज के यूनीक नाम तय करें. अगर ऐसा नहीं किया जा सकता, तो माइग्रेट करते समय इस फ़्लैग को बंद किया जा सकता है. |
android. |
डिफ़ॉल्ट रूप से androidx
डिपेंडेंसी का इस्तेमाल करें.
|
false → true |
androidx
डिपेंडेंसी का इस्तेमाल करें.
|
android. |
डिफ़ॉल्ट रूप से androidx.test.runner.AndroidJUnitRunner क्लास का इस्तेमाल करके, डिवाइस पर टेस्ट चलाएं. इससे, बंद हो चुकी InstrumentationTestRunner क्लास के डिफ़ॉल्ट इस्तेमाल की जगह androidx.test.runner.AndroidJUnitRunner क्लास का इस्तेमाल किया जा सकेगा
android {
defaultConfig {
testInstrumentationRunner = "..."
}
} |
false → true |
AndroidJUnitRunner को अपनाएं या अपने कस्टम testInstrumentationRunner को साफ़ तौर पर बताएं.
|
android. |
यह कॉन्फ़िगरेशन के बीच, डिपेंडेंसी की शर्तों के इस्तेमाल को कंट्रोल करता है. AGP 9.0 में डिफ़ॉल्ट वैल्यू false है. यह सिर्फ़ ऐप्लिकेशन डिवाइस टेस्ट (AndroidTest) में कंस्ट्रेंट का इस्तेमाल करता है.
इसे true पर सेट करने से, 8.13 वर्शन के हिसाब से काम करने लगेगा.
|
true → false |
जब तक ज़रूरी न हो, तब तक हर जगह डिपेंडेंसी की शर्तों का इस्तेमाल न करें. इस फ़्लैग की नई डिफ़ॉल्ट वैल्यू को स्वीकार करने से, प्रोजेक्ट इंपोर्ट करने की प्रोसेस में ऑप्टिमाइज़ेशन भी चालू हो जाते हैं. इससे, कई Android लाइब्रेरी सबप्रोजेक्ट वाली बिल्ड को इंपोर्ट करने में लगने वाला समय कम हो जाता है. |
android. |
ऐप्लिकेशन में, नॉन-फ़ाइनल R क्लास के ख़िलाफ़ कोड कंपाइल किया जाता है. इससे ऐप्लिकेशन कंपाइलेशन, लाइब्रेरी कंपाइलेशन के मुताबिक हो जाता है. इससे परफ़ॉर्मेंस में बढ़ोतरी होती है. साथ ही, संसाधन प्रोसेसिंग फ़्लो को ऑप्टिमाइज़ करने के लिए, आने वाले समय में बेहतर तरीके से काम किया जा सकता है. |
false → true |
कई प्रोजेक्ट, सोर्स कोड में बदलाव किए बिना ही नई सुविधा का इस्तेमाल कर सकते हैं. अगर R क्लास के फ़ील्ड का इस्तेमाल ऐसी किसी जगह पर किया जाता है जहां कॉन्स्टेंट की ज़रूरत होती है, जैसे कि स्विच केस, तो चेन किए गए if स्टेटमेंट का इस्तेमाल करने के लिए रीफ़ैक्टर करें. |
android. |
यह ऐप्लिकेशन और टेस्ट में, टारगेट एसडीके वर्शन के लिए डिफ़ॉल्ट वैल्यू के तौर पर कंपाइल एसडीके वर्शन का इस्तेमाल करता है. इस बदलाव से पहले, टारगेट SDK टूल का वर्शन डिफ़ॉल्ट रूप से, SDK टूल के कम से कम लेवल वाले वर्शन पर सेट होता था. |
false → true |
ऐप्लिकेशन और टेस्ट के लिए, टारगेट एसडीके वर्शन साफ़ तौर पर बताएं. |
android. |
यह सिर्फ़ टेस्ट किए गए बिल्ड टाइप के लिए यूनिट टेस्ट कॉम्पोनेंट बनाता है. डिफ़ॉल्ट प्रोजेक्ट में, इससे डीबग के लिए एक यूनिट टेस्ट मिलती है, जबकि पहले डीबग या रिलीज़ के लिए यूनिट टेस्ट की जाती थीं. |
false → true |
अगर आपके प्रोजेक्ट में डीबग और रिलीज़, दोनों के लिए टेस्ट चलाने की ज़रूरत नहीं है, तो कोई बदलाव करने की ज़रूरत नहीं है. |
android. |
अगर एजीपी डीएसएल में बताई गई कोई भी फ़ाइल डिस्क पर मौजूद नहीं है, तो यह विकल्प गड़बड़ी के साथ बिल्ड को पूरा नहीं करता. इस बदलाव से पहले, फ़ाइल के नाम में टाइप की गई गलतियों की वजह से फ़ाइलों को अनदेखा कर दिया जाता था. | false → true |
proguard.txt फ़ाइल में किए गए अमान्य एलान हटाएं |
android. |
इस विकल्प की मदद से, R8 को कम Android संसाधन रखने की अनुमति मिलती है. ऐसा इसलिए, क्योंकि यह क्लास और Android संसाधनों, दोनों पर एक साथ विचार करता है. | false → true |
अगर आपके प्रोजेक्ट के डेटा को सुरक्षित रखने से जुड़े नियम पहले से ही पूरे हैं, तो कोई बदलाव करने की ज़रूरत नहीं है. |
android. |
इस विकल्प की मदद से, R8 किसी क्लास को बनाए रखते समय डिफ़ॉल्ट कंस्ट्रक्टर को बनाए रखने की ज़रूरत नहीं होती. इससे R8 को कम मेमोरी की ज़रूरत पड़ती है.
इसका मतलब है कि -keep class A का मतलब अब -keep class A { <init>(); }नहीं है |
false → true |
अगर आपके प्रोजेक्ट के डेटा को सुरक्षित रखने से जुड़े नियम पहले से ही पूरे हैं, तो कोई बदलाव करने की ज़रूरत नहीं है.
बदलें -keep class A
को
-keep class A { <init>(); }
अपने प्रोजेक्ट के कीप नियमों में. ऐसा उन मामलों में करें जहां आपको डिफ़ॉल्ट कंस्ट्रक्टर को बनाए रखने की ज़रूरत है.
|
android. |
सभी सबप्रोजेक्ट में resValues चालू करता है
|
true → false |
resValues को सिर्फ़ उन सबप्रोजेक्ट में चालू करें जिनमें इसकी ज़रूरत है. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह सेटिंग करें:
android {
buildFeatures {
resValues = true
}
} |
android. |
इस विकल्प से, सभी सबप्रोजेक्ट में शेडर कंपाइलेशन की सुविधा चालू हो जाती है | true → false |
सिर्फ़ उन सबप्रोजेक्ट में शेडर कंपाइलेशन चालू करें जिनमें कंपाइल किए जाने वाले शेडर मौजूद हैं. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह सेटिंग करें:
android {
buildFeatures {
shaders = true
}
} |
android. |
AGP 9.0 में, getDefaultProguardFile() सिर्फ़ proguard-android-optimize.txt के साथ काम करेगा, न कि proguard-android.txt के साथ. ऐसा इसलिए किया गया है, ताकि dontoptimize फ़्लैग का इस्तेमाल गलती से न हो. यह फ़्लैग, proguard-android.txt में शामिल है.
|
false → true |
अगर आपको ऑप्टिमाइज़ेशन से बचना है, तो dontoptimize का इस्तेमाल करने के साथ-साथ, कस्टम proguardFile में dontoptimize को साफ़ तौर पर बताया जा सकता है.proguard-android-optimize.txt अगर हो सके, तो इस फ़ाइल से dontoptimize फ़्लैग हटा दें. इससे R8 ऑप्टिमाइज़ेशन के फ़ायदे कम हो जाते हैं. अगर ऐसा नहीं है, तो android.r8.globalOptionsInConsumerRules.disallowed=false को सेट करके ऑप्ट आउट करें.
|
android. |
AGP 9.0 से, Android लाइब्रेरी और सुविधा वाले मॉड्यूल को पब्लिश नहीं किया जा सकेगा. ऐसा तब होगा, जब उपभोक्ता की कीप फ़ाइलों में Proguard के कॉन्फ़िगरेशन में कोई समस्या होगी. dontoptimize या dontobfuscate जैसे ग्लोबल विकल्प शामिल करने वाली उपभोक्ता फ़ाइलों का इस्तेमाल सिर्फ़ ऐप्लिकेशन मॉड्यूल में किया जाना चाहिए. इससे लाइब्रेरी का इस्तेमाल करने वाले लोगों के लिए, ऑप्टिमाइज़ेशन के फ़ायदे कम हो सकते हैं. अगर Android ऐप्लिकेशन मॉड्यूल में पहले से कंपाइल की गई डिपेंडेंसी (JAR या AAR) एम्बेड की गई है, तो Android ऐप्लिकेशन मॉड्यूल कंपाइलेशन ऐसे किसी भी ग्लोबल विकल्प को अनदेखा कर देगा. यह कब होता है, यह देखने के लिए configuration.txt फ़ाइल देखें. आम तौर पर, यह फ़ाइल <app_module>/build/outputs/mapping/<build_variant>/configuration.txt जैसे पाथ में होती है. इसमें इस तरह की टिप्पणियां होती हैं: # REMOVED CONSUMER RULE: dontoptimize
|
false → true |
पब्लिश की गई लाइब्रेरी में, काम न करने वाले नियमों को हटा देना चाहिए. इंटरनल लाइब्रेरी को, काम न करने वाले लेकिन ज़रूरी नियमों को ऐप्लिकेशन मॉड्यूल में proguardFile में ले जाना चाहिए. android.r8.globalOptionsInConsumerRules.disallowed=false सेट करके ऑप्ट आउट करें. जब आपकी सभी उपभोक्ता जानकारी वाली फ़ाइलें, ज़रूरी शर्तों के मुताबिक हो जाएं, तब ऑप्ट आउट करने का विकल्प हटा दें.
|
android. |
AndroidSourceSet डीएसएल का इस्तेमाल करके, जनरेट किए गए सोर्स के लिए पासिंग प्रोवाइडर को अनुमति न दें.
|
false → true |
जनरेट किए गए सोर्स रजिस्टर करने के लिए, androidComponents पर Sources एपीआई का इस्तेमाल करें.
|
android. |
अगर शेडर कंपाइलेशन चालू है, तो local.properties में शेडर कंपाइलर का पाथ साफ़ तौर पर सेट करना ज़रूरी है.
|
false → true |
अपने प्रोजेक्ट के local.properties में glslc.dir=/path/to/shader-tools जोड़ें.
|
हटाए गए कॉम्पोनेंट
Android Gradle प्लग इन 9.0 में, ये सुविधाएं हटा दी गई हैं:
- Wear OS ऐप्लिकेशन को एम्बेड करने की सुविधा
AGP 9.0 में, Wear OS ऐप्लिकेशन को एम्बेड करने की सुविधा हटा दी गई है. यह सुविधा अब Play में काम नहीं करती. इसमेंwearAppकॉन्फ़िगरेशन औरAndroidSourceSet.wearAppConfigurationNameडीएसएल को हटाना शामिल है. Wear OS पर अपना ऐप्लिकेशन पब्लिश करने का तरीका जानने के लिए, Wear OS पर ऐप्लिकेशन उपलब्ध कराना लेख पढ़ें. androidDependenciesऔरsourceSetsटास्क की रिपोर्ट- डेंसिटी के हिसाब से स्प्लिट किए गए APK की सुविधा
AGP 9.0 में, स्क्रीन डेंसिटी के हिसाब से स्प्लिट किए गए APK बनाने की सुविधा हटा दी गई है. इस सुविधा और इससे जुड़े एपीआई को हटा दिया गया है. AGP 9.0 या उसके बाद के वर्शन का इस्तेमाल करके, स्क्रीन डेंसिटी के आधार पर APK को स्प्लिट करने के लिए, ऐप्लिकेशन बंडल का इस्तेमाल करें.
बदला गया डीएसएल
Android Gradle प्लग इन 9.0 में, डीएसएल से जुड़े ये बदलाव किए गए हैं:
CommonExtensionके पैरामीटर को हटा दिया गया है.यह बदलाव सिर्फ़ सोर्स लेवल पर किया गया है, ताकि आने वाले समय में सोर्स लेवल पर होने वाले बदलावों से बचा जा सके. हालांकि, इसका मतलब यह भी है कि ब्लॉक करने के तरीकों को
CommonExtensionसेApplicationExtension,LibraryExtension,DynamicFeatureExtension, औरTestExtensionपर ले जाना होगा.अपने प्रोजेक्ट को AGP 9.0 पर अपग्रेड करते समय, Gradle प्लगिन के उस कोड को फिर से फ़ैक्टर करें जो इन पैरामीटर या ब्लॉक के तरीकों का इस्तेमाल करता है. उदाहरण के लिए, टाइप पैरामीटर को हटाने के लिए इस प्लगिन को अपडेट किया गया है. साथ ही, अब यह हटाए गए ब्लॉक के तरीकों पर निर्भर नहीं करता:
AGP 8.13
val commonExtension: CommonExtension<*, *, *, *, *, *> = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig { minSdk { version = release(28) } } }AGP 9.0
val commonExtension: CommonExtension = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig.apply { minSdk { version = release(28) } } }AGP के अलग-अलग वर्शन को टारगेट करने वाले प्लगिन के लिए, सीधे तौर पर getter का इस्तेमाल करना, AGP के 9.0 से पहले के वर्शन के साथ बाइनरी के तौर पर काम करता है.
हटाया गया डीएसएल
Android Gradle प्लग इन 9.0 में ये सुविधाएं हटा दी गई हैं:
AndroidSourceSet.jni, क्योंकि यह काम नहीं कर रहा था.AndroidSourceSet.wearAppConfigurationName, क्योंकि यह Wear OS ऐप्लिकेशन को एम्बेड करने की सुविधा को हटाने से जुड़ा है.BuildType.isRenderscriptDebuggable, क्योंकि यह काम नहीं कर रहा था.DependencyVariantSelection. इसेDependencySelectionसे बदल दिया गया है. इसेkotlin.android.localDependencySelectionके तौर पर दिखाया जाता हैInstallation.installOptions(String). इसेInstallation.installOptionsकी बदली जा सकने वाली प्रॉपर्टी से बदल दिया गया है.यह एक्सपेरिमेंटल ब्लॉक है, लेकिन इसे कभी भी स्टेबल नहीं किया गया
PostProcessing.ProductFlavor.setDimension, जिसेdimensionप्रॉपर्टी से बदल दिया गया हैLanguageSplitOptions, जो सिर्फ़ Google Play झटपट के लिए काम का था. हालांकि, अब यह काम नहीं करता.DensitySplit, क्योंकि यह सुविधा अब काम नहीं करती है. ऐप्लिकेशन बंडल का इस्तेमाल किया जा सकता है.
हटाए गए एपीआई
Android Gradle प्लग इन 9.0 में ये सुविधाएं हटा दी गई हैं:
AndroidComponentsExtension.finalizeDSl. इसेfinalizeDslसे बदल दिया गया हैComponent.transformClassesWith. इसेInstrumentation.transformClassesWithसे बदल दिया गया हैComponent.setAsmFramesComputationMode. इसेInstrumentation.setAsmFramesComputationModeसे बदल दिया गया हैComponentBuilder.enabled. इसकी जगहComponentBuilder.enableने ले ली है.DependenciesInfoBuilder.includedInApk. इसेincludeInApkसे बदल दिया गया हैDependenciesInfoBuilder.includedInBundle. इसेincludeInBundleसे बदल दिया गया हैGeneratesApk.targetSdkVersion. इसेtargetSdkसे बदल दिया गया हैVariant.minSdkVersion. इसेminSdkसे बदल दिया गया हैVariant.maxSdkVersion. इसेmaxSdkसे बदल दिया गया हैVariant.targetSdkVersion. इसेtargetSdkसे बदल दिया गया हैVariant.unitTest, क्योंकि यहcom.android.testप्लगिन पर लागू नहीं होता था.unitTest,VariantBuilderसबटाइप पर उपलब्ध है. यहHasUnitTestतक उपलब्ध है.VariantBuilder.targetSdkऔरtargetSdkPreview, क्योंकि ये लाइब्रेरी में काम के नहीं थे. इसके बजाय,GeneratesApkBuilder.targetSdkयाGeneratesApkBuilder.targetSdkPreviewका इस्तेमाल करें.VariantBuilder.enableUnitTest, क्योंकि यहcom.android.testप्लगिन पर लागू नहीं होता था.enableUnitTest,VariantBuilderसबटाइप पर उपलब्ध है. यहHasUnitTestBuilderतक उपलब्ध है.VariantBuilder.unitTestEnabledको हटा दिया गया है. इसके बजाय,VariantBuilderसबटाइप परenableUnitTestका इस्तेमाल किया जाएगा.enableUnitTestका नामVariantBuilder.unitTestEnabledसे ज़्यादा एक जैसा है.VariantBuilderसबटाइप,HasUnitTestBuilderके साथ काम करते हैं.VariantOutput.enable. इसेenabledसे बदल दिया गया हैFeaturePluginऔरFeatureExtensionके इस्तेमाल पर रोक लगा दी गई है और इन्हें बंद कर दिया गया है.बंद किए गए और बंद किए गए
BaseExtension.registerTransformएपीआई. इनका इस्तेमाल सिर्फ़ इसलिए किया जाता था, ताकि AGP 4.2 या इससे पहले के वर्शन पर चलने वाले ऐप्लिकेशन को, AGP के सबसे नए वर्शन के साथ कंपाइल किया जा सके.
हटाई गई Gradle प्रॉपर्टी
शुरुआत में, इन Gradle प्रॉपर्टी को ग्लोबल लेवल पर जोड़ा गया था. ऐसा इसलिए किया गया था, ताकि डिफ़ॉल्ट रूप से चालू होने वाली सुविधाओं को बंद किया जा सके.
AGP 8.0 या इससे पहले के वर्शन में, ये सुविधाएं डिफ़ॉल्ट रूप से बंद कर दी गई हैं. इन सुविधाओं को सिर्फ़ उन उप-प्रोजेक्ट में चालू करें जिनमें इनका इस्तेमाल किया जाता है, ताकि ज़्यादा असरदार तरीके से बनाया जा सके.
| प्रॉपर्टी | फ़ंक्शन | प्रतिस्थापन |
|---|---|---|
android. |
यह सभी सबप्रोजेक्ट में AIDL कंपाइलेशन की सुविधा चालू करता है |
सिर्फ़ उन सबप्रोजेक्ट में AIDL कंपाइलेशन चालू करें जिनमें AIDL सोर्स मौजूद हैं. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह प्रॉपर्टी सेट करें:
android {
buildFeatures {
aidl = true
}
} |
android. |
इससे सभी सबप्रोजेक्ट में RenderScript कंपाइलेशन चालू हो जाता है |
सिर्फ़ उन सबप्रोजेक्ट में renderscript कंपाइलेशन चालू करें जिनमें renderscript सोर्स मौजूद हैं. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह प्रॉपर्टी सेट करें:
android {
buildFeatures {
renderScript = true
}
} |
लागू की गई Gradle प्रॉपर्टी
अगर आपने नीचे दी गई Gradle प्रॉपर्टी सेट की हैं, तो AGP 9.0 में गड़बड़ी होगी.
Android Gradle प्लगिन अपग्रेड असिस्टेंट, इन प्रॉपर्टी का इस्तेमाल करने वाले प्रोजेक्ट को AGP 9.0 पर अपग्रेड नहीं करेगी.
| प्रॉपर्टी | फ़ंक्शन |
|---|---|
android. |
संसाधन कम करने की प्रोसेस अब हमेशा R8 के हिस्से के तौर पर चलती है. पिछले वर्शन को हटा दिया गया है. |
android. |
इस्तेमाल नहीं किए जाने वाले रिसॉर्स को हटाने की प्रोसेस में अब हमेशा सटीक तरीके से रिसॉर्स हटाए जाते हैं. इससे ज़्यादा रिसॉर्स हटाए जा सकते हैं. |
ठीक की गई समस्याएं
Android Gradle प्लगिन 9.0.0-alpha10
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Android Gradle Plugin |
|
|||
| Lint |
|
|||
Android Gradle प्लगिन 9.0.0-alpha09
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Android Gradle Plugin |
|
|||
Android Gradle प्लगिन 9.0.0-alpha08
| ठीक की गई समस्याएं | |
|---|---|
| AGP 9.0.0-alpha08 में, सार्वजनिक तौर पर बताई गई किसी भी समस्या को 'ठीक की गई' के तौर पर मार्क नहीं किया गया है |
Android Gradle प्लगिन 9.0.0-alpha07
| ठीक की गई समस्याएं | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| Android Gradle Plugin |
|
||||||||
Android Gradle प्लगिन 9.0.0-alpha06
| ठीक की गई समस्याएं | |||||
|---|---|---|---|---|---|
| Android Gradle Plugin |
|
||||
| Lint |
|
||||
Android Gradle प्लगिन 9.0.0-alpha05
| ठीक की गई समस्याएं | |||||
|---|---|---|---|---|---|
| Android Gradle Plugin |
|
||||
| Lint |
|
||||
Android Gradle प्लग इन 9.0.0-alpha04
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Android Gradle Plugin |
|
|||
| Lint |
|
|||
Android Gradle प्लग इन 9.0.0-alpha03
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Android Gradle Plugin |
|
|||
| Lint |
|
|||
Android Gradle प्लगिन 9.0.0-alpha02
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Android Gradle Plugin |
|
|||
Android Gradle प्लगिन 9.0.0-alpha01
| ठीक की गई समस्याएं | |||||||
|---|---|---|---|---|---|---|---|
| Android Gradle Plugin |
|
||||||