इस पेज पर, Android Gradle प्लगिन (AGP) के प्रीव्यू वर्शन के रिलीज़ नोट दिए गए हैं.
Android Gradle प्लगिन 9.0
Android Gradle प्लग इन 9.0, AGP का नया मेजर वर्शन है. इसमें एपीआई और व्यवहार से जुड़े बदलाव किए गए हैं.
Android Gradle प्लग इन 9.0.0-rc02 पर अपडेट करने के लिए, Android Studio Panda | 2025.3.1 में Android Gradle प्लग इन अपग्रेड असिस्टेंट का इस्तेमाल करें.
AGP अपग्रेड असिस्टेंट, आपके प्रोजेक्ट को अपग्रेड करते समय मौजूदा व्यवहारों को बनाए रखने में मदद करता है. इससे आपको AGP 9.0 का इस्तेमाल करने के लिए, अपने प्रोजेक्ट को अपग्रेड करने की सुविधा मिलती है. भले ही, आप AGP 9.0 में सभी नए डिफ़ॉल्ट सेटिंग को अपनाने के लिए तैयार न हों.
इनके साथ काम करता है
Android Gradle प्लगिन 9.0.0-rc02, Android के एपीआई लेवल 36 तक के वर्शन के साथ काम करता है.
Android Gradle प्लग इन 9.0.0-rc02 के लिए, 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 पर स्विच करें:
com.android.libraryऔरcom.android.applicationप्लगिन के साथ-साथ,org.jetbrains.kotlin.multiplatformप्लगिन का इस्तेमाल करना नए डीएसएल के साथ काम नहीं करता.अपनी बिल्ड फ़ाइलें अपडेट करें: इंटरफ़ेस में बदलाव करने का मकसद, डीएसएल को ज़्यादा से ज़्यादा एक जैसा रखना है. हालांकि, इसमें कुछ छोटे बदलाव हो सकते हैं.
अपने कस्टम बिल्ड लॉजिक को अपडेट करके, नए डीएसएल और एपीआई का रेफ़रंस दें: इंटरनल डीएसएल के सभी रेफ़रंस को, सार्वजनिक डीएसएल इंटरफ़ेस से बदलें. ज़्यादातर मामलों में, यह एक-से-एक रिप्लेसमेंट होगा.
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 प्लगिन पर रनटाइम डिपेंडेंसी
Kotlin को पहले से मौजूद सहायता देने के लिए, Android Gradle प्लग इन 9.0 में अब Kotlin Gradle प्लग इन (KGP) 2.2.10 पर रनटाइम डिपेंडेंसी है. इसका मतलब है कि अब आपको KGP वर्शन के बारे में जानकारी नहीं देनी होगी. साथ ही, अगर KGP के 2.2.10 से कम वर्शन का इस्तेमाल किया जाता है, तो Gradle आपके KGP वर्शन को अपने-आप 2.2.10 पर अपग्रेड कर देगा. इसी तरह, अगर KSP का इस्तेमाल किया जा रहा है और उसका वर्शन 2.2.10-2.0.2 से कम है, तो AGP उसे KGP के वर्शन से मैच करने के लिए 2.2.10-2.0.2 पर अपग्रेड कर देगा.
KGP के नए वर्शन पर अपग्रेड करना
KGP या KSP के नए वर्शन का इस्तेमाल करने के लिए, टॉप-लेवल की अपनी बिल्ड फ़ाइल में यह जोड़ें:
buildscript {
dependencies {
// For KGP
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:KGP_VERSION")
// For KSP
classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin:KSP_VERSION")
}
}
KGP के पुराने वर्शन पर डाउनग्रेड करना
KGP के वर्शन को सिर्फ़ तब डाउनग्रेड किया जा सकता है, जब आपने बिल्ट-इन Kotlin से ऑप्ट आउट किया हो. ऐसा इसलिए है, क्योंकि AGP 9.0 में Kotlin को डिफ़ॉल्ट रूप से चालू किया जाता है. साथ ही, Kotlin के लिए KGP 2.2.10 या इसके बाद के वर्शन की ज़रूरत होती है.
KGP या KSP के पुराने वर्शन का इस्तेमाल करने के लिए, टॉप-लेवल की अपनी बिल्ड फ़ाइल में उस वर्शन की जानकारी दें. इसके लिए, स्ट्रिक्ट वर्शन का एलान करें:
buildscript {
dependencies {
// For KGP
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("KGP_VERSION") }
}
// For KSP
classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin") {
version { strictly("KSP_VERSION") }
}
}
}
ध्यान दें कि KGP के 2.0.0 वर्शन पर डाउनग्रेड किया जा सकता है.
टेस्ट फ़िक्चर के लिए आईडीई की सुविधा
AGP 9.0 में, Android Studio IDE के साथ टेस्ट फ़िक्चर का इस्तेमाल किया जा सकता है.
Fused Library Plugin
फ़्यूज़्ड लाइब्रेरी प्लगिन (प्रीव्यू) की मदद से, एक से ज़्यादा लाइब्रेरी को एक Android लाइब्रेरी एएआर के तौर पर पब्लिश किया जा सकता है. इससे आपके उपयोगकर्ताओं के लिए, पब्लिश किए गए आर्टफ़ैक्ट पर भरोसा करना आसान हो सकता है.
शुरू करने के बारे में जानकारी के लिए, फ़्यूज़्ड लाइब्रेरी की मदद से, एक से ज़्यादा Android लाइब्रेरी को एक के तौर पर पब्लिश करना लेख पढ़ें.
व्यवहार में बदलाव
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 क्लास की जगह इस्तेमाल की जाती है.
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) में एम्बेड किया गया है, तो मॉड्यूल कंपाइलेशन के दौरान ऐसे ग्लोबल विकल्पों को अनदेखा कर दिया जाएगा. यह कब होता है, यह देखने के लिए 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केHasUnitTestBuilderएक्सटेंड करने वाले सबटाइप पर,VariantBuilder.unitTestEnabledको हटा दिया गया है. इसकी जगह,enableUnitTestका इस्तेमाल किया जाएगा.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-rc02
| ठीक की गई समस्याएं | |
|---|---|
| AGP 9.0.0-rc02 में, सार्वजनिक तौर पर बताई गई किसी भी समस्या को 'ठीक की गई' के तौर पर मार्क नहीं किया गया है |
Android Gradle प्लगिन 9.0.0-rc01
| ठीक की गई समस्याएं | |
|---|---|
| AGP 9.0.0-rc01 में, सार्वजनिक तौर पर रिपोर्ट की गई किसी भी समस्या को 'ठीक की गई' के तौर पर मार्क नहीं किया गया है |
Android Gradle प्लगिन 9.0.0-beta05
| ठीक की गई समस्याएं | ||
|---|---|---|
| Android Gradle प्लगिन |
|
|
Android Gradle प्लगिन 9.0.0-beta04
| ठीक की गई समस्याएं | |||
|---|---|---|---|
| Android Gradle प्लगिन |
|
||
Android Gradle प्लगिन 9.0.0-beta03
| ठीक की गई समस्याएं | |
|---|---|
| AGP 9.0.0-beta03 में, सार्वजनिक तौर पर बताई गई किसी भी समस्या को 'ठीक की गई' के तौर पर मार्क नहीं किया गया है |
Android Gradle प्लगिन 9.0.0-beta02
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Android Gradle प्लगिन |
|
|||
| लिंट |
|
|||
| Lint इंटिग्रेशन |
|
|||
Android Gradle प्लगिन 9.0.0-beta01
| ठीक की गई समस्याएं | |
|---|---|
| AGP 9.0.0-beta01 में, सार्वजनिक तौर पर बताई गई किसी भी समस्या को 'ठीक की गई' के तौर पर मार्क नहीं किया गया है |
Android Gradle प्लग इन 9.0.0-alpha14
| ठीक की गई समस्याएं | |||||||
|---|---|---|---|---|---|---|---|
| Android Gradle प्लगिन |
|
||||||
| Lint इंटिग्रेशन |
|
||||||
| Shrinker (R8) |
|
||||||
Android Gradle प्लगिन 9.0.0-alpha13
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Android Gradle प्लगिन |
|
|||
Android Gradle प्लगिन 9.0.0-alpha12
| ठीक की गई समस्याएं | |||||
|---|---|---|---|---|---|
| Android Gradle प्लगिन |
|
||||
Android Gradle प्लगिन 9.0.0-alpha11
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Android Gradle प्लगिन |
|
|||
Android Gradle प्लगिन 9.0.0-alpha10
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Android Gradle प्लगिन |
|
|||
| लिंट |
|
|||
Android Gradle प्लगिन 9.0.0-alpha09
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Android Gradle प्लगिन |
|
|||
Android Gradle प्लगिन 9.0.0-alpha08
| ठीक की गई समस्याएं | |
|---|---|
| AGP 9.0.0-alpha08 में, सार्वजनिक तौर पर बताई गई किसी भी समस्या को 'ठीक की गई' के तौर पर मार्क नहीं किया गया है |
Android Gradle प्लगिन 9.0.0-alpha07
| ठीक की गई समस्याएं | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| Android Gradle प्लगिन |
|
||||||||
Android Gradle प्लगिन 9.0.0-alpha06
| ठीक की गई समस्याएं | |||||
|---|---|---|---|---|---|
| Android Gradle प्लगिन |
|
||||
| लिंट |
|
||||
Android Gradle प्लगिन 9.0.0-alpha05
| ठीक की गई समस्याएं | |||||
|---|---|---|---|---|---|
| Android Gradle प्लगिन |
|
||||
| लिंट |
|
||||
Android Gradle प्लग इन 9.0.0-alpha04
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Android Gradle प्लगिन |
|
|||
| लिंट |
|
|||
Android Gradle प्लग इन 9.0.0-alpha03
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Android Gradle प्लगिन |
|
|||
| लिंट |
|
|||
Android Gradle प्लगिन 9.0.0-alpha02
| ठीक की गई समस्याएं | ||||
|---|---|---|---|---|
| Android Gradle प्लगिन |
|
|||
Android Gradle प्लगिन 9.0.0-alpha01
| ठीक की गई समस्याएं | |||||||
|---|---|---|---|---|---|---|---|
| Android Gradle प्लगिन |
|
||||||