Android Gradle प्लगिन 9.0.1 (जनवरी 2026)

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

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

अपग्रेड करने की प्रोसेस को आसान बनाने के लिए, एजेंट के पास दो कौशल भी उपलब्ध हैं. अगर आपको KMP के अलावा किसी दूसरे ऐप्लिकेशन के लिए, AGP 9 को अपग्रेड करने का तरीका जानना है, तो Android skills repository पर जाएं. KMP ऐप्लिकेशन के लिए, JetBrains की AGP 9 अपग्रेड करने की सुविधा आज़माएं. Android Studio में स्किल इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, स्किल की मदद से एजेंट मोड को बेहतर बनाना लेख पढ़ें.

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

Android Gradle प्लगिन 9.0, ज़्यादा से ज़्यादा एपीआई लेवल 36.1 के साथ काम करता है. Android Gradle प्लगिन 8.6 के साथ काम करने वाले टूल वर्शन से जुड़ी अन्य ज़रूरी जानकारी यहां देखें:

सबसे पुराना वर्शन डिफ़ॉल्ट वर्शन नोट
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 लाइब्रेरी के लिए एपीआई के तौर पर इसे उपलब्ध कराने के लिए, AIDL फ़ाइलों को AAR में पैकेज किया जाता है. साथ ही, ऐसा उन ऐप्लिकेशन के लिए भी किया जाता है जो इस लाइब्रेरी पर निर्भर हैं. यह अब भी 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 में, पिछली क्लास को बंद किए गए के तौर पर मार्क किया गया है. इसका मतलब है कि जिन प्रोजेक्ट ने newDsl फ़्लैग से ऑप्ट आउट किया है उन्हें बंद होने की चेतावनियां दिखेंगी. ये चेतावनियां, newDsl ब्लॉक पर भी दिखेंगी.android

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

हम सबसे ज़्यादा इस्तेमाल किए जाने वाले प्लगिन के लेखकों से संपर्क कर रहे हैं, ताकि वे नए मोड के साथ पूरी तरह से काम करने वाले प्लगिन को अडैप्ट और रिलीज़ कर सकें. साथ ही, हम 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 के नए वर्शन का इस्तेमाल करने के लिए, टॉप-लेवल की build फ़ाइल में यह जानकारी जोड़ें:

buildscript {
    dependencies {
        // For KGP
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:KGP_VERSION")

        // For KSP
        classpath("com.google.devtools.ksp:symbol-processing-gradle-plugin:KSP_VERSION")
    }
}

KGP के पुराने वर्शन पर डाउनग्रेड करना

KGP के वर्शन को सिर्फ़ तब डाउनग्रेड किया जा सकता है, जब आपने बिल्ट-इन Kotlin से ऑप्ट आउट किया हो. ऐसा इसलिए है, क्योंकि AGP 9.0 में डिफ़ॉल्ट रूप से 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.devtools.ksp:symbol-processing-gradle-plugin") {
            version { strictly("KSP_VERSION") }
        }
    }
}

ध्यान दें कि KGP के 2.0.0 वर्शन पर डाउनग्रेड किया जा सकता है.

टेस्ट फ़िक्चर के लिए IDE की सुविधा

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 यह ऐप्लिकेशन और टेस्ट में, टारगेट एसडीके के वर्शन के लिए डिफ़ॉल्ट वैल्यू के तौर पर, कंपाइल एसडीके के वर्शन का इस्तेमाल करता है.
इस बदलाव से पहले, टारगेट एसडीके वर्शन डिफ़ॉल्ट रूप से, एसडीके के कम से कम वर्शन पर सेट होता था.
falsetrue ऐप्लिकेशन और टेस्ट के लिए, टारगेट SDK टूल का वर्शन साफ़ तौर पर बताएं.
android.onlyEnableUnitTestForTheTestedBuildType यह सिर्फ़ टेस्ट किए गए बिल्ड टाइप के लिए यूनिट टेस्ट कॉम्पोनेंट बनाता है.
डिफ़ॉल्ट प्रोजेक्ट में, इससे डीबग के लिए एक यूनिट टेस्ट मिलती है. हालांकि, पहले डीबग या रिलीज़ के लिए यूनिट टेस्ट चलाई जाती थीं.
falsetrue अगर आपके प्रोजेक्ट में डीबग और रिलीज़, दोनों के लिए टेस्ट चलाने की ज़रूरत नहीं है, तो कोई बदलाव करने की ज़रूरत नहीं है.
android.proguard.failOnMissingFiles अगर AGP DSL में बताई गई कोई भी कीप फ़ाइल डिस्क पर मौजूद नहीं है, तो यह विकल्प गड़बड़ी के साथ बिल्ड को पूरा नहीं करता. इस बदलाव से पहले, फ़ाइल के नाम में टाइप की गई गलतियों की वजह से फ़ाइलों को अनदेखा कर दिया जाता था. falsetrue proguard फ़ाइलों के अमान्य एलान हटाएं
android.r8.optimizedResourceShrinking इस विकल्प की मदद से, R8 को कम Android संसाधनों को बनाए रखने की अनुमति मिलती है. इसके लिए, वह क्लास और Android संसाधनों, दोनों पर एक साथ विचार करता है. falsetrue अगर आपके प्रोजेक्ट के डेटा को सुरक्षित रखने से जुड़े नियम पहले से ही पूरे हैं, तो कोई बदलाव करने की ज़रूरत नहीं है.
android.r8.strictFullModeForKeepRules इस विकल्प की मदद से, 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 DSL को हटाना शामिल है. 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 इस्तेमाल नहीं किए जाने वाले रिसॉर्स को हटाने की प्रोसेस में अब हमेशा सटीक तरीके से रिसॉर्स हटाए जाते हैं. इससे ज़्यादा रिसॉर्स हटाए जा सकते हैं.

R8 में हुए बदलाव

AGP 9.0.0 में, R8 से जुड़े ये बदलाव शामिल हैं.

कॉन्फ़िगरेशन का नया विकल्प -processkotlinnullchecks

हमने Kotlin में नल चेक की प्रोसेसिंग के लिए, R8 को कॉन्फ़िगर करने का नया विकल्प -processkotlinnullchecks जोड़ा है. इस विकल्प के लिए, एक ज़रूरी तर्क दिया जाता है. यह तर्क, इन तीन वैल्यू में से कोई एक होना चाहिए: keep, remove_message, और remove. यह विकल्प, Kotlin कंपाइलर की ओर से जोड़े गए इन नल चेक को प्रोसेस करता है:

class kotlin.jvm.internal.Intrinsics {
  void checkNotNull(java.lang.Object);
  void checkNotNull(java.lang.Object, java.lang.String);
  void checkExpressionValueIsNotNull(
      java.lang.Object, java.lang.String);
  void checkNotNullExpressionValue(
      java.lang.Object, java.lang.String);
  void checkReturnedValueIsNotNull(
      java.lang.Object, java.lang.String);
  void checkReturnedValueIsNotNull(
      java.lang.Object, java.lang.String, java.lang.String);
  void checkFieldIsNotNull(java.lang.Object, java.lang.String);
  void checkFieldIsNotNull(
      java.lang.Object, java.lang.String, java.lang.String);
  void checkParameterIsNotNull(java.lang.Object, java.lang.String);
  void checkNotNullParameter(java.lang.Object, java.lang.String);
}

विकल्पों की वैल्यू को सबसे कम से सबसे ज़्यादा तक क्रम से लगाने पर, इन पर यह असर पड़ता है:

  • keep से जांचों में कोई बदलाव नहीं होता.
  • remove_message, हर चेक मेथड कॉल को कॉल के पहले आर्ग्युमेंट पर getClass() के कॉल में बदलता है. इससे, शून्य की जांच को असरदार तरीके से बनाए रखा जाता है, लेकिन बिना किसी मैसेज के.
  • remove से, जांच की सुविधा पूरी तरह से हट जाती है.

डिफ़ॉल्ट रूप से R8, remove_message का इस्तेमाल करता है. -processkotlinnullchecks की कोई भी जानकारी, इसे ओवरराइड कर देगी. इसे एक से ज़्यादा बार तय करने पर, सबसे सटीक वैल्यू का इस्तेमाल किया जाता है.

कंपैनियन मोड के तरीकों के लिए, जानकारी सेव करने की सुविधा को बंद करना

जब कीप नियम, इंटरफ़ेस के उन तरीकों से मेल खाते हैं जिन पर डिसुगरिंग लागू होती है, तो R8 पहले disallow optimization और disallow shrinking बिट को सिंथेसाइज़ किए गए कंपैनियन तरीकों में इंटरनल तौर पर ट्रांसफ़र करता था.

AGP 9.0 से, कंपैनियन तरीकों पर कीप के नियम लागू नहीं होते. यह इस बात से मेल खाता है कि कीप नियमों को कंपाइलर के बनाए गए अन्य फ़ील्ड/तरीकों/क्लास पर लागू नहीं किया जाता है.

ऑप्टिमाइज़ेशन की अनुमति न दें और सिकुड़ने की अनुमति न दें बिट को कंपैनियन तरीकों में ट्रांसफ़र करके, पहले इस इस्तेमाल के उदाहरण के लिए सहायता दी जाती थी:

  1. default/static/private इंटरफ़ेस के तरीकों वाली लाइब्रेरी को minSdk < 24 के साथ DEX करने के लिए कंपाइल करें. साथ ही, ऐसे नियम लागू करें जिनसे इंटरफ़ेस के तरीके बने रहें.
  2. क्लाथपाथ और -applymapping पर लाइब्रेरी के साथ ऐप्लिकेशन कंपाइल करें.
  3. ऐप्लिकेशन और लाइब्रेरी को मर्ज करें.

ध्यान दें कि यह सिर्फ़ -applymapping के साथ काम करता है, क्योंकि disallow obfuscation बिट को कंपैनियन तरीकों में ट्रांसफ़र नहीं किया जाता. इसका मतलब है कि पहले चरण में जनरेट की गई कंपैनियन क्लास में, तरीके के नाम छिपाए गए होंगे.

आगे से, minSdk <24 के लिए, इस इस्तेमाल के उदाहरण का समर्थन नहीं किया जाएगा. इस समस्या को हल करने के लिए, यह तरीका अपनाएं:

  1. default/static/private इंटरफ़ेस के तरीकों का इस्तेमाल करके, लाइब्रेरी को minSdk < 24 वाले क्लास फ़ाइलों में बदलें.
  2. R8 और उन नियमों का इस्तेमाल करके, डीशुगर किए गए आर्टफ़ैक्ट को कंपाइल करें जो इंटरफ़ेस के तरीकों को कंपैनियन क्लास पर रखते हैं.
  3. ऐप्लिकेशन को क्लासपाथ पर मौजूद लाइब्रेरी के साथ कंपाइल करें.
  4. ऐप्लिकेशन और डीशुगर किए गए आर्टफ़ैक्ट को मर्ज करें.

इसका एक और साइड इफ़ेक्ट यह है कि अब इंटरफ़ेस कंपैनियन के तरीकों के अंदर, पहचान छिपाने वाली और लोकल क्लास के लिए इनर क्लास और एंक्लोज़िंग मेथड एट्रिब्यूट को नहीं रखा जा सकता.

डिफ़ॉल्ट रूप से जनरेट होने वाली सोर्स फ़ाइल को r8-map-id-<MAP_ID> में बदलें

यह बदलाव, AGP के 8.12.0 वर्शन से लागू है.

जब रीट्रैसिंग की ज़रूरत होती है, तब किसी क्लास के लिए डिफ़ॉल्ट रूप से जनरेट होने वाले सोर्स फ़ाइल एट्रिब्यूट की वैल्यू SourceFile से बदलकर r8-map-id-<MAP_ID> हो जाती है. रीट्रैसिंग की ज़रूरत तब होती है, जब ओबफ़स्केशन या ऑप्टिमाइज़ेशन चालू हो.

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

अगर कस्टम सोर्स फ़ाइल एट्रिब्यूट (-renamesourcefileattribute) का इस्तेमाल किया जाता है, तो इस कस्टम सोर्स फ़ाइल एट्रिब्यूट को प्राथमिकता मिलती रहेगी.

ProGuard के साथ काम करने वाले मोड में (जब gradle.properties में android.enableR8.fullMode=false शामिल हो), r8-map-id-<MAP_ID> के सोर्स फ़ाइल एट्रिब्यूट को सिर्फ़ तब लागू किया जाता है, जब SourceFile एट्रिब्यूट को नहीं रखा जाता है. ProGuard के कंपैटिबिलिटी मोड का इस्तेमाल करने वाले ऐप्लिकेशन को अपनी स्टैक ट्रेस में मैपिंग फ़ाइल आईडी शामिल करना चाहिए. इसके लिए, उन्हें -keepattributes SourceFile को हटाना होगा या R8 के फ़ुल मोड पर माइग्रेट करना होगा.

r8-map-id-<MAP_ID> में इस्तेमाल किया गया मैप आईडी, मैप का पूरा हैश है. यह मैप के हैश का सात वर्णों वाला प्रीफ़िक्स नहीं है, जिसका इस्तेमाल पहले किया जाता था.

L8 desugaring में, छोटे किए गए सिंथेटिक नामों के इस्तेमाल की सुविधा चालू करें

D8 से जनरेट की गई सिंथेटिक क्लास के नाम में आम तौर पर सबस्ट्रिंग $$ExternalSynthetic शामिल होती है. इससे पता चलता है कि यह D8 से जनरेट की गई सिंथेटिक क्लास है. इसके अलावा, सिंथेटिक के नाम में सिंथेटिक का टाइप भी शामिल होता है. उदाहरण के लिए, Backport, Lambda. इससे DEX के साइज़ पर बुरा असर पड़ता है, क्योंकि क्लास के नाम स्ट्रिंग पूल में ज़्यादा जगह लेते हैं.

AGP 9.0, L8 (कोर लाइब्रेरी डिसुगरिंग) को कॉन्फ़िगर करता है, ताकि सभी j$ क्लास वाली DEX फ़ाइल, सिंथेटिक क्लास के लिए क्लास के नाम के नए छोटे फ़ॉर्मैट का इस्तेमाल करे. क्लास के नए नाम में न्यूमेरिक आईडी का इस्तेमाल किया जाता है. उदाहरण के लिए, $1.

-addconfigurationdebugging के लिए सहायता हटाएं

AGP 9.0 में, -addconfigurationdebugging के लिए सहायता हटा दी गई है. अब कंपाइलर, इस फ़्लैग का इस्तेमाल करने पर चेतावनी दिखाता है.

D8/R8 से L8 के नियम जनरेट करने की सुविधा हटा दी गई है

यह बदलाव सिर्फ़ उन डेवलपर के लिए है जो D8/R8 कमांड लाइन या एपीआई का सीधे तौर पर इस्तेमाल करते हैं.

R8 9.0, D8 और R8 से L8 के लिए कीप रूल जनरेट करने की सुविधा हटा देता है. इसके बजाय, आपको TraceReferences का इस्तेमाल करना चाहिए.

खास तौर पर, D8Command.builder.setDesugaredLibraryKeepRuleConsumer और R8Command.Builder.setDesugaredLibraryKeepRuleConsumer तरीकों को हटा दिया गया है. साथ ही, D8 और R8 के कमांड लाइन विकल्पों से --desugared-lib-pg-conf-output के लिए सहायता हटा दी गई है.

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

Android Gradle प्लगिन 9.0.0

ठीक की गई समस्याएं
Android Gradle प्लगिन
सुविधा का अनुरोध: AGP के सबसे सही वर्शन को प्रॉपर्टी के तौर पर इंजेक्ट करना
SingleArtifact.VERSION_CONTROL_INFO_FILE को स्टेबलाइज़ करना
androidTest connectedCheck logcat आउटपुट खराब होना
AGP में Kotlin के लिए पहले से मौजूद सपोर्ट को Kotlin के सोर्ससेट के साथ सिंक नहीं किया जाना चाहिए
missingDimensionStrategy, अपने नाम से मिलते-जुलते डाइमेंशन को प्राथमिकता देता है, भले ही वह डाइमेंशन किसी काम का न हो
AGP में Kotlin के लिए पहले से मौजूद सपोर्ट को Kotlin के सोर्ससेट के साथ सिंक नहीं किया जाना चाहिए
AGP 9.0.0-rc01, kotlin() फ़ंक्शन के ज़रिए Kotlin लाइब्रेरी को हल नहीं करता
Built-in-kotlin, maven pom में kotlin-stdlib डिपेंडेंसी की शर्त को पब्लिश नहीं करता
compileSdk और targetSdk के बीच अंतर के लिए, टेस्ट केस जोड़ें
resConfigs की वैल्यू खाली होने पर, aapt की गड़बड़ी दिखती है
प्योर 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 प्लगिन का नाम बदलें
AGP9: `variant.sources.kotlin!!.addGeneratedSourceDirectory()` काम नहीं कर रहा है
AAR मेटाडेटा की जांच, कंपाइल एसडीके पर की जाती है. इसके लिए, पुराने डीएसएल का इस्तेमाल किया जाता है
डिप्रेकेट की गई `com.android.build.api.dsl.ManagedDevices.devices` प्रॉपर्टी हटाएं
AGP में Kotlin के लिए पहले से मौजूद सपोर्ट को Kotlin के सोर्ससेट के साथ सिंक नहीं किया जाना चाहिए
अगर उपभोक्ता कीप फ़ाइल में -dontobfuscate शामिल है, तो Android लाइब्रेरी पब्लिश नहीं हो पाएगी
ऑप्टिमाइज़ किए गए संसाधनों के लिए, मैपिंग प्रिंट करने के कोई विकल्प नहीं हैं
इस फ़ेज़ के बाद finalizeDsl को कॉल करने पर गड़बड़ी दिखेगी
AGP, Jetifier के बंद होने पर भी Jetifier कॉन्फ़िगरेशन शुरू करता है
kotlin में बनाया गया यह प्लगिन, kotlinStdlib को कंपाइल करने के समय की डिपेंडेंसी के तौर पर नहीं जोड़ता है. ऐसा तब होता है, जब `kotlin.stdlib.default.dependency` की वैल्यू मॉड्यूल और pom फ़ाइलों के लिए सही होती है
नया ऑप्टिमाइज़ेशन डीएसएल, डिफ़ॉल्ट रूप से configuration.txt फ़ाइल नहीं बनाता है
AGP 8.1.3.0, किसी मॉड्यूल में मौजूद नेविगेशन ग्राफ़ की पुष्टि नहीं कर पाता
AGP, बंद हो चुके Gradle API का इस्तेमाल करता है: मल्टी-स्ट्रिंग नोटेशन
minSdkVersion >=21 के साथ लेगसी मल्टीडेक्स लाइब्रेरी का इस्तेमाल करने की कोशिश करने वाले उपयोगकर्ताओं को चेतावनी दें
कोड जनरेट करने वाले टास्क मौजूद होने पर, बिल्ड नहीं हो पाता
`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 कोड के लिए, आईडीई से जुड़ी गलत गड़बड़ियां
`legacy-kapt` प्लगिन, `kotlin-kapt` के उलट एनोटेशन प्रोसेसिंग को स्किप कर देता है
compileSdkSpec.minorApiLevel, SettingsExtension के साथ काम नहीं कर रहा है
[fused lib - public] Generated fused library does not include sources
extractNativeLibs और useEmbeddedDex, मेनिफ़ेस्ट से नहीं आने चाहिए
AGP 9.0.0-alpha09 में R8 से मिलने वाली चेतावनियां
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 फ़्लैग हटाएं
ProGuard फ़ाइल मौजूद न होने पर, बिल्ड नहीं हो पाता
remove buildconfig defaults gradle.properties flags
ऐप्लिकेशन के targetSdk की डिफ़ॉल्ट वैल्यू को minSdk के बजाय compileSdk पर आधारित करने के लिए बदलें
`isIncludeAndroidResources` चालू होने पर, AGP 8.12.0 में `process{Variant}UnitTestManifest`, tools:overrideLibrary के इस्तेमाल को मर्ज नहीं कर पाता
जेवीएम टेस्ट टास्क के लिए, Gradle में AGP की वजह से डेप्रिकेशन की चेतावनियां दिख रही हैं
DependencyReportTask, कॉन्फ़िगरेशन कैश मेमोरी के साथ काम नहीं करता
AGP 9.0 में, डिफ़ॉल्ट सोर्स/टारगेट Java वर्शन को Java 8 से Java 11 पर स्विच करें
android.useAndroidX की डिफ़ॉल्ट वैल्यू को true पर सेट करें
Kotlin में पहले से मौजूद kapt प्लगइन को लागू करते समय, बेहतर अपवाद.
android.proguard.failOnMissingFiles, consumerProguardFiles के लिए काम नहीं कर रहा है
Kotlin Gradle प्लगिन की डिपेंडेंसी को 2.2.10 पर अपडेट किया गया
KGP API का इस्तेमाल करके KotlinJvmAndroidCompilation बनाना
टेस्ट सोर्स पर Kotlin का एक्सप्लिसिट एपीआई मोड लागू किया गया
लिंट
AGP 8.11.0: apply(from = "...") का इस्तेमाल करके .gradle.kts फ़ाइलें जोड़ने पर, lintAnalyzeRelease टास्क का क्रैश होना
Lint ChecksSdkIntAtLeast Check यह नहीं देखता कि एनोटेट की गई वैल्यू सही है या नहीं
Kotlin में पहले से मौजूद कंपाइलर, META-INF में .kotlin_module नहीं जोड़ता है
Lint क्लासपाथ में अलग-अलग वर्शन की डुप्लीकेट क्लास मौजूद हैं
निजी संसाधनों को बदलने का तरीका काम नहीं कर रहा है (tools:override = "true")
बग: इस्तेमाल नहीं किए गए संसाधनों को हटाने पर, उनके अनुवाद भी नहीं हटते. साथ ही, इस बारे में पूछा भी नहीं जाता
लिंट में "Could not clean up K2 caches" चेतावनी दिख रही है
लिंट में "Could not clean up K2 caches" चेतावनी दिख रही है
लिंट इंटिग्रेशन
systemPropertyInputs.javaVersion में अंतर होने की वजह से, अलग-अलग JDK वेंडर या माइनर वर्शन में AndroidLintAnalysisTask की कैश मेमोरी का काम न करना
Lint, compileSdk के बावजूद अपने-आप इंस्टॉल किए गए नए SDK का इस्तेमाल करता है. यह टास्क इनपुट के तौर पर रजिस्टर नहीं होता और कैश मेमोरी को तोड़ता है
Shrinker (R8)
फ़ाइनल रिसॉर्स आईडी का इस्तेमाल करने पर, R8 ऑप्टिमाइज़ किए गए रिसॉर्स को छोटा करने की सुविधा चुपचाप काम नहीं करती