Android Gradle प्लग इन की झलक के बारे में जानकारी वाला दस्तावेज़

इस पेज पर, 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 एपीआई का इस्तेमाल करें. यह प्रोसेस ज़्यादा मुश्किल हो सकती है, क्योंकि androidComponents API को ज़्यादा स्थिर बनाने के लिए डिज़ाइन किया गया है, ताकि प्लगिन लंबे समय तक काम कर सकें. उदाहरणों के लिए, हमारी 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.newDsl android ब्लॉक के लेगसी वर्शन को दिखाए बिना, नए डीएसएल इंटरफ़ेस का इस्तेमाल करें.
इसका यह भी मतलब है कि अब लेगसी वैरिएंट एपीआई, जैसे कि android.applicationVariants को ऐक्सेस नहीं किया जा सकता.
falsetrue android.newDsl=false सेट करके, इससे ऑप्ट आउट किया जा सकता है.
आपके प्रोजेक्ट में इस्तेमाल किए गए सभी प्लगिन और बिल्ड लॉजिक के साथ काम करने वाले प्लगिन उपलब्ध होने पर, ऑप्ट आउट करने की सुविधा हटा दें.
android.builtInKotlin इस विकल्प को चुनने पर, Kotlin में पहले से मौजूद सुविधाएं चालू हो जाती हैं falsetrue अगर हो सके, तो बिल्ट-इन Kotlin पर माइग्रेट करें या ऑप्ट आउट करें.
android.uniquePackageNames यह नियम लागू करता है कि हर लाइब्रेरी का पैकेज का नाम अलग हो. falsetrue अपने प्रोजेक्ट में मौजूद सभी लाइब्रेरी के लिए, पैकेज के यूनीक नाम तय करें. अगर ऐसा नहीं किया जा सकता, तो माइग्रेट करते समय इस फ़्लैग को बंद किया जा सकता है.
android.useAndroidx डिफ़ॉल्ट रूप से androidx डिपेंडेंसी का इस्तेमाल करें. falsetrue androidx डिपेंडेंसी का इस्तेमाल करें.
android.default.androidx.test.runner डिफ़ॉल्ट रूप से androidx.test.runner.AndroidJUnitRunner क्लास का इस्तेमाल करके, डिवाइस पर टेस्ट चलाएं. इससे, बंद हो चुकी InstrumentationTestRunner क्लास के डिफ़ॉल्ट इस्तेमाल की जगह androidx.test.runner.AndroidJUnitRunner क्लास का इस्तेमाल किया जा सकेगा
android {
  defaultConfig {
    testInstrumentationRunner = "..."
  }
}
falsetrue AndroidJUnitRunner को अपनाएं या अपने कस्टम testInstrumentationRunner को साफ़ तौर पर बताएं.
android.dependency.useConstraints यह कॉन्फ़िगरेशन के बीच, डिपेंडेंसी की शर्तों के इस्तेमाल को कंट्रोल करता है.
AGP 9.0 में डिफ़ॉल्ट वैल्यू false है. यह सिर्फ़ ऐप्लिकेशन डिवाइस टेस्ट (AndroidTest) में कंस्ट्रेंट का इस्तेमाल करता है. इसे true पर सेट करने से, 8.13 वर्शन के हिसाब से काम करने लगेगा.
truefalse जब तक ज़रूरी न हो, तब तक हर जगह डिपेंडेंसी की शर्तों का इस्तेमाल न करें. इस फ़्लैग की नई डिफ़ॉल्ट वैल्यू को स्वीकार करने से, प्रोजेक्ट इंपोर्ट करने की प्रोसेस में ऑप्टिमाइज़ेशन भी चालू हो जाते हैं. इससे, कई Android लाइब्रेरी सबप्रोजेक्ट वाली बिल्ड को इंपोर्ट करने में लगने वाला समय कम हो जाता है.
android.enableAppCompileTimeRClass ऐप्लिकेशन में, नॉन-फ़ाइनल R क्लास के ख़िलाफ़ कोड कंपाइल किया जाता है. इससे ऐप्लिकेशन कंपाइलेशन, लाइब्रेरी कंपाइलेशन के मुताबिक हो जाता है.
इससे परफ़ॉर्मेंस में बढ़ोतरी होती है. साथ ही, संसाधन प्रोसेसिंग फ़्लो को ऑप्टिमाइज़ करने के लिए, आने वाले समय में बेहतर तरीके से काम किया जा सकता है.
falsetrue कई प्रोजेक्ट, सोर्स कोड में बदलाव किए बिना ही नई सुविधा का इस्तेमाल कर सकते हैं. अगर R क्लास के फ़ील्ड का इस्तेमाल ऐसी किसी जगह पर किया जाता है जहां कॉन्स्टेंट की ज़रूरत होती है, जैसे कि स्विच केस, तो चेन किए गए if स्टेटमेंट का इस्तेमाल करने के लिए रीफ़ैक्टर करें.
android.sdk.defaultTargetSdkToCompileSdkIfUnset यह ऐप्लिकेशन और टेस्ट में, टारगेट एसडीके वर्शन के लिए डिफ़ॉल्ट वैल्यू के तौर पर कंपाइल एसडीके वर्शन का इस्तेमाल करता है.
इस बदलाव से पहले, टारगेट SDK टूल का वर्शन डिफ़ॉल्ट रूप से, SDK टूल के कम से कम लेवल वाले वर्शन पर सेट होता था.
falsetrue ऐप्लिकेशन और टेस्ट के लिए, टारगेट एसडीके वर्शन साफ़ तौर पर बताएं.
android.onlyEnableUnitTestForTheTestedBuildType यह सिर्फ़ टेस्ट किए गए बिल्ड टाइप के लिए यूनिट टेस्ट कॉम्पोनेंट बनाता है.
डिफ़ॉल्ट प्रोजेक्ट में, इससे डीबग के लिए एक यूनिट टेस्ट मिलती है, जबकि पहले डीबग या रिलीज़ के लिए यूनिट टेस्ट की जाती थीं.
falsetrue अगर आपके प्रोजेक्ट में डीबग और रिलीज़, दोनों के लिए टेस्ट चलाने की ज़रूरत नहीं है, तो कोई बदलाव करने की ज़रूरत नहीं है.
android.proguard.failOnMissingFiles अगर एजीपी डीएसएल में बताई गई कोई भी फ़ाइल डिस्क पर मौजूद नहीं है, तो यह विकल्प गड़बड़ी के साथ बिल्ड को पूरा नहीं करता. इस बदलाव से पहले, फ़ाइल के नाम में टाइप की गई गलतियों की वजह से फ़ाइलों को अनदेखा कर दिया जाता था. falsetrue proguard.txt फ़ाइल में किए गए अमान्य एलान हटाएं
android.r8.optimizedResourceShrinking इस विकल्प की मदद से, R8 को कम Android संसाधन रखने की अनुमति मिलती है. ऐसा इसलिए, क्योंकि यह क्लास और Android संसाधनों, दोनों पर एक साथ विचार करता है. falsetrue अगर आपके प्रोजेक्ट के डेटा को सुरक्षित रखने से जुड़े नियम पहले से ही पूरे हैं, तो कोई बदलाव करने की ज़रूरत नहीं है.
android.r8.strictFullModeForKeepRules इस विकल्प की मदद से, R8 किसी क्लास को बनाए रखते समय डिफ़ॉल्ट कंस्ट्रक्टर को बनाए रखने की ज़रूरत नहीं होती. इससे R8 को कम मेमोरी की ज़रूरत पड़ती है. इसका मतलब है कि -keep class A का मतलब अब -keep class A { <init>(); }
नहीं है
falsetrue अगर आपके प्रोजेक्ट के डेटा को सुरक्षित रखने से जुड़े नियम पहले से ही पूरे हैं, तो कोई बदलाव करने की ज़रूरत नहीं है.

बदलें -keep class A को -keep class A { <init>(); } अपने प्रोजेक्ट के कीप नियमों में. ऐसा उन मामलों में करें जहां आपको डिफ़ॉल्ट कंस्ट्रक्टर को बनाए रखने की ज़रूरत है.
android.defaults.buildfeatures.resvalues सभी सबप्रोजेक्ट में resValues चालू करता है truefalse resValues को सिर्फ़ उन सबप्रोजेक्ट में चालू करें जिनमें इसकी ज़रूरत है. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह सेटिंग करें:
android {
  buildFeatures {
    resValues = true
  }
}
android.defaults.buildfeatures.shaders इस विकल्प से, सभी सबप्रोजेक्ट में शेडर कंपाइलेशन की सुविधा चालू हो जाती है truefalse सिर्फ़ उन सबप्रोजेक्ट में शेडर कंपाइलेशन चालू करें जिनमें कंपाइल किए जाने वाले शेडर मौजूद हैं. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह सेटिंग करें:
android {
  buildFeatures {
    shaders = true
  }
}
android.r8.proguardAndroidTxt.disallowed AGP 9.0 में, getDefaultProguardFile() सिर्फ़ proguard-android-optimize.txt के साथ काम करेगा, न कि proguard-android.txt के साथ. ऐसा इसलिए किया गया है, ताकि ­dontoptimize फ़्लैग का इस्तेमाल गलती से न हो. यह फ़्लैग, proguard-android.txt में शामिल है. falsetrue अगर आपको ऑप्टिमाइज़ेशन से बचना है, तो ­dontoptimize का इस्तेमाल करने के साथ-साथ, कस्टम proguardFile में ­dontoptimize को साफ़ तौर पर बताया जा सकता है.proguard-android-optimize.txt अगर हो सके, तो इस फ़ाइल से ­dontoptimize फ़्लैग हटा दें. इससे R8 ऑप्टिमाइज़ेशन के फ़ायदे कम हो जाते हैं. अगर ऐसा नहीं है, तो android.r8.globalOptionsInConsumerRules.disallowed=false को सेट करके ऑप्ट आउट करें.
android.r8.globalOptionsInConsumerRules.disallowed 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 falsetrue पब्लिश की गई लाइब्रेरी में, काम न करने वाले नियमों को हटा देना चाहिए. इंटरनल लाइब्रेरी को, काम न करने वाले लेकिन ज़रूरी नियमों को ऐप्लिकेशन मॉड्यूल में proguardFile में ले जाना चाहिए. android.r8.globalOptionsInConsumerRules.disallowed=false सेट करके ऑप्ट आउट करें. जब आपकी सभी उपभोक्ता जानकारी वाली फ़ाइलें, ज़रूरी शर्तों के मुताबिक हो जाएं, तब ऑप्ट आउट करने का विकल्प हटा दें.
android.sourceset.disallowProvider AndroidSourceSet डीएसएल का इस्तेमाल करके, जनरेट किए गए सोर्स के लिए पासिंग प्रोवाइडर को अनुमति न दें. falsetrue जनरेट किए गए सोर्स रजिस्टर करने के लिए, androidComponents पर Sources एपीआई का इस्तेमाल करें.
android.custom.shader.path.required अगर शेडर कंपाइलेशन चालू है, तो local.properties में शेडर कंपाइलर का पाथ साफ़ तौर पर सेट करना ज़रूरी है. falsetrue अपने प्रोजेक्ट के 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 में ये सुविधाएं हटा दी गई हैं:

हटाए गए एपीआई

Android Gradle प्लग इन 9.0 में ये सुविधाएं हटा दी गई हैं:

हटाई गई Gradle प्रॉपर्टी

शुरुआत में, इन Gradle प्रॉपर्टी को ग्लोबल लेवल पर जोड़ा गया था. ऐसा इसलिए किया गया था, ताकि डिफ़ॉल्ट रूप से चालू होने वाली सुविधाओं को बंद किया जा सके.

AGP 8.0 या इससे पहले के वर्शन में, ये सुविधाएं डिफ़ॉल्ट रूप से बंद कर दी गई हैं. इन सुविधाओं को सिर्फ़ उन उप-प्रोजेक्ट में चालू करें जिनमें इनका इस्तेमाल किया जाता है, ताकि ज़्यादा असरदार तरीके से बनाया जा सके.

प्रॉपर्टी फ़ंक्शन प्रतिस्थापन
android.defaults.buildfeatures.aidl यह सभी सबप्रोजेक्ट में AIDL कंपाइलेशन की सुविधा चालू करता है सिर्फ़ उन सबप्रोजेक्ट में AIDL कंपाइलेशन चालू करें जिनमें AIDL सोर्स मौजूद हैं. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह प्रॉपर्टी सेट करें:
android {
  buildFeatures {
    aidl = true
  }
}
हर उस सबप्रोजेक्ट की Gradle बिल्ड फ़ाइल में जिसमें AIDL सोर्स शामिल हैं
android.defaults.buildfeatures.renderscript इससे सभी सबप्रोजेक्ट में RenderScript कंपाइलेशन चालू हो जाता है सिर्फ़ उन सबप्रोजेक्ट में renderscript कंपाइलेशन चालू करें जिनमें renderscript सोर्स मौजूद हैं. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह प्रॉपर्टी सेट करें:
android {
  buildFeatures {
    renderScript = true
  }
}

लागू की गई Gradle प्रॉपर्टी

अगर आपने नीचे दी गई Gradle प्रॉपर्टी सेट की हैं, तो AGP 9.0 में गड़बड़ी होगी.

Android Gradle प्लगिन अपग्रेड असिस्टेंट, इन प्रॉपर्टी का इस्तेमाल करने वाले प्रोजेक्ट को AGP 9.0 पर अपग्रेड नहीं करेगी.

प्रॉपर्टी फ़ंक्शन
android.r8.integratedResourceShrinking संसाधन कम करने की प्रोसेस अब हमेशा R8 के हिस्से के तौर पर चलती है. पिछले वर्शन को हटा दिया गया है.
android.enableNewResourceShrinker.preciseShrinking इस्तेमाल नहीं किए जाने वाले रिसॉर्स को हटाने की प्रोसेस में अब हमेशा सटीक तरीके से रिसॉर्स हटाए जाते हैं. इससे ज़्यादा रिसॉर्स हटाए जा सकते हैं.

ठीक की गई समस्याएं

Android Gradle प्लगिन 9.0.0-alpha10

ठीक की गई समस्याएं
Android Gradle Plugin
extractNativeLibs और useEmbeddedDex को मेनिफ़ेस्ट से नहीं लिया जाना चाहिए
AGP 9.0.0-alpha09 में R8 से मिलने वाली चेतावनियां
Lint
Kotlin में .kotlin_module को META-INF में नहीं जोड़ा जाता
Lint classpath में अलग-अलग वर्शन की डुप्लीकेट क्लास मौजूद हैं
निजी संसाधनों को बदलने का तरीका काम नहीं कर रहा है (tools:override = "true")

Android Gradle प्लगिन 9.0.0-alpha09

ठीक की गई समस्याएं
Android Gradle Plugin
`legacy-kapt` प्लगिन, `kotlin-kapt` के उलट एनोटेशन प्रोसेसिंग को स्किप कर देता है
compileSdkSpec.minorApiLevel, SettingsExtension के साथ काम नहीं कर रहा है
[fused lib - public] Generated fused library does not include sources

Android Gradle प्लगिन 9.0.0-alpha08

ठीक की गई समस्याएं
AGP 9.0.0-alpha08 में, सार्वजनिक तौर पर बताई गई किसी भी समस्या को 'ठीक की गई' के तौर पर मार्क नहीं किया गया है

Android Gradle प्लगिन 9.0.0-alpha07

ठीक की गई समस्याएं
Android Gradle Plugin
कोड जनरेट करने वाले टास्क मौजूद होने पर, बिल्ड नहीं हो पाता
`android.builtInKotlin=false`, `android.newDsl=false`, और `android.enableLegacyVariantApi=false` के साथ, `kotlin-android` प्लगिन का इस्तेमाल करने पर, "API 'applicationVariants' अब काम नहीं करता" मैसेज दिखेगा
kotlin.stdlib.default.dependency=false होने पर, Kotlin में पहले से मौजूद कंपाइलर, बिना वर्शन वाले kotlin-stdlib को हल नहीं कर पाता
DexData, फ़ाइल को बंद किए बिना खोलता है. इससे फ़ाइल को मिटाने में समस्या आती है
AGP 9.0 में, AndroidSourceDirectorySet को PatternFilterable का इस्तेमाल करना बंद कर देना चाहिए
सिर्फ़ टेस्ट मॉड्यूल में टेस्ट फ़िक्चर से जुड़ी गड़बड़ी
टेस्ट फ़िक्चर में कॉन्टेक्स्ट रिसीवर का इस्तेमाल करते समय गलत गड़बड़ी
testFixtures में Kotlin कोड के लिए, आईडीई से जुड़ी गलत गड़बड़ियां

Android Gradle प्लगिन 9.0.0-alpha06

ठीक की गई समस्याएं
Android Gradle Plugin
नया ऑप्टिमाइज़ेशन डीएसएल, डिफ़ॉल्ट रूप से configuration.txt फ़ाइल नहीं बनाता
AGP 8.13.0, किसी मॉड्यूल में नेविगेशन ग्राफ़ की पुष्टि नहीं कर पाता
AGP, Gradle के बंद किए जा चुके एपीआई का इस्तेमाल करता है: मल्टी-स्ट्रिंग नोटेशन
minSdkVersion >=21 के साथ लेगसी मल्टीडेक्स लाइब्रेरी का इस्तेमाल करने की कोशिश करने वाले उपयोगकर्ताओं को चेतावनी दें
Lint
Lint ChecksSdkIntAtLeast Check यह नहीं देखता कि एनोटेट की गई वैल्यू सही है या नहीं

Android Gradle प्लगिन 9.0.0-alpha05

ठीक की गई समस्याएं
Android Gradle Plugin
android.proguard.failOnMissingFiles, consumerProguardFiles के लिए काम नहीं कर रहा है
Kotlin Gradle प्लगिन की डिपेंडेंसी को 2.2.10 पर अपडेट करें
KGP API का इस्तेमाल करके KotlinJvmAndroidCompilation बनाना
टेस्ट सोर्स पर Kotlin का एक्सप्लिसिट एपीआई मोड लागू किया गया
Lint
लिंट में "Could not clean up K2 caches" चेतावनी दिख रही है

Android Gradle प्लग इन 9.0.0-alpha04

ठीक की गई समस्याएं
Android Gradle Plugin
AGP 9.0 में, डिफ़ॉल्ट सोर्स/टारगेट Java वर्शन को Java 8 से Java 11 पर स्विच करना
android.useAndroidX की डिफ़ॉल्ट वैल्यू को true पर सेट करें
Kotlin में पहले से मौजूद kapt प्लगिन को लागू करते समय, बेहतर अपवाद.
Lint
लिंट में "Could not clean up K2 caches" चेतावनी दिख रही है

Android Gradle प्लग इन 9.0.0-alpha03

ठीक की गई समस्याएं
Android Gradle Plugin
`isIncludeAndroidResources` चालू होने पर, `process{Variant}UnitTestManifest` AGP 8.12.0 में tools:overrideLibrary के इस्तेमाल को मर्ज नहीं कर पाता
AGP की वजह से, Gradle में JVM टेस्ट टास्क के लिए, बंद होने की चेतावनियां दिख रही हैं
DependencyReportTask, कॉन्फ़िगरेशन कैश मेमोरी के साथ काम नहीं करता
Lint
बग: इस्तेमाल नहीं किए गए संसाधनों को हटाने पर, उनके अनुवाद भी नहीं हटते. साथ ही, इस बारे में पूछा भी नहीं जाता

Android Gradle प्लगिन 9.0.0-alpha02

ठीक की गई समस्याएं
Android Gradle Plugin
proguard फ़ाइल मौजूद न होने पर, बिल्ड नहीं हो पाता
remove buildconfig defaults gradle.properties flags
ऐप्लिकेशन के targetSdk की डिफ़ॉल्ट वैल्यू को minSdk के बजाय compileSdk पर आधारित करने के लिए बदलें

Android Gradle प्लगिन 9.0.0-alpha01

ठीक की गई समस्याएं
Android Gradle Plugin
AGP 9.0 में AndroidSourceSet.jni को हटाना
AGP 9.0 में Installation.installOptions() को हटाना
AGP 9.0 में BuildType.isRenderscriptDebuggable को हटा दिया गया है.
android.defaults.buildfeatures.renderscript को हटाएं
Gradle मैनेज किए गए डिवाइसों के साथ `com.android.kotlin.multiplatform.library` क्रैश हो जाता है
`android.defaults.buildfeatures.aidl` डिफ़ॉल्ट gradle.properties फ़्लैग हटाएं