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

इस पेज पर, 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 एपीआई का इस्तेमाल करें. यह प्रोसेस ज़्यादा मुश्किल हो सकती है, क्योंकि 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 प्लगिन पर रनटाइम डिपेंडेंसी

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.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 क्लास की जगह इस्तेमाल की जाती है.
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) में एम्बेड किया गया है, तो मॉड्यूल कंपाइलेशन के दौरान ऐसे ग्लोबल विकल्पों को अनदेखा कर दिया जाएगा. यह कब होता है, यह देखने के लिए 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
  }
}
AIDL सोर्स वाले हर सबप्रोजेक्ट की Gradle बिल्ड फ़ाइल में
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-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 प्लगिन
AGP में Kotlin के लिए पहले से मौजूद सपोर्ट को Kotlin के सोर्ससेट के साथ सिंक नहीं किया जाना चाहिए

Android Gradle प्लगिन 9.0.0-beta04

ठीक की गई समस्याएं
Android Gradle प्लगिन
AGP में Kotlin के लिए पहले से मौजूद सपोर्ट को Kotlin के सोर्ससेट के साथ सिंक नहीं किया जाना चाहिए
missingDimensionStrategy, अपने नाम से मेल खाने वाले फ़्लेवर को प्राथमिकता देता है. भले ही, वह किसी ऐसे डाइमेंशन से मिला हो जो उससे जुड़ा न हो

Android Gradle प्लगिन 9.0.0-beta03

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

Android Gradle प्लगिन 9.0.0-beta02

ठीक की गई समस्याएं
Android Gradle प्लगिन
सुविधा का अनुरोध: एजीपी के सबसे सही वर्शन को प्रॉपर्टी के तौर पर इंजेक्ट करना
Stabilize SingleArtifact.VERSION_CONTROL_INFO_FILE
androidTest connectedCheck logcat output is broken
लिंट
AGP 8.11.0: apply(from = "...") के साथ .gradle.kts फ़ाइलें लागू करने पर, lintAnalyzeRelease टास्क क्रैश हो जाता है
Lint इंटिग्रेशन
systemPropertyInputs.javaVersion में अंतर होने की वजह से, अलग-अलग JDK वेंडर या माइनर वर्शन में AndroidLintAnalysisTask की कैश मेमोरी नहीं मिलती

Android Gradle प्लगिन 9.0.0-beta01

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

Android Gradle प्लग इन 9.0.0-alpha14

ठीक की गई समस्याएं
Android Gradle प्लगिन
AGP में Kotlin के लिए पहले से मौजूद सपोर्ट को Kotlin के सोर्ससेट के साथ सिंक नहीं किया जाना चाहिए
अगर उपभोक्ता की कीप फ़ाइल में -dontobfuscate शामिल है, तो Android लाइब्रेरी को पब्लिश नहीं किया जा सकता
ऑप्टिमाइज़ किए गए संसाधनों के लिए, मैपिंग प्रिंट करने के कोई विकल्प नहीं हैं
इस फ़ेज़ के पूरा होने के बाद, finalizeDsl को कॉल करने पर गड़बड़ी का मैसेज दिखेगा
AGP, Jetifier के बंद होने पर भी Jetifier कॉन्फ़िगरेशन शुरू करता है
kotlin में बनाया गया यह प्लगिन, kotlinStdlib को कंपाइल टाइम डिपेंडेंसी के तौर पर नहीं जोड़ता है. ऐसा तब होता है, जब `kotlin.stdlib.default.dependency` को मॉड्यूल और pom फ़ाइलों के लिए सही पर सेट किया गया हो
Lint इंटिग्रेशन
Lint, compileSdk के बावजूद इंस्टॉल किए गए नए SDK टूल का इस्तेमाल अपने-आप करता है. यह टास्क इनपुट के तौर पर रजिस्टर नहीं होता और कैश मेमोरी को तोड़ता है
Shrinker (R8)
फ़ाइनल रिसॉर्स आईडी का इस्तेमाल करने पर, R8 ऑप्टिमाइज़ किए गए रिसॉर्स को छोटा करने की सुविधा चुपचाप काम नहीं करती

Android Gradle प्लगिन 9.0.0-alpha13

ठीक की गई समस्याएं
Android Gradle प्लगिन
AGP9: `variant.sources.kotlin!!.addGeneratedSourceDirectory()` काम नहीं कर रहा है
AAR मेटाडेटा की जांच, कंपाइल एसडीके पर की जाती है. इसके लिए, पुराने डीएसएल का इस्तेमाल किया जाता है
हटा दी गई `com.android.build.api.dsl.ManagedDevices.devices` प्रॉपर्टी को हटाएं

Android Gradle प्लगिन 9.0.0-alpha12

ठीक की गई समस्याएं
Android Gradle प्लगिन
प्योर Java प्रोजेक्ट में, Kotlin stdlib पर डिपेंडेंसी होती है.
AGP 9.0 में, KotlinMultiplatformAndroidCompilationBuilder की बंद की गई प्रॉपर्टी हटा दी गई हैं
`com.android.tools.build:gradle:9.0.0-alpha05` में KGP और gradle-api पर एपीआई डिपेंडेंसी होनी चाहिए
com.android.experimental.built-in-kotlin Gradle प्लग इन का नाम बदलें

Android Gradle प्लगिन 9.0.0-alpha11

ठीक की गई समस्याएं
Android Gradle प्लगिन
Built-in-kotlin, maven pom में kotlin-stdlib डिपेंडेंसी की शर्त को पब्लिश नहीं करता
compileSdk और targetSdk के बीच अंतर के लिए, टेस्ट केस जोड़ें
resConfigs की वैल्यू खाली होने पर, aapt की गड़बड़ी दिखती है

Android Gradle प्लगिन 9.0.0-alpha10

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

Android Gradle प्लगिन 9.0.0-alpha09

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

Android Gradle प्लगिन 9.0.0-alpha05

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

Android Gradle प्लग इन 9.0.0-alpha04

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

Android Gradle प्लग इन 9.0.0-alpha03

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

Android Gradle प्लगिन 9.0.0-alpha02

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

Android Gradle प्लगिन 9.0.0-alpha01

ठीक की गई समस्याएं
Android Gradle प्लगिन
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 फ़्लैग हटाएं