Android Gradle प्लगिन 9.0 एक मुख्य रिलीज़ है. इसमें एपीआई और व्यवहार में बदलाव किए गए हैं.
Android Gradle प्लगिन 9.0.1 पर अपडेट करने के लिए, Android Gradle प्लगिन अपग्रेड असिस्टेंट का इस्तेमाल करें. AGP अपग्रेड असिस्टेंट, आपके प्रोजेक्ट को अपग्रेड करते समय मौजूदा सेटिंग को बनाए रखने में मदद करता है. इससे, AGP 9.0 का इस्तेमाल करने के लिए अपने प्रोजेक्ट को अपग्रेड किया जा सकता है. भले ही, आप AGP 9.0 में सभी नए डिफ़ॉल्ट सेटिंग को अपनाने के लिए तैयार न हों.
अपग्रेड की प्रोसेस को आसान बनाने के लिए, एजेंट की दो स्किल भी उपलब्ध हैं. नॉन-केएमपी ऐप्लिकेशन के लिए, Android स्किल रिपॉज़िटरी से AGP 9 अपग्रेड स्किल आज़माएं. केएमपी ऐप्लिकेशन के लिए, JetBrains की AGP 9 अपग्रेड स्किल आज़माएं. Android Studio में स्किल इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, स्किल की मदद से एजेंट मोड को बेहतर बनाना लेख पढ़ें.
इनके साथ काम करता है
Android Gradle प्लगिन 9.0, ज़्यादा से ज़्यादा एपीआई लेवल 36.1 के साथ काम करता है. Android Gradle प्लगिन 8.6 के साथ काम करने वाले टूल वर्शन से जुड़ी अन्य ज़रूरी जानकारी यहां देखें:
| सबसे पुराना वर्शन | डिफ़ॉल्ट वर्शन | नोट | |
|---|---|---|---|
| ग्रेडल | 9.1.0 | 9.1.0 | ज़्यादा जानकारी के लिए, Gradle को अपडेट करने का तरीका देखें. |
| SDK Build Tools | 36.0.0 | 36.0.0 | एसडीके बिल्ड टूल इंस्टॉल करें या कॉन्फ़िगर करें. |
| एनडीके (NDK) | लागू नहीं | 28.2.13676358 | एनडीके का कोई दूसरा वर्शन इंस्टॉल करें या कॉन्फ़िगर करें. |
| जेडीके | 17 | 17 | ज़्यादा जानने के लिए, जेडीके वर्शन सेट करना लेख पढ़ें. |
| Kotlin Gradle प्लगिन (केजीपी) | 2.2.10 | 2.2.10 | ज़्यादा जानने के लिए, Kotlin Gradle प्लग इन पर रनटाइम डिपेंडेंसी लेख पढ़ें. |
android डीएसएल क्लास अब सिर्फ़ नए सार्वजनिक इंटरफ़ेस लागू करती हैं
पिछले कुछ सालों में, हमने अपने डीएसएल और एपीआई के लिए नए इंटरफ़ेस लॉन्च किए हैं. इससे हमें यह कंट्रोल करने में मदद मिलती है कि कौनसे एपीआई सार्वजनिक हैं. AGP के 7.x और 8.x वर्शन में अब भी पुराने डीएसएल टाइप (उदाहरण के लिए, BaseExtension) का इस्तेमाल किया जाता है. इनमें नए सार्वजनिक इंटरफ़ेस भी लागू किए गए हैं, ताकि इंटरफ़ेस पर काम आगे बढ़ने के साथ-साथ, पुराने वर्शन के साथ काम करने की सुविधा बनी रहे.
AGP 9.0 में सिर्फ़ हमारे नए डीएसएल इंटरफ़ेस का इस्तेमाल किया जाता है. साथ ही, लागू करने के तरीके बदलकर नए टाइप के हो गए हैं, जो पूरी तरह से छिपे हुए हैं. इससे, पुराने और अब काम न करने वाले वैरिएंट एपीआई का ऐक्सेस भी हट जाता है.
एजीपी 9.0 पर अपडेट करने के लिए, आपको ये काम करने पड़ सकते हैं:
- पक्का करें कि आपका प्रोजेक्ट, पहले से मौजूद Kotlin के साथ काम करता हो:
org.jetbrains.kotlin.androidप्लगिन, नए डीएसएल के साथ काम नहीं करता. KMP प्रोजेक्ट को KMP के लिए Android Gradle लाइब्रेरी प्लगिन पर स्विच करें:
org.jetbrains.kotlin.multiplatformप्लगिन को उसी Gradle सबप्रोजेक्ट में इस्तेमाल करना जिसमेंcom.android.libraryऔरcom.android.applicationप्लगिन हैं, नए डीएसएल के साथ काम नहीं करता.अपनी बिल्ड फ़ाइलें अपडेट करें: इंटरफ़ेस में बदलाव करने का मकसद, डीएसएल को ज़्यादा से ज़्यादा एक जैसा रखना है. हालांकि, इसमें कुछ छोटे-मोटे बदलाव हो सकते हैं.
नए डीएसएल और एपीआई का रेफ़रंस देने के लिए, कस्टम बिल्ड लॉजिक को अपडेट करें: इंटरनल डीएसएल के सभी रेफ़रंस को सार्वजनिक डीएसएल इंटरफ़ेस से बदलें. ज़्यादातर मामलों में, यह वन-टू-वन रिप्लेसमेंट होगा.
applicationVariantsऔर इससे मिलते-जुलते एपीआई की जगह, नएandroidComponentsएपीआई का इस्तेमाल करें. यह ज़्यादा मुश्किल हो सकता है, क्योंकिandroidComponentsएपीआई को ज़्यादा स्टेबल बनाने के लिए डिज़ाइन किया गया है, ताकि प्लग इन लंबे समय तक काम कर सकें. उदाहरण के लिए, हमारी Gradle Recipes देखें.तीसरे पक्ष के प्लग इन अपडेट करें: तीसरे पक्ष के कुछ प्लग इन अब भी ऐसे इंटरफ़ेस या एपीआई पर निर्भर हो सकते हैं जो अब उपलब्ध नहीं हैं. उन प्लगिन के वर्शन पर माइग्रेट करें जो AGP 9.0 के साथ काम करते हैं.
नए डीएसएल इंटरफ़ेस पर स्विच करने से, प्लग इन और Gradle बिल्ड स्क्रिप्ट को बंद किए जा चुके अलग-अलग एपीआई इस्तेमाल करने से रोका जा सकता है. इनमें ये शामिल हैं:
android ब्लॉक में मौजूद, अब इस्तेमाल नहीं किया जा रहा एपीआई |
फ़ंक्शन | प्रतिस्थापन |
|---|---|---|
applicationVariants,libraryVariants,testVariants, औरunitTestVariants
|
एजीपी में नई सुविधाएं जोड़ने के लिए, प्लग इन के एक्सटेंशन पॉइंट. |
इसे
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
|
एएआर में पैकेज करने के लिए एआईडीएल फ़ाइलें, ताकि इसे इस लाइब्रेरी पर निर्भर लाइब्रेरी और ऐप्लिकेशन के लिए एपीआई के तौर पर दिखाया जा सके. |
यह अब भी LibraryExtension पर दिखता है, लेकिन अन्य एक्सटेंशन टाइप पर नहीं.
|
अगर आपने एजीपी 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
इसके अलावा, धीरे-धीरे माइग्रेट करने के लिए, एजीपी 9.4 आपको अलग-अलग मॉड्यूल से ऑप्ट आउट करने की सुविधा देता है. इसका तरीका जानने के लिए, वैरिएंट एपीआई मॉड्यूल से ऑप्ट-आउट करना लेख पढ़ें.
AGP 9.0 में, पिछली क्लास को अब काम न करने वाली क्लास के तौर पर मार्क किया गया है. इसका मतलब है कि newDsl फ़्लैग से ऑप्ट आउट करने वाले प्रोजेक्ट को, बंद होने की चेतावनियां दिखेंगी. इनमें android ब्लॉक पर दिखने वाली चेतावनियां भी शामिल हैं.
एजीपी 9.0 पर अपग्रेड करने से पहले, नए एपीआई पर अपग्रेड करना भी शुरू किया जा सकता है. नए इंटरफ़ेस, एजीपी के कई वर्शन के लिए मौजूद हैं. इसलिए, आपके पास नए और पुराने इंटरफ़ेस का मिक्स हो सकता है. एजीपी एपीआई के संदर्भ दस्तावेज़ों में, हर एजीपी वर्शन के लिए एपीआई का प्लैटफ़ॉर्म दिखाया जाता है. साथ ही, यह भी बताया जाता है कि हर क्लास, तरीके, और फ़ील्ड को कब जोड़ा गया.
हम आम तौर पर इस्तेमाल किए जाने वाले प्लग इन के लेखकों से संपर्क कर रहे हैं, ताकि वे नए मोड के साथ पूरी तरह से काम करने वाले प्लग इन बना सकें और उन्हें रिलीज़ कर सकें. साथ ही, हम Android Studio में एजीपी अपग्रेड असिस्टेंट को बेहतर बनाना जारी रखेंगे, ताकि माइग्रेशन के दौरान आपकी मदद की जा सके.
अगर आपको लगता है कि नए डीएसएल या वैरिएंट एपीआई में कुछ सुविधाएं मौजूद नहीं हैं, तो कृपया जल्द से जल्द समस्या की शिकायत करें.
पहले से मौजूद Kotlin
Android Gradle प्लगिन 9.0 में, Kotlin की सुविधा पहले से मौजूद है. साथ ही, यह सुविधा डिफ़ॉल्ट रूप से चालू होती है. इसका मतलब है कि Kotlin सोर्स फ़ाइलों को कंपाइल करने के लिए, अब आपको अपनी बिल्ड फ़ाइलों में org.jetbrains.kotlin.android (या kotlin-android) प्लगिन लागू करने की ज़रूरत नहीं है.
इससे एजीपी के साथ Kotlin का इंटिग्रेशन आसान हो जाता है. साथ ही, अब काम न करने वाले एपीआई का इस्तेमाल नहीं करना पड़ता और कुछ मामलों में परफ़ॉर्मेंस बेहतर होती है.
इसलिए, अपने प्रोजेक्ट को एजीपी 9.0 पर अपग्रेड करते समय, आपको पहले से मौजूद Kotlin पर माइग्रेट करना होगा या ऑप्ट आउट करना होगा.
आपके पास Gradle के उन सबप्रोजेक्ट के लिए, Kotlin के लिए पहले से मौजूद सहायता को चुनिंदा तौर पर बंद करने का विकल्प भी होता है जिनमें Kotlin सोर्स नहीं हैं.
Kotlin Gradle प्लग इन पर रनटाइम डिपेंडेंसी
पहले से मौजूद Kotlin की सुविधा देने के लिए, Android Gradle प्लगिन 9.0 में अब Kotlin Gradle प्लगिन (केजेपी) 2.2.10 पर रनटाइम डिपेंडेंसी है. इसका मतलब है कि अब आपको केजीपी वर्शन का एलान करने की ज़रूरत नहीं है. अगर केजीपी वर्शन 2.2.10 से पुराना है, तो Gradle आपके केजीपी वर्शन को अपने-आप 2.2.10 पर अपग्रेड कर देगा. इसी तरह, अगर आपने केएसपी के 2.2.10-2.0.2 से पुराने वर्शन का इस्तेमाल किया है, तो एजीपी इसे 2.2.10-2.0.2 पर अपग्रेड कर देगा, ताकि यह केजीपी के वर्शन से मैच हो सके.
केजीपी के नए वर्शन पर अपग्रेड करें
KGP या केएसपी के नए वर्शन का इस्तेमाल करने के लिए, अपनी टॉप-लेवल बिल्ड फ़ाइल में यह जानकारी जोड़ें:
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 के पुराने वर्शन पर डाउनग्रेड करना
केजीपी वर्शन को सिर्फ़ तब डाउनग्रेड किया जा सकता है, जब आपने पहले से मौजूद Kotlin से ऑप्ट आउट किया हो. ऐसा इसलिए होता है, क्योंकि AGP 9.0 में Kotlin की पहले से मौजूद सुविधा डिफ़ॉल्ट रूप से चालू होती है. साथ ही, Kotlin की पहले से मौजूद सुविधा के लिए, KGP 2.2.10 या इसके बाद का वर्शन ज़रूरी है.
केजीपी या केएसपी के पुराने वर्शन का इस्तेमाल करने के लिए, स्ट्रिक्ट वर्शन डिक्लेरेशन का इस्तेमाल करके, अपनी टॉप-लेवल बिल्ड फ़ाइल में उस वर्शन के बारे में बताएं:
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") }
}
}
}
ध्यान दें कि केजीपी को कम से कम 2.0.0 वर्शन पर डाउनग्रेड किया जा सकता है.
टेस्ट फ़िक्सचर के लिए आईडीई की सहायता
AGP 9.0 में, टेस्ट फ़िक्सचर के लिए Android Studio IDE की पूरी सुविधा उपलब्ध है.
Fused Library प्लग इन
फ़्यूज़्ड लाइब्रेरी प्लग इन (झलक) की मदद से, कई लाइब्रेरी को एक Android लाइब्रेरी एएआर के तौर पर पब्लिश किया जा सकता है. इससे आपके उपयोगकर्ताओं के लिए, पब्लिश किए गए आर्टफ़ैक्ट पर भरोसा करना आसान हो सकता है.
इस्तेमाल शुरू करने के बारे में जानकारी पाने के लिए, फ़्यूज़्ड लाइब्रेरी की मदद से, कई Android लाइब्रेरी को एक साथ पब्लिश करना लेख पढ़ें.
व्यवहार में बदलाव
Android Gradle प्लगिन 9.0 में ये नए बदलाव किए गए हैं:
| व्यवहार | सुझाव |
|---|---|
Android Gradle प्लगिन 9.0, डिफ़ॉल्ट रूप से एनडीके वर्शन r28c का इस्तेमाल करता है.
|
NDK के उस वर्शन के बारे में साफ़ तौर पर बताएं जिसका इस्तेमाल करना है. |
| Android Gradle प्लगिन 9.0 के लिए, डिफ़ॉल्ट रूप से यह ज़रूरी है कि लाइब्रेरी का इस्तेमाल करने वाले लोग, कंपाइल एसडीके के उसी वर्शन या उसके बाद के वर्शन का इस्तेमाल करें. |
किसी लाइब्रेरी का इस्तेमाल करते समय, उसी एसडीके या उससे नए एसडीके का इस्तेमाल करें.
अगर ऐसा करना मुमकिन नहीं है या आपको अपनी पब्लिश की गई लाइब्रेरी के उपभोक्ताओं को स्विच करने के लिए ज़्यादा समय देना है, तो साफ़ तौर पर AarMetadata.minCompileSdk सेट करें.
|
AGP 9.0 में, Gradle की इन प्रॉपर्टी की डिफ़ॉल्ट वैल्यू में अपडेट शामिल हैं. इससे आपको अपग्रेड करते समय, AGP 8.13 के व्यवहार को बनाए रखने का विकल्प मिलता है:
| प्रॉपर्टी | फ़ंक्शन | एजीपी 8.13 से एजीपी 9.0 पर स्विच करना | सुझाव |
|---|---|---|---|
android. |
android ब्लॉक के लेगसी इंप्लिमेंटेशन को ज़ाहिर किए बिना, नए डीएसएल इंटरफ़ेस का इस्तेमाल करें.इसका मतलब यह भी है कि लेगसी वैरिएंट एपीआई, जैसे कि android.applicationVariants
को अब ऐक्सेस नहीं किया जा सकता.
|
false → true |
android.newDsl=false को सेट करके, ऑप्ट आउट किया जा सकता है.जब आपके प्रोजेक्ट में इस्तेमाल किए जाने वाले सभी प्लगिन और बिल्ड लॉजिक, Gradle 8.0 के साथ काम करने लगें, तब ऑप्ट आउट करने का विकल्प हटा दें. |
android. |
पहले से मौजूद Kotlin को चालू करता है | false → true |
Kotlin के बिल्ट-इन वर्शन पर माइग्रेट करें या ऑप्ट आउट करें. |
android. |
यह पक्का करता है कि हर लाइब्रेरी के पैकेज का नाम अलग हो. | false → true |
अपने प्रोजेक्ट की सभी लाइब्रेरी के लिए, यूनीक पैकेज नाम तय करें. अगर ऐसा करना मुमकिन नहीं है, तो माइग्रेट करते समय इस फ़्लैग को बंद किया जा सकता है. |
android. |
डिफ़ॉल्ट रूप से, androidx
डिपेंडेंसी का इस्तेमाल करें.
|
false → true |
androidx डिपेंडेंसी अपनाएं.
|
android. |
डिफ़ॉल्ट रूप से, androidx.test.runner.AndroidJUnitRunner क्लास का इस्तेमाल करके, डिवाइस पर टेस्ट चलाएं. इसके लिए, अब इस्तेमाल नहीं की जा रही InstrumentationTestRunner क्लास की डिफ़ॉल्ट वैल्यू को बदलें
android {
defaultConfig {
testInstrumentationRunner = "..."
}
} |
false → true |
AndroidJUnitRunner को अपनाएं या अपने कस्टम testInstrumentationRunner के बारे में साफ़ तौर पर बताएं.
|
android. |
कॉन्फ़िगरेशन के बीच डिपेंडेंसी की पाबंदियों के इस्तेमाल को कंट्रोल करता है. AGP 9.0 में डिफ़ॉल्ट रूप से false का इस्तेमाल किया जाता है. यह सिर्फ़ ऐप्लिकेशन डिवाइस टेस्ट (AndroidTest) में पाबंदियों का इस्तेमाल करता है.
इसे true पर सेट करने से, 8.13 वर्शन का व्यवहार वापस लागू हो जाएगा.
|
true → false |
जब तक ज़रूरी न हो, तब तक हर जगह डिपेंडेंसी कंस्ट्रेंट का इस्तेमाल न करें. इस फ़्लैग की नई डिफ़ॉल्ट वैल्यू को स्वीकार करने से, प्रोजेक्ट इंपोर्ट करने की प्रोसेस में ऑप्टिमाइज़ेशन भी चालू हो जाते हैं. इससे, Android लाइब्रेरी के कई सबप्रोजेक्ट वाले बिल्ड को इंपोर्ट करने में लगने वाला समय कम हो जाता है. |
android. |
ऐप्लिकेशन में कोड को नॉन-फ़ाइनल R क्लास के हिसाब से कंपाइल करें. इससे ऐप्लिकेशन का कंपाइलेशन, लाइब्रेरी के कंपाइलेशन के मुताबिक हो जाता है. इससे इंक्रीमेंटैलिटी बेहतर होती है. साथ ही, आने वाले समय में रिसॉर्स प्रोसेसिंग फ़्लो की परफ़ॉर्मेंस को ऑप्टिमाइज़ करने में मदद मिलती है. |
false → true |
कई प्रोजेक्ट, सोर्स में बदलाव किए बिना ही नए तरीके को अपना सकते हैं. अगर R क्लास फ़ील्ड का इस्तेमाल ऐसी किसी भी जगह पर किया जाता है जहां कॉन्स्टेंट की ज़रूरत होती है, जैसे कि स्विच केस, तो चेन वाले if स्टेटमेंट का इस्तेमाल करने के लिए रीफ़ैक्टर करें. |
android. |
ऐप्लिकेशन और टेस्ट में, टारगेट एसडीके वर्शन के लिए डिफ़ॉल्ट वैल्यू के तौर पर, कंपाइल एसडीके वर्शन का इस्तेमाल करता है. इस बदलाव से पहले, टारगेट एसडीके वर्शन डिफ़ॉल्ट रूप से कम से कम एसडीके वर्शन पर सेट होता था. |
false → true |
ऐप्लिकेशन और टेस्ट के लिए, टारगेट एसडीके वर्शन को साफ़ तौर पर बताएं. |
android. |
यह सिर्फ़ टेस्ट किए गए बिल्ड टाइप के लिए, यूनिट टेस्ट कॉम्पोनेंट बनाता है. डिफ़ॉल्ट प्रोजेक्ट में, इससे डीबग के लिए एक यूनिट टेस्ट होता है. पहले, डीबग या रिलीज़ के लिए यूनिट टेस्ट चलाए जाते थे. |
false → true |
अगर आपके प्रोजेक्ट को डीबग और रिलीज़, दोनों के लिए टेस्ट चलाने की ज़रूरत नहीं है, तो कोई बदलाव करने की ज़रूरत नहीं है. |
android. |
अगर एजीपी डीएसएल में बताई गई कोई भी कीप फ़ाइल डिस्क पर मौजूद नहीं है, तो गड़बड़ी के साथ बिल्ड नहीं हो पाता. इस बदलाव से पहले, फ़ाइल के नाम में टाइपिंग की गड़बड़ी होने पर, फ़ाइलों को बिना किसी सूचना के अनदेखा कर दिया जाता था. | false → true |
Proguard फ़ाइलों के सभी अमान्य एलान हटाएं |
android. |
यह R8 को क्लास और Android संसाधनों को एक साथ ध्यान में रखकर, कम Android संसाधनों को बनाए रखने की अनुमति देता है. | false → true |
अगर आपके प्रोजेक्ट के लिए, डेटा सेव रखने के नियम पहले से ही सेट हैं, तो आपको कोई बदलाव करने की ज़रूरत नहीं है. |
android. |
यह R8 को कम कोड कॉम्पोनेंट बनाए रखने की अनुमति देता है. इसके लिए, क्लास को बनाए रखने पर डिफ़ॉल्ट कंस्ट्रक्टर को अपने-आप बनाए नहीं रखा जाता.
इसका मतलब है कि -keep class A का मतलब अब -keep class A { <init>(); } नहीं है |
false → true |
अगर आपके प्रोजेक्ट के लिए, डेटा सेव रखने के नियम पहले से ही सेट हैं, तो आपको कोई बदलाव करने की ज़रूरत नहीं है.
अगर आपको डिफ़ॉल्ट कंस्ट्रक्टर को सुरक्षित रखना है, तो अपने प्रोजेक्ट के कीप रूल में -keep class A
को
-keep class A { <init>(); }
से बदलें.
|
android. |
सभी सबप्रोजेक्ट में
resValues
को चालू करता है
|
true → false |
resValues को सिर्फ़ उन सबप्रोजेक्ट में चालू करें जिनमें इसकी ज़रूरत है. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह सेटिंग सेट करें:
android {
buildFeatures {
resValues = true
}
} |
android. |
सभी सबप्रोजेक्ट में शेडर कंपाइलेशन की सुविधा चालू करता है | true → false |
शेडर कंपाइलेशन को सिर्फ़ उन सबप्रोजेक्ट में चालू करें जिनमें कंपाइल किए जाने वाले शेडर मौजूद हों. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह सेट करें:
android {
buildFeatures {
shaders = true
}
} |
android. |
AGP 9.0 में, getDefaultProguardFile() सिर्फ़ proguard-android-optimize.txt के साथ काम करेगा, न कि proguard-android.txt के साथ. ऐसा इसलिए किया गया है, ताकि dontoptimize फ़्लैग का गलती से इस्तेमाल न हो. यह फ़्लैग proguard-android.txt में शामिल है.
|
false → true |
अगर आपको ऑप्टिमाइज़ेशन से बचना है, तो कस्टम proguardFile में dontoptimize को साफ़ तौर पर बताया जा सकता है. साथ ही, proguard-android-optimize.txt का इस्तेमाल भी किया जा सकता है. अगर हो सके, तो इस फ़ाइल से dontoptimize फ़्लैग को हटा दें. इससे R8 ऑप्टिमाइज़ेशन के फ़ायदे कम हो जाते हैं. अगर ऐसा नहीं है, तो android.r8.globalOptionsInConsumerRules.disallowed=false को सेट करके ऑप्ट आउट करें.
|
android. |
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
|
false → true |
पब्लिश की गई लाइब्रेरी से, काम न करने वाले नियमों को हटा देना चाहिए. इंटरनल लाइब्रेरी को, काम न करने वाले लेकिन ज़रूरी नियमों को ऐप्लिकेशन मॉड्यूल में proguardFile में ले जाना चाहिए. android.r8.globalOptionsInConsumerRules.disallowed=false को सेट करके ऑप्ट आउट करें. जब Keep की सभी उपभोक्ता फ़ाइलें साथ काम करने लगें, तो ऑप्ट आउट करने का विकल्प हटा दें.
|
android. |
AndroidSourceSet डीएसएल का इस्तेमाल करके जनरेट किए गए सोर्स के लिए, प्रोवाइडर को पास करने की अनुमति न दें.
|
false → true |
जनरेट किए गए सोर्स को रजिस्टर करने के लिए, androidComponents पर Sources एपीआई का इस्तेमाल करें.
|
android. |
अगर शेडर कंपाइलेशन की सुविधा चालू है, तो शेडर कंपाइलर पाथ को साफ़ तौर पर
local.properties
में सेट करना ज़रूरी है.
|
false → true |
glslc.dir=/path/to/shader-tools को अपने प्रोजेक्ट के
local.properties में जोड़ें.
|
हटाई गई सुविधाएं
Android Gradle प्लगिन 9.0 में ये सुविधाएं हटा दी गई हैं:
- Wear OS ऐप्लिकेशन को एम्बेड करने की सुविधा
AGP 9.0 में, Wear OS ऐप्लिकेशन को एम्बेड करने की सुविधा हटा दी गई है. यह सुविधा, अब Google Play पर काम नहीं करती. इसमेंwearAppकॉन्फ़िगरेशन औरAndroidSourceSet.wearAppConfigurationNameडीएसएल को हटाना शामिल है. Wear OS पर अपना ऐप्लिकेशन पब्लिश करने का तरीका जानने के लिए, Wear OS पर उपलब्ध कराना देखें. androidDependenciesऔरsourceSetsकी रिपोर्ट वाला टास्क- डेंसिटी स्प्लिट APK के लिए सहायता
AGP 9.0 में, स्क्रीन डेंसिटी के आधार पर स्प्लिट APK बनाने की सुविधा हटा दी गई है. इस सुविधा और इससे जुड़े एपीआई को हटा दिया गया है. एजीपी 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) } } }एजीपी के कई वर्शन को टारगेट करने वाले प्लग इन के लिए, सीधे तौर पर getter का इस्तेमाल करना, एजीपी के 9.0 से पहले के वर्शन के साथ बाइनरी के तौर पर काम करता है.
हटाया गया डीएसएल
Android Gradle प्लगिन 9.0 में ये सुविधाएं हटा दी गई हैं:
AndroidSourceSet.jni, क्योंकि यह काम नहीं कर रहा था.AndroidSourceSet.wearAppConfigurationName, क्योंकि यह Wear OS ऐप्लिकेशन के लिए एम्बेड किए गए सपोर्ट को हटाने से जुड़ा है.BuildType.isRenderscriptDebuggable, क्योंकि यह काम नहीं कर रहा था.DependencyVariantSelection. इसेDependencySelectionसे बदल दिया गया है, जिसेkotlin.android.localDependencySelectionके तौर पर दिखाया गया हैInstallation.installOptions(String). इसेInstallation.installOptionsकी बदली जा सकने वाली प्रॉपर्टी से बदल दिया गया है.PostProcessingब्लॉक, जिसे एक्सपेरिमेंट के तौर पर जोड़ा गया था, लेकिन कभी भी स्टेबल नहीं किया गया.ProductFlavor.setDimension, जिसेdimensionप्रॉपर्टी से बदल दिया गया हैLanguageSplitOptions, जो सिर्फ़ Google Play इंस्टैंट के लिए काम का था. हालांकि, अब इसका इस्तेमाल नहीं किया जाता.DensitySplit, क्योंकि अब यह सुविधा उपलब्ध नहीं है. इसके बजाय, ऐप्लिकेशन बंडल का इस्तेमाल करें.
हटाए गए एपीआई
Android Gradle प्लगिन 9.0 में ये सुविधाएं हटा दी गई हैं:
AndroidComponentsExtension.finalizeDSl. इसकी जगह अबfinalizeDslका इस्तेमाल किया जाता हैComponent.transformClassesWith. इसकी जगह अबInstrumentation.transformClassesWithका इस्तेमाल किया जाता हैComponent.setAsmFramesComputationMode. इसकी जगह अबInstrumentation.setAsmFramesComputationModeका इस्तेमाल किया जाता हैComponentBuilder.enabled. इसकी जगह अबComponentBuilder.enableका इस्तेमाल किया जाता है.DependenciesInfoBuilder.includedInApk. इसेincludeInApkसे बदल दिया गया हैDependenciesInfoBuilder.includedInBundle. इसेincludeInBundleसे बदल दिया गया हैGeneratesApk.targetSdkVersion. इसेtargetSdkसे बदल दिया गया हैVariant.minSdkVersion. इसेminSdkसे बदल दिया गया हैVariant.maxSdkVersion. इसेmaxSdkसे बदल दिया गया हैVariant.targetSdkVersion. इसेtargetSdkसे बदल दिया गया हैVariant.unitTest, क्योंकि यहcom.android.testप्लगिन पर लागू नहीं होता.unitTest,VariantBuilderसब-टाइप पर उपलब्ध है. यहHasUnitTestको एक्सटेंड करता है.VariantBuilder.targetSdkऔरtargetSdkPreview, क्योंकि लाइब्रेरी में इनका कोई मतलब नहीं था. इसके बजाय,GeneratesApkBuilder.targetSdkयाGeneratesApkBuilder.targetSdkPreviewका इस्तेमाल करें.VariantBuilder.enableUnitTest, क्योंकि यहcom.android.testप्लगिन पर लागू नहीं होता.enableUnitTest,VariantBuilderसब-टाइप पर उपलब्ध है. यहHasUnitTestBuilderको एक्सटेंड करता है.VariantBuilder.unitTestEnabledको हटा दिया गया है. इसकी जगह,HasUnitTestBuilderको एक्सटेंड करने वालेVariantBuilderसब-टाइप पर, ज़्यादा एक जैसे नाम वालेenableUnitTestका इस्तेमाल किया गया है.VariantOutput.enable. इसेenabledसे बदल दिया गया हैFeaturePluginऔरFeatureExtensionको बंद कर दिया गया है और अब इनका इस्तेमाल नहीं किया जा सकता.बंद किए गए और काम न करने वाले
BaseExtension.registerTransformएपीआई, जो सिर्फ़ एजीपी 4.2 या इससे पहले के वर्शन पर काम करने के लिए, एजीपी के सबसे नए वर्शन के साथ कंपाइल करने की अनुमति देते थे.
Gradle प्रॉपर्टी हटाई गईं
यहां दी गई Gradle प्रॉपर्टी को शुरुआत में, डिफ़ॉल्ट रूप से चालू की गई सुविधाओं को ग्लोबल तौर पर बंद करने के तरीकों के तौर पर जोड़ा गया था.
AGP 8.0 या इससे पहले के वर्शन से, ये सुविधाएं डिफ़ॉल्ट रूप से बंद हैं. इन सुविधाओं को सिर्फ़ उन सब-प्रोजेक्ट में चालू करें जो ज़्यादा बेहतर बिल्ड के लिए इनका इस्तेमाल करते हैं.
| प्रॉपर्टी | फ़ंक्शन | प्रतिस्थापन |
|---|---|---|
android. |
सभी सबप्रोजेक्ट में एआईडीएल कंपाइलेशन की सुविधा चालू करता है |
एआईडीएल कंपाइलेशन को सिर्फ़ उन सबप्रोजेक्ट में चालू करें जिनमें एआईडीएल सोर्स मौजूद हैं. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह प्रॉपर्टी सेट करें:
android {
buildFeatures {
aidl = true
}
} |
android. |
सभी सबप्रोजेक्ट में RenderScript कंपाइलेशन को चालू करता है |
रेंडरस्क्रिप्ट कंपाइलेशन को सिर्फ़ उन सबप्रोजेक्ट में चालू करें जिनमें रेंडरस्क्रिप्ट सोर्स मौजूद हैं. इसके लिए, उन प्रोजेक्ट की Gradle बिल्ड फ़ाइलों में यह प्रॉपर्टी सेट करें:
android {
buildFeatures {
renderScript = true
}
} |
लागू की गई Gradle प्रॉपर्टी
अगर आपने Gradle की ये प्रॉपर्टी सेट की हैं, तो AGP 9.0 एक गड़बड़ी दिखाता है.
Android Gradle प्लगिन अपग्रेड असिस्टेंट, इन प्रॉपर्टी का इस्तेमाल करने वाले प्रोजेक्ट को AGP 9.0 पर अपग्रेड नहीं करेगा.
| प्रॉपर्टी | फ़ंक्शन |
|---|---|
android. |
इस्तेमाल नहीं किए जाने वाले रिसॉर्स को हटाने की प्रोसेस, अब हमेशा R8 के हिस्से के तौर पर चलती है. पहले इस्तेमाल किए जाने वाले तरीके को हटा दिया गया है. |
android. |
इस्तेमाल नहीं किए जाने वाले रिसॉर्स को हटाने की प्रोसेस में, अब हमेशा सटीक तरीके से रिसॉर्स को हटाने की प्रोसेस का इस्तेमाल किया जाता है. इससे, ज़्यादा रिसॉर्स हटाए जा सकते हैं. |
R8 में किए गए बदलाव
AGP 9.0.0 में, R8 से जुड़े ये बदलाव शामिल हैं.
कॉन्फ़िगरेशन का नया विकल्प -processkotlinnullchecks
हमने Kotlin में नल चेक को प्रोसेस करने के लिए, R8 को कॉन्फ़िगर करने के लिए नया R8 विकल्प -processkotlinnullchecks जोड़ा है. इस विकल्प के लिए, एक ज़रूरी आर्ग्युमेंट देना होता है. यह आर्ग्युमेंट, इन तीन वैल्यू में से कोई एक होना चाहिए: keep, remove_message, और remove.
यह विकल्प, Kotlin कंपाइलर से जोड़ी गई इन null जांचों को प्रोसेस करता है:
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 पहले ऑप्टिमाइज़ेशन की अनुमति न दें और श्रिंक करने की अनुमति न दें बिट को सिंथेसाइज़ किए गए कंपैनियन तरीकों में ट्रांसफ़र कर देता था.
AGP 9.0 या इसके बाद के वर्शन से, कंपैनियन मेथड पर कीप रूल लागू नहीं होते. यह इस बात से मेल खाता है कि सेव रखने के नियम, कंपाइलर से सिंथेसाइज़ किए गए अन्य फ़ील्ड/तरीकों/क्लास पर लागू नहीं होते.
ऑप्टिमाइज़ेशन की अनुमति न दें और श्रिंक करने की अनुमति न दें बिट को कंपैनियन तरीकों में ट्रांसफ़र करके, पहले इस इस्तेमाल के उदाहरण का इस्तेमाल किया जा सकता था:
default/static/privateइंटरफ़ेस के तरीकों वाली लाइब्रेरी को DEX में कंपाइल करें. इसके लिए,minSdk< 24 और इंटरफ़ेस के तरीकों को बनाए रखने वाले नियमों का इस्तेमाल करें.- क्लासपाथ और
-applymappingपर मौजूद लाइब्रेरी की मदद से, ऐप्लिकेशन को कंपाइल करें. - ऐप्लिकेशन और लाइब्रेरी को मर्ज करें.
ध्यान दें कि यह सिर्फ़ -applymapping के साथ काम करता है, क्योंकि disallow
obfuscation बिट को कंपैनियन मेथड में ट्रांसफ़र नहीं किया जाता. इसका मतलब है कि पहले चरण से जनरेट की गई कंपैनियन क्लास में, मेथड के नाम अस्पष्ट होंगे.
अब minSdk < 24 के लिए, इस इस्तेमाल के उदाहरण का इस्तेमाल नहीं किया जा सकता. इस समस्या को हल करने के लिए, यह तरीका अपनाएं:
default/static/privateइंटरफ़ेस के तरीकों का इस्तेमाल करके, लाइब्रेरी को डीशुगर करें, ताकिminSdk< 24 वाली क्लास फ़ाइलों को डीशुगर किया जा सके.- R8 और उन नियमों का इस्तेमाल करके, डिशुगर किए गए आर्टफ़ैक्ट को कंपाइल करें जो कंपैनियन क्लास में इंटरफ़ेस के तरीकों को बनाए रखते हैं.
- क्लासपाथ पर लाइब्रेरी के साथ ऐप्लिकेशन को कंपाइल करें.
- ऐप्लिकेशन और डिशुगर किए गए आर्टफ़ैक्ट को मर्ज करें.
इसका एक और खराब असर यह है कि अब इंटरफ़ेस कंपैनियन मेथड में, पहचान छिपाने वाली और लोकल क्लास के लिए, इनर क्लास और एनक्लोज़िंग मेथड एट्रिब्यूट को नहीं रखा जा सकता.
एमिट की गई डिफ़ॉल्ट सोर्स फ़ाइल को बदलकर r8-map-id-<MAP_ID> करें
यह बदलाव, एजीपी के 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 डिशुगरिंग में, छोटे किए गए सिंथेटिक नामों का इस्तेमाल करने की सुविधा चालू करें
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 प्लगिन |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| लिंट |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| लिंट इंटिग्रेशन |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Shrinker (R8) |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||