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

इस पेज पर, Android Gradle प्लगिन (एजीपी) की प्रीव्यू रिलीज़ के लिए रिलीज़ नोट दिए गए हैं.

Android Gradle प्लगिन 9.0

Android Gradle प्लग इन 9.0, AGP का नया मेजर वर्शन है. इसमें एपीआई और व्यवहार से जुड़े बदलाव किए गए हैं.

Android Gradle प्लग-इन 9.0.0-alpha10 पर अपडेट करने के लिए, Android Studio Otter | 2025.2.1 में Android Gradle प्लग-इन अपग्रेड असिस्टेंट का इस्तेमाल करें.

AGP अपग्रेड असिस्टेंट, आपके प्रोजेक्ट को अपग्रेड करते समय मौजूदा व्यवहारों को बनाए रखने में मदद करता है. इससे आपको AGP 9.0 का इस्तेमाल करने के लिए, अपने प्रोजेक्ट को अपग्रेड करने की सुविधा मिलती है. भले ही, आप AGP 9.0 में सभी नए डिफ़ॉल्ट सेटिंग को अपनाने के लिए तैयार न हों.

इनके साथ काम करता है

Android Gradle प्लगिन 9.0.0-alpha10, Android के एपीआई लेवल 36 तक के वर्शन के साथ काम करता है.

Android Gradle प्लग इन 9.0.0-alpha10 के लिए, Gradle 9.0.0 की ज़रूरत होती है.

कम से कम वर्शन डिफ़ॉल्ट वर्शन नोट
Gradle 9.0.0 9.0.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 में काम नहीं करती. इन एपीआई के बदले कोई दूसरी सुविधा नहीं जोड़ी गई है.

अगर आपने 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 प्लग इन को बदला जा सकता है. इससे AGP के साथ इंटिग्रेशन आसान हो जाता है. साथ ही, बंद हो चुके एपीआई का इस्तेमाल करने से बचा जा सकता है और कुछ मामलों में परफ़ॉर्मेंस को बेहतर बनाया जा सकता है.

Android Gradle प्लग इन 9.0 में, Kotlin Gradle प्लग इन 2.2.10 पर रनटाइम डिपेंडेंसी होती है. यह Kotlin के साथ काम करने के लिए ज़रूरी कम से कम वर्शन है.

AGP 9.0 में Kotlin पहले से मौजूद होने की वजह से, Android Studio IDE में test-fixtures के लिए पूरी तरह से सहायता मिलती है. इस सुविधा को आज़माने के लिए, AGP 9.0.0-alpha07 या उसके बाद का वर्शन इस्तेमाल करें.

android.builtInKotlin=false को सेट करके, Kotlin में पहले से मौजूद सुविधाओं से ऑप्ट आउट किया जा सकता है.

अगर आपने बिल्ट-इन 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 को ऐक्सेस नहीं किया जा सकता.
falsetrue android.newDsl=false सेट करके, ऑप्ट आउट किया जा सकता है.
आपके प्रोजेक्ट में इस्तेमाल किए गए सभी प्लगिन और बिल्ड लॉजिक के साथ काम करने वाले प्लगिन उपलब्ध होने पर, ऑप्ट आउट करने की सुविधा हटा दें.
android.builtInKotlin Android Gradle प्लग इन में, सीधे Kotlin कोड को कंपाइल करने की सुविधा चालू की गई है. इसके लिए, org.jetbrains.kotlin.android प्लग इन की ज़रूरत नहीं है. falsetrue अगर हो सके, तो org.jetbrains.kotlin.android प्लगिन का इस्तेमाल बंद करके, Kotlin के साथ पहले से मौजूद सुविधाओं का इस्तेमाल करें. अगर ऐसा नहीं है, तो android.builtInKotlin=false को सेट करके ऑप्ट आउट करें
android.uniquePackageNames यह नियम लागू करता है कि हर लाइब्रेरी के लिए पैकेज का नाम अलग-अलग हो. falsetrue अपने प्रोजेक्ट में मौजूद सभी लाइब्रेरी के लिए, पैकेज के यूनीक नाम डालें. अगर ऐसा नहीं किया जा सकता, तो माइग्रेट करते समय इस फ़्लैग को बंद किया जा सकता है.
android.dependency.useConstraints यह कॉन्फ़िगरेशन के बीच, डिपेंडेंसी की शर्तों के इस्तेमाल को कंट्रोल करता है.
AGP 9.0 में डिफ़ॉल्ट वैल्यू false है. यह सिर्फ़ ऐप्लिकेशन डिवाइस टेस्ट (AndroidTest) में कंस्ट्रेंट का इस्तेमाल करता है. इसे true पर सेट करने से, 8.13 वर्शन के हिसाब से काम करने लगेगा.
truefalse जब तक ज़रूरी न हो, तब तक हर जगह डिपेंडेंसी की शर्तों का इस्तेमाल न करें. इस फ़्लैग के नए डिफ़ॉल्ट को स्वीकार करने से, प्रोजेक्ट इंपोर्ट करने की प्रोसेस में ऑप्टिमाइज़ेशन भी चालू हो जाते हैं. इससे, Android लाइब्रेरी वाले कई सबप्रोजेक्ट के साथ बिल्ड इंपोर्ट करने में लगने वाला समय कम हो जाता है.
aandroid.enableAppCompileTimeRClass ऐप्लिकेशन में, नॉन-फ़ाइनल आर क्लास के ख़िलाफ़ कोड कंपाइल किया जाता है. इससे ऐप्लिकेशन कंपाइलेशन, लाइब्रेरी कंपाइलेशन के मुताबिक हो जाता है.
इससे इंक्रीमेंटैलिटी बेहतर होती है. साथ ही, संसाधन प्रोसेसिंग फ़्लो की परफ़ॉर्मेंस को आने वाले समय में ऑप्टिमाइज़ करने का रास्ता खुलता है.
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 सेट करके ऑप्ट आउट करें. जब आपकी सभी उपभोक्ता फ़ाइलें, Keep फ़ाइलों के साथ काम करने लगें, तब ऑप्ट आउट करने की सुविधा हटा दें.

हटाई गई सुविधाएं

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

बदला गया डीएसएल

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 में ये सुविधाएं हटा दी गई हैं:

हटाए गए एपीआई

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 Gradle प्लगिन 9.0.0-alpha10

ठीक की गई समस्याएं
Android Gradle Plugin
extractNativeLibs और useEmbeddedDex को मेनिफ़ेस्ट से नहीं लिया जाना चाहिए
AGP 9.0.0-alpha09 में R8 से मिलने वाली चेतावनियां
लिंट
Kotlin में .kotlin_module को META-INF में नहीं जोड़ा जाता
Lint क्लासपाथ में अलग-अलग वर्शन में डुप्लीकेट क्लास मौजूद हैं
निजी संसाधनों को बदलने का तरीका काम नहीं कर रहा है (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 API का इस्तेमाल करता है: मल्टी-स्ट्रिंग नोटेशन
minSdkVersion >=21 के साथ लेगसी मल्टीडेक्स लाइब्रेरी का इस्तेमाल करने की कोशिश करने वाले उपयोगकर्ताओं को चेतावनी दें
लिंट
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 का एक्सप्लिसिट एपीआई मोड लागू किया गया
लिंट
लिंट में "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 प्लगिन को लागू करते समय, बेहतर अपवाद.
लिंट
लिंट में "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 के इस्तेमाल को मर्ज नहीं कर पाता
जेवीएम टेस्ट टास्क के लिए, Gradle में AGP की वजह से डेप्रिकेशन की चेतावनियां दिख रही हैं
DependencyReportTask, कॉन्फ़िगरेशन कैश मेमोरी के साथ काम नहीं करता
लिंट
बग: इस्तेमाल नहीं किए गए संसाधनों को हटाने पर, उनके अनुवाद भी नहीं हटते. साथ ही, इस बारे में पूछा भी नहीं जाता

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 फ़्लैग हटाएं