इस पेज पर, Android Gradle प्लगिन (एजीपी) की प्रीव्यू रिलीज़ के लिए रिलीज़ नोट दिए गए हैं.
Android Gradle प्लग इन 9.0
Android Gradle प्लग इन 9.0, AGP का नया मेजर वर्शन है. इसमें एपीआई और व्यवहार से जुड़े बदलाव किए गए हैं.
Android Gradle प्लग इन 9.0.0-alpha04 पर अपडेट करने के लिए, Android Studio Narwhal 4 Feature Drop | 2025.1.4 में Android Gradle प्लग इन अपग्रेड असिस्टेंट का इस्तेमाल करें.
AGP अपग्रेड असिस्टेंट, आपके प्रोजेक्ट को अपग्रेड करते समय मौजूदा व्यवहारों को बनाए रखने में मदद करता है. इससे आपको AGP 9.0 का इस्तेमाल करने के लिए, अपने प्रोजेक्ट को अपग्रेड करने की सुविधा मिलती है. भले ही, आप AGP 9.0 में सभी नए डिफ़ॉल्ट सेटिंग को अपनाने के लिए तैयार न हों.
इनके साथ काम करता है
Android Gradle प्लग इन 9.0.0-alpha04, Android के एपीआई लेवल 36 तक के वर्शन के साथ काम करता है.
Android Gradle प्लग इन 9.0.0-alpha04 के लिए, Gradle 9.0.0 की ज़रूरत होती है.
कम से कम वर्शन | डिफ़ॉल्ट वर्शन | नोट | |
---|---|---|---|
Gradle | 9.0.0 | 9.0.0 | ज़्यादा जानने के लिए, Gradle को अपडेट करने का तरीका देखें. |
एसडीके बिल्ड टूल | 36.0.0 | 36.0.0 | एसडीके बिल्ड टूल इंस्टॉल करें या कॉन्फ़िगर करें. |
एनडीके | लागू नहीं | 28.2.13676358 | एनडीके का कोई दूसरा वर्शन इंस्टॉल करें या कॉन्फ़िगर करें. |
जेडीके | 17 | 17 | ज़्यादा जानने के लिए, जेडीके वर्शन सेट करना लेख पढ़ें. |
इंटरनल डीएसएल लागू करने और बंद किए गए वैरिएंट एपीआई के लिए, अब साफ़ तौर पर ऑप्ट इन करना ज़रूरी है
Android Gradle प्लगिन में अब एक तय एपीआई सर्फ़ेस है. इसमें काम करने वाले एपीआई, com.android.tools.build:gradle-api
maven आर्टफ़ैक्ट में तय किए गए हैं.
मौजूदा बाइनरी प्लगिन और बिल्ड स्क्रिप्ट के साथ काम करने के लिए, एपीआई की तय की गई सतह से पहले के डीएसएल को AGP 8.13 और इससे पहले के वर्शन में डिफ़ॉल्ट रूप से दिखाया जाता था. इससे Gradle प्लगिन और बिल्ड स्क्रिप्ट में मौजूद कोड, डीएसएल की इंटरनल इंप्लीमेंटेशन की जानकारी के साथ-साथ, बंद किए गए android.applicationVariants
, android.libraryVariants
, android.testVariants
, और android.unitTestVariants
एपीआई को भी ऐक्सेस कर सकता है. इन एपीआई को AGP 10 में 2026 में हटा दिया जाएगा.
इस बदलाव को ज़्यादा बेहतर तरीके से दिखाने के लिए, Android Gradle प्लग इन 9.0.0-alpha04 में, लेगसी वैरिएंट एपीआई और इंटरनल डीएसएल, दोनों को डिफ़ॉल्ट रूप से ऐक्सेस नहीं किया जा सकता.
हटाए गए एपीआई का इस्तेमाल करने के लिए, gradle.properties
में android.newDsl=false
सेट करके, फिर से ऑप्ट-इन किया जा सकता है.
हम 9.0 ऐल्फ़ा सीरीज़ के दौरान, प्लग इन बनाने वाले लोगों से संपर्क कर रहे हैं. इससे उन्हें ऐसे प्लग इन बनाने और रिलीज़ करने में मदद मिलेगी जो नए मोड के साथ पूरी तरह से काम करते हैं. साथ ही, हम Android Studio में AGP अपग्रेड असिस्टेंट को बेहतर बनाएंगे, ताकि आपको माइग्रेट करने में मदद मिल सके.
Kotlin में पहले से मौजूद
Android Gradle प्लग इन 9 में, Kotlin को कंपाइल करने की सुविधा पहले से मौजूद है. इससे अलग से लागू किए गए Kotlin प्लग इन की जगह ले ली जाती है. इससे AGP के साथ इंटिग्रेशन आसान हो जाता है. साथ ही, बंद हो चुके एपीआई का इस्तेमाल करने से बचा जा सकता है और कुछ मामलों में परफ़ॉर्मेंस को बेहतर बनाया जा सकता है.
Android Gradle प्लग इन 9 में, Kotlin Gradle प्लग इन 2.2.0 पर रनटाइम डिपेंडेंसी होती है. यह Kotlin के साथ काम करने के लिए ज़रूरी कम से कम वर्शन है.
android.builtInKotlin=false
को सेट करके, Kotlin में पहले से मौजूद सुविधाओं से ऑप्ट आउट किया जा सकता है.
अगर आपने ऑप्ट आउट कर दिया है और आपको kotlin Gradle प्लगिन के पुराने वर्शन का इस्तेमाल करना है, तो वर्शन को डाउनग्रेड किया जा सकता है
buildscript {
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("2.0.0") } // or another version that you want to use
}
}
}
व्यवहार में बदलाव
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.newDsl |
android ब्लॉक के लेगसी वर्शन को दिखाए बिना, नए डीएसएल इंटरफ़ेस का इस्तेमाल करें.इसका यह भी मतलब है कि अब लेगसी वैरिएंट एपीआई, जैसे कि android.applicationVariants
को ऐक्सेस नहीं किया जा सकता.
|
false → true |
android.newDsl=false सेट करके, ऑप्ट आउट किया जा सकता है.आपके प्रोजेक्ट में इस्तेमाल किए गए सभी प्लगिन और बिल्ड लॉजिक के साथ काम करने वाले प्लगिन उपलब्ध होने पर, ऑप्ट आउट करने की सुविधा हटा दें. |
android.builtInKotlin |
Android Gradle प्लग इन में, सीधे Kotlin कोड को कंपाइल करने की सुविधा चालू की गई है. इसके लिए, org.jetbrains.kotlin.android प्लग इन की ज़रूरत नहीं है.
|
false → true |
अगर हो सके, तो org.jetbrains.kotlin.android प्लगिन का इस्तेमाल बंद करके, Kotlin के साथ पहले से मौजूद सुविधाओं का इस्तेमाल करें.
अगर ऐसा नहीं है, तो android.builtInKotlin=false को सेट करके ऑप्ट आउट करें
|
android.uniquePackageNames |
यह नियम लागू करता है कि हर लाइब्रेरी के लिए पैकेज का नाम अलग-अलग हो. | false → true |
अपने प्रोजेक्ट में मौजूद सभी लाइब्रेरी के लिए, पैकेज के यूनीक नाम डालें. अगर ऐसा नहीं किया जा सकता, तो माइग्रेट करते समय इस फ़्लैग को बंद किया जा सकता है. |
android.dependency.useConstraints |
यह कॉन्फ़िगरेशन के बीच, डिपेंडेंसी की शर्तों के इस्तेमाल को कंट्रोल करता है. AGP 9.0 में डिफ़ॉल्ट वैल्यू false है. यह सिर्फ़ ऐप्लिकेशन डिवाइस टेस्ट (AndroidTest) में कंस्ट्रेंट का इस्तेमाल करता है.
इसे true पर सेट करने से, 8.13 वर्शन के हिसाब से काम करने लगेगा.
|
true → false |
जब तक ज़रूरी न हो, तब तक हर जगह डिपेंडेंसी की शर्तों का इस्तेमाल न करें. इस फ़्लैग के नए डिफ़ॉल्ट को स्वीकार करने से, प्रोजेक्ट इंपोर्ट करने की प्रोसेस में ऑप्टिमाइज़ेशन भी चालू हो जाते हैं. इससे, Android लाइब्रेरी वाले कई सबप्रोजेक्ट के साथ बिल्ड इंपोर्ट करने में लगने वाला समय कम हो जाता है. |
aandroid.enableAppCompileTimeRClass |
ऐप्लिकेशन में, नॉन-फ़ाइनल R क्लास के ख़िलाफ़ कोड कंपाइल किया जाता है. इससे ऐप्लिकेशन कंपाइलेशन, लाइब्रेरी कंपाइलेशन के मुताबिक हो जाता है. इससे इंक्रीमेंटैलिटी बेहतर होती है. साथ ही, संसाधन प्रोसेसिंग फ़्लो की परफ़ॉर्मेंस को आने वाले समय में ऑप्टिमाइज़ करने का रास्ता खुलता है. |
false → true |
कई प्रोजेक्ट, सोर्स कोड में बदलाव किए बिना ही नई सुविधा का इस्तेमाल कर सकते हैं. अगर R क्लास के फ़ील्ड का इस्तेमाल ऐसी किसी जगह पर किया जाता है जहां कॉन्स्टेंट की ज़रूरत होती है, जैसे कि स्विच केस, तो चेन किए गए if स्टेटमेंट का इस्तेमाल करने के लिए रीफ़ैक्टर करें. |
android.sdk.defaultTargetSdkToCompileSdkIfUnset |
यह ऐप्लिकेशन और टेस्ट में, टारगेट एसडीके के वर्शन के लिए डिफ़ॉल्ट वैल्यू के तौर पर, कंपाइल एसडीके के वर्शन का इस्तेमाल करता है. इस बदलाव से पहले, टारगेट SDK टूल का वर्शन डिफ़ॉल्ट रूप से SDK टूल के कम से कम लेवल वाले वर्शन पर सेट होता था. |
false → true |
ऐप्लिकेशन और टेस्ट के लिए, टारगेट एसडीके वर्शन साफ़ तौर पर बताएं. |
android.onlyEnableUnitTestForTheTestedBuildType |
यह सिर्फ़ टेस्ट किए गए बिल्ड टाइप के लिए यूनिट टेस्ट कॉम्पोनेंट बनाता है. डिफ़ॉल्ट प्रोजेक्ट में, इससे डीबग के लिए एक यूनिट टेस्ट मिलती है, जबकि पहले डीबग या रिलीज़ के लिए यूनिट टेस्ट की जाती थीं. |
false → true |
अगर आपके प्रोजेक्ट में, डीबग और रिलीज़, दोनों के लिए टेस्ट चलाने की ज़रूरत नहीं है, तो कोई बदलाव करने की ज़रूरत नहीं है. |
android.proguard.failOnMissingFiles |
अगर एजीपी डीएसएल में बताई गई कोई भी फ़ाइल डिस्क पर मौजूद नहीं है, तो यह विकल्प गड़बड़ी के साथ बिल्ड को पूरा नहीं होने देता. इस बदलाव से पहले, फ़ाइल के नाम में टाइप की गई गलतियों की वजह से फ़ाइलों को अनदेखा कर दिया जाता था. | false → true |
proguard.txt फ़ाइल में किए गए अमान्य एलान हटाएं |
android.r8.optimizedResourceShrinking |
इस विकल्प की मदद से, R8 को कम Android संसाधन रखने की अनुमति मिलती है. ऐसा इसलिए, क्योंकि यह क्लास और Android संसाधनों, दोनों पर एक साथ विचार करता है. | false → true |
अगर आपके प्रोजेक्ट के डेटा को सुरक्षित रखने से जुड़े नियम पहले से ही पूरे हैं, तो कोई बदलाव करने की ज़रूरत नहीं है. |
android.r8.strictFullModeForKeepRules |
इस विकल्प की मदद से, R8 को किसी क्लास को बनाए रखते समय डिफ़ॉल्ट कंस्ट्रक्टर को बनाए रखने की ज़रूरत नहीं पड़ती. इससे R8 को कम मेमोरी इस्तेमाल करने में मदद मिलती है.
इसका मतलब है कि -keep class A अब -keep class A { <init>(); } के बराबर नहीं है |
false → true |
अगर आपके प्रोजेक्ट के डेटा को सुरक्षित रखने से जुड़े नियम पहले से ही पूरे हैं, तो कोई बदलाव करने की ज़रूरत नहीं है.
बदलें -keep class A
को
-keep class A { <init>(); }
अपने प्रोजेक्ट के कीप नियमों में. ऐसा उन मामलों में करें जहां आपको डिफ़ॉल्ट कंस्ट्रक्टर को बनाए रखने की ज़रूरत है.
|
android.defaults.buildfeatures.shaders |
इस विकल्प से, सभी सबप्रोजेक्ट में शेडर कंपाइल करने की सुविधा चालू हो जाती है | true → false |
सिर्फ़ उन सबप्रोजेक्ट में शेडर कंपाइलेशन चालू करें जिनमें कंपाइल किए जाने वाले शेडर मौजूद हैं. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह सेटिंग करें:
android { buildFeatures { shaders = true } } |
हटाई गई सुविधाएं
Android Gradle प्लग इन 9.0 में, ये सुविधाएं हटा दी गई हैं:
- Wear OS ऐप्लिकेशन को एम्बेड करने की सुविधा
AGP 9.0 में, Wear OS ऐप्लिकेशन को एम्बेड करने की सुविधा हटा दी गई है. यह सुविधा अब Play में काम नहीं करती. इसमेंwearApp
कॉन्फ़िगरेशन औरAndroidSourceSet.wearAppConfigurationName
डीएसएल को हटाना शामिल है. Wear OS पर अपना ऐप्लिकेशन पब्लिश करने का तरीका जानने के लिए, Wear OS पर ऐप्लिकेशन उपलब्ध कराना लेख पढ़ें. androidDependencies
औरsourceSets
टास्क की रिपोर्ट
बदला गया डीएसएल
Android Gradle प्लग इन 9.0 में, डीएसएल से जुड़े ये बदलाव किए गए हैं:
CommonExtension
के पैरामीटर को हटा दिया गया है.यह बदलाव सिर्फ़ सोर्स लेवल पर किया गया है, ताकि आने वाले समय में सोर्स लेवल पर होने वाले बदलावों से बचा जा सके. हालांकि, इसका यह भी मतलब है कि ब्लॉक करने के तरीकों को
CommonExtension
सेApplicationExtension
,LibraryExension
,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
, क्योंकि यह काम नहीं कर रहा था.ComponentBuilder.enabled
. इसकी जगहComponentBuilder.enable
ने ले ली है.DependencyVariantSelection
. इसेDependencySelection
से बदल दिया गया है. इसेkotlin.android
के तौर पर दिखाया जाता हैInstallation.installOptions(String)
. इसेInstallation.installOptions
की बदली जा सकने वाली प्रॉपर्टी से बदल दिया गया है.VariantBuilder.targetSdk
औरtargetSdkPreview
, क्योंकि ये लाइब्रेरी में काम के नहीं थे. इसके बजाय,GeneratesApkBuilder.targetSdk
याGeneratesApkBuilder.targetSdkPreview
का इस्तेमाल करें.एक्सपेरिमेंट के तौर पर उपलब्ध, लेकिन कभी भी स्थिर नहीं होने वाला
PostProcessing
ब्लॉक.ProductFlavor.setDimension
, जिसेdimension
प्रॉपर्टी से बदल दिया गया हैLanguageSplitOptions
, जो सिर्फ़ Google Play झटपट के लिए काम का था. अब यह काम नहीं करता.Variant.unitTest
, क्योंकि यहcom.android.test
प्लगिन पर लागू नहीं होता था.unitTest
,VariantBuilder
के सबटाइप पर उपलब्ध है. यहHasUnitTest
तक उपलब्ध है.VariantBuilder.enableUnitTest
, क्योंकि यहcom.android.test
प्लगिन पर लागू नहीं होता था.enableUnitTest
,VariantBuilder
के सबटाइप पर उपलब्ध है. यहHasUnitTestBuilder
तक उपलब्ध है.VariantBuilder
केHasUnitTestBuilder
एक्सटेंड करने वाले सबटाइप पर,VariantBuilder.unitTestEnabled
को हटा दिया गया है. इसकी जगह,enableUnitTest
का इस्तेमाल किया जाएगा.
हटाई गई Gradle प्रॉपर्टी
शुरुआत में, इन Gradle प्रॉपर्टी को डिफ़ॉल्ट रूप से चालू की गई सुविधाओं को ग्लोबल लेवल पर बंद करने के तरीकों के तौर पर जोड़ा गया था.
AGP 8.0 या इससे पहले के वर्शन में, ये सुविधाएं डिफ़ॉल्ट रूप से बंद कर दी गई हैं. इन सुविधाओं को सिर्फ़ उन उप-प्रोजेक्ट में चालू करें जिनमें इनका इस्तेमाल किया जाता है, ताकि ज़्यादा असरदार तरीके से बनाया जा सके.
प्रॉपर्टी | फ़ंक्शन | प्रतिस्थापन |
---|---|---|
android.defaults.buildfeatures.aidl |
यह सभी सबप्रोजेक्ट में AIDL कंपाइलेशन की सुविधा चालू करता है |
सिर्फ़ उन सबप्रोजेक्ट में AIDL कंपाइलेशन चालू करें जिनमें AIDL सोर्स मौजूद हैं. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह प्रॉपर्टी सेट करें:
android { buildFeatures { aidl = true } } |
android.defaults.buildfeatures.renderscript |
यह सभी सबप्रोजेक्ट में, RenderScript कंपाइलेशन को चालू करता है |
सिर्फ़ उन सबप्रोजेक्ट में renderscript कंपाइलेशन चालू करें जिनमें renderscript सोर्स मौजूद हैं. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह प्रॉपर्टी सेट करें:
android { buildFeatures { renderScript = true } } |
हटाए गए एपीआई
Android Gradle प्लग इन 9.0 में ये सुविधाएं हटा दी गई हैं:
- बंद किए गए और बंद किए गए
BaseExtension.registerTransform
एपीआई. इनका इस्तेमाल सिर्फ़ इसलिए किया जाता था, ताकि AGP 4.2 या इससे पहले के वर्शन पर चलने वाले ऐप्लिकेशन को टारगेट करते समय, उन्हें AGP के सबसे नए वर्शन के साथ कंपाइल किया जा सके.
लागू की गई Gradle प्रॉपर्टी
अगर आपने Gradle की इन प्रॉपर्टी को सेट किया है, तो AGP 9.0 में गड़बड़ी होगी.
Android Gradle प्लगिन अपग्रेड असिस्टेंट, इन प्रॉपर्टी का इस्तेमाल करने वाले प्रोजेक्ट को AGP 9.0 पर अपग्रेड नहीं करेगी.
प्रॉपर्टी | फ़ंक्शन |
---|---|
android.r8.integratedResourceShrinking |
संसाधन कम करने की प्रोसेस अब हमेशा R8 के हिस्से के तौर पर चलती है. पिछले वर्शन को हटा दिया गया है. |