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

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

Android Gradle प्लग इन 9.0

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

Android Gradle प्लग इन 9.0.0-alpha04 पर अपडेट करने के लिए, Android Studio Narwhal 4 Feature Drop | 2025.1.4 में Android Gradle प्लग इन अपग्रेड असिस्टेंट का इस्तेमाल करें.

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

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

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

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

कम से कम वर्शन डिफ़ॉल्ट वर्शन नोट
Gradle 9.0.0 9.0.0 ज़्यादा जानने के लिए, Gradle को अपडेट करने का तरीका देखें.
एसडीके बिल्ड टूल 36.0.0 36.0.0 एसडीके बिल्ड टूल इंस्टॉल करें या कॉन्फ़िगर करें.
एनडीके लागू नहीं 28.2.13676358 एनडीके का कोई दूसरा वर्शन इंस्टॉल करें या कॉन्फ़िगर करें.
जेडीके 17 17 ज़्यादा जानने के लिए, जेडीके वर्शन सेट करना लेख पढ़ें.

इंटरनल डीएसएल लागू करने और बंद किए गए वैरिएंट एपीआई के लिए, अब साफ़ तौर पर ऑप्ट इन करना ज़रूरी है

Android Gradle प्लगिन में अब एक तय एपीआई सर्फ़ेस है. इसमें काम करने वाले एपीआई, com.android.tools.build:gradle-api maven आर्टफ़ैक्ट में तय किए गए हैं.

मौजूदा बाइनरी प्लगिन और बिल्ड स्क्रिप्ट के साथ काम करने के लिए, एपीआई की तय की गई सतह से पहले के डीएसएल को AGP 8.13 और इससे पहले के वर्शन में डिफ़ॉल्ट रूप से दिखाया जाता था. इससे Gradle प्लगिन और बिल्ड स्क्रिप्ट में मौजूद कोड, डीएसएल की इंटरनल इंप्लीमेंटेशन की जानकारी के साथ-साथ, बंद किए गए android.applicationVariants, android.libraryVariants, android.testVariants, और android.unitTestVariants एपीआई को भी ऐक्सेस कर सकता है. इन एपीआई को AGP 10 में 2026 में हटा दिया जाएगा.

इस बदलाव को ज़्यादा बेहतर तरीके से दिखाने के लिए, Android Gradle प्लग इन 9.0.0-alpha04 में, लेगसी वैरिएंट एपीआई और इंटरनल डीएसएल, दोनों को डिफ़ॉल्ट रूप से ऐक्सेस नहीं किया जा सकता.

हटाए गए एपीआई का इस्तेमाल करने के लिए, gradle.properties में android.newDsl=false सेट करके, फिर से ऑप्ट-इन किया जा सकता है.

हम 9.0 ऐल्फ़ा सीरीज़ के दौरान, प्लग इन बनाने वाले लोगों से संपर्क कर रहे हैं. इससे उन्हें ऐसे प्लग इन बनाने और रिलीज़ करने में मदद मिलेगी जो नए मोड के साथ पूरी तरह से काम करते हैं. साथ ही, हम Android Studio में AGP अपग्रेड असिस्टेंट को बेहतर बनाएंगे, ताकि आपको माइग्रेट करने में मदद मिल सके.

Kotlin में पहले से मौजूद

Android Gradle प्लग इन 9 में, Kotlin को कंपाइल करने की सुविधा पहले से मौजूद है. इससे अलग से लागू किए गए Kotlin प्लग इन की जगह ले ली जाती है. इससे AGP के साथ इंटिग्रेशन आसान हो जाता है. साथ ही, बंद हो चुके एपीआई का इस्तेमाल करने से बचा जा सकता है और कुछ मामलों में परफ़ॉर्मेंस को बेहतर बनाया जा सकता है.

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

android.builtInKotlin=false को सेट करके, Kotlin में पहले से मौजूद सुविधाओं से ऑप्ट आउट किया जा सकता है. अगर आपने ऑप्ट आउट कर दिया है और आपको kotlin Gradle प्लगिन के पुराने वर्शन का इस्तेमाल करना है, तो वर्शन को डाउनग्रेड किया जा सकता है

buildscript {
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
            version { strictly("2.0.0") } // or another version that you want to use
        }
    }
}

व्यवहार में बदलाव

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

व्यवहार सुझाव
Android Gradle प्लग इन 9.0, डिफ़ॉल्ट रूप से NDK के r28c वर्शन का इस्तेमाल करता है. आपको जिस NDK वर्शन का इस्तेमाल करना है उसे साफ़ तौर पर बताएं.
Android Gradle प्लग इन 9.0 में, लाइब्रेरी का इस्तेमाल करने वाले लोगों को डिफ़ॉल्ट रूप से, कंपाइल एसडीके के एक ही या इससे ज़्यादा वर्शन का इस्तेमाल करना होता है. किसी लाइब्रेरी का इस्तेमाल करते समय, उसी या उससे ज़्यादा कंपाइल SDK टूल का इस्तेमाल करें. अगर ऐसा नहीं किया जा सकता या आपको लाइब्रेरी का इस्तेमाल करने वाले लोगों को स्विच करने के लिए ज़्यादा समय देना है, तो AarMetadata.minCompileSdk को साफ़ तौर पर सेट करें.

AGP 9.0 में, Gradle की इन प्रॉपर्टी की डिफ़ॉल्ट वैल्यू अपडेट की गई हैं. इससे आपको अपग्रेड करते समय, AGP 8.13 के व्यवहार को बनाए रखने का विकल्प मिलता है:

प्रॉपर्टी फ़ंक्शन AGP 8.13 से AGP 9.0 में बदलाव सुझाव
android.newDsl android ब्लॉक के लेगसी वर्शन को दिखाए बिना, नए डीएसएल इंटरफ़ेस का इस्तेमाल करें.
इसका यह भी मतलब है कि अब लेगसी वैरिएंट एपीआई, जैसे कि android.applicationVariants को ऐक्सेस नहीं किया जा सकता.
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 ऐप्लिकेशन में, नॉन-फ़ाइनल 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.shaders इस विकल्प से, सभी सबप्रोजेक्ट में शेडर कंपाइल करने की सुविधा चालू हो जाती है truefalse सिर्फ़ उन सबप्रोजेक्ट में शेडर कंपाइलेशन चालू करें जिनमें कंपाइल किए जाने वाले शेडर मौजूद हैं. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह सेटिंग करें:
android {
  buildFeatures {
    shaders = true
  }
}

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

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

हटाई गई 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
  }
}

हटाए गए एपीआई

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

  • बंद किए गए और बंद किए गए BaseExtension.registerTransform एपीआई. इनका इस्तेमाल सिर्फ़ इसलिए किया जाता था, ताकि AGP 4.2 या इससे पहले के वर्शन पर चलने वाले ऐप्लिकेशन को टारगेट करते समय, उन्हें AGP के सबसे नए वर्शन के साथ कंपाइल किया जा सके.

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

अगर आपने Gradle की इन प्रॉपर्टी को सेट किया है, तो AGP 9.0 में गड़बड़ी होगी.

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

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