packageScope के साथ R8 का इस्तेमाल करके, कुछ खास पैकेज को ऑप्टिमाइज़ किया जा सकता है. इसे उन ऐप्लिकेशन के लिए बनाया गया है जो अब तक R8 का इस्तेमाल नहीं करते हैं. यह एक वैकल्पिक सुविधा है. जिन ऐप्लिकेशन में पहले से ही R8 का इस्तेमाल किया जा रहा है उनके लिए, इस सुविधा का इस्तेमाल करने का सुझाव नहीं दिया जाता.
packageScope का इस्तेमाल करने के बारे में सोचें
अगर आपका ऐप्लिकेशन पहले से ही R8 का इस्तेमाल करता है, तो packageScope का इस्तेमाल न करें. ऐसा इसलिए, क्योंकि यह परफ़ॉर्मेंस और ऐप्लिकेशन के साइज़ के हिसाब से सबसे सही कॉन्फ़िगरेशन नहीं है. इसके बजाय, बेहतर कीप नियमों का इस्तेमाल करके, अपने ऐप्लिकेशन के R8 कॉन्फ़िगरेशन को बेहतर बनाएं. अगर कंपैटिबिलिटी मोड का इस्तेमाल किया जा रहा है, तो R8 के फ़ुल मोड पर माइग्रेट करें.
ऐसे ऐप्लिकेशन जो अब तक R8 का इस्तेमाल नहीं करते हैं, लेकिन R8 को अपना रहे हैं वे packageScope का इस्तेमाल करके, धीरे-धीरे ट्रांज़िशन को मैनेज कर सकते हैं. R8, ऐप्लिकेशन के व्यवहार में बदलाव करने वाले दमदार ऑप्टिमाइज़ेशन लागू करता है. इसलिए, इन ऑप्टिमाइज़ेशन को उन खास पैकेज तक सीमित करना बेहतर होता है जिन्हें ऑप्टिमाइज़ करना सुरक्षित है. जैसे, AndroidX और Kotlin. इससे आपको कम जोखिम के साथ परफ़ॉर्मेंस में सुधार करने में मदद मिलती है. जब आपका ऐप्लिकेशन स्थिर हो जाए, तब इन ऑप्टिमाइज़ेशन को धीरे-धीरे अपने बाकी कोडबेस और डिपेंडेंसी तक बढ़ाया जा सकता है. साथ ही, हर चरण में स्थिरता की जांच की जा सकती है.
ज़रूरी शर्तें
packageScope के साथ R8 का इस्तेमाल करने के लिए, इनकी ज़रूरत होती है:
- Android Gradle प्लगिन 9.0 या इसके बाद का वर्शन.
- R8 को फ़ुल मोड में इस्तेमाल किया गया हो, न कि कंपैटिबिलिटी मोड में.
ऑप्टिमाइज़ेशन को कॉन्फ़िगर करना
packageScope की मदद से ऑप्टिमाइज़ेशन की सुविधा चालू करने के लिए, यह तरीका अपनाएं.
ऑप्टिमाइज़ करने के लिए लाइब्रेरी चुनें
ऑप्टिमाइज़ की जाने वाली लाइब्रेरी की पहचान करें. हमारा सुझाव है कि आप AndroidX और Kotlin लाइब्रेरी androidx.**, kotlin.**, और kotlinx.** से शुरुआत करें. ऐसा इसलिए, क्योंकि ये स्टेबल लाइब्रेरी हैं और इन्हें R8 के साथ काम करने के लिए कॉन्फ़िगर किया गया है.
packageScope के साथ R8 का इस्तेमाल करने की सुविधा चालू करें
अपने प्रोजेक्ट की gradle.properties फ़ाइल में यह कोड जोड़ें:
android.r8.gradual.support=true
ऑप्टिमाइज़ेशन ब्लॉक सेट अप करना
अपने मॉड्यूल-लेवल की build.gradle.kts (या build.gradle) फ़ाइल में, अपनी रिलीज़ के लिए तैयार बिल्ड कॉन्फ़िगरेशन में optimization ब्लॉक जोड़ें. इस ब्लॉक में, packageScope का इस्तेमाल करके उन खास पैकेज की सूची बनाएं जिन्हें आपको ऑप्टिमाइज़ करना है. अपनी build.gradle.kts फ़ाइल में, पैकेज की सूची को setOf() में रैप करें.
Kotlin
android {
buildTypes {
release {
optimization {
enable = true
packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
}
}
}
}
शानदार
android {
buildTypes {
release {
optimization {
enable = true
packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
}
}
}
}
ऑप्टिमाइज़ेशन की जांच करना
packageScope का एलान करने या उसे अपडेट करने के बाद, अपने ऐप्लिकेशन की अच्छी तरह से जांच करें. इससे यह पुष्टि की जा सकेगी कि ऐप्लिकेशन में कोई अनचाही गड़बड़ी या व्यवहार में बदलाव नहीं हुआ है.
चुने गए पैकेज को ऑप्टिमाइज़ करने से लेकर पूरे ऐप्लिकेशन को ऑप्टिमाइज़ करने तक का ट्रांज़िशन
ऑप्टिमाइज़ेशन के ज़्यादा से ज़्यादा फ़ायदे पाने के लिए, आपको अपने पूरे ऐप्लिकेशन पर packageScope के बजाय R8 का इस्तेमाल करना चाहिए. इस प्रोसेस में, ऑप्टिमाइज़ेशन कवरेज को धीरे-धीरे बढ़ाना शामिल है:
- स्टेबल लाइब्रेरी का इस्तेमाल शुरू करें. शुरुआत में, सिर्फ़ उन लाइब्रेरी को शामिल करें जिनका इस्तेमाल बड़े पैमाने पर किया जाता है और जो स्टेबल हैं. साथ ही, वे R8 के ऑप्टिमाइज़ेशन के साथ काम करती हैं. इसके लिए,
packageScopeसूची का इस्तेमाल करें. AndroidX और Kotlin लाइब्रेरीandroidx.**,kotlin.**, औरkotlinx.**से शुरू करें. - धीरे-धीरे पैकेज जोड़ें.
packageScopeमें धीरे-धीरे नए पैकेज प्रीफ़िक्स जोड़ें:- डिपेंडेंसी का आकलन करें. अपने ऐप्लिकेशन की लाइब्रेरी की समीक्षा करें.
packageScopeसूची में जोड़ने के लिए, Google की आधिकारिक लाइब्रेरी (उदाहरण के लिए,com.google.**) औरOkHttpजैसी अन्य मज़बूत लाइब्रेरी (उदाहरण के लिए,okhttp3.**औरokio.**) सबसे सही विकल्प हैं. उन लाइब्रेरी को प्राथमिकता दें जिनमें हैवी रिफ़्लेक्शन, सीरियलाइज़ेशन या नेटिव कोड कॉल (जेएनआई) शामिल नहीं हैं. - पैकेज के साइज़ के हिसाब से प्राथमिकता दें. Android Studio के APK ऐनलिसिस टूल का इस्तेमाल करके, यह पता लगाएं कि आपके ऐप्लिकेशन का साइज़ बढ़ाने में किन फ़ाइलों का सबसे ज़्यादा योगदान है.
- R8 को बंद करके, रिलीज़ करने के लिए एएबी या APK बनाएं.
- इसे Analyzer में खोलें और
dexफ़ाइलों की जांच करें. - पैकेज को साइज़ के हिसाब से क्रम से लगाएं. सबसे बड़े पैकेज से, ऑप्टिमाइज़ेशन के लिए लागत पर सबसे ज़्यादा रिटर्न (आरओआई) मिलता है. इन लाइब्रेरी को पहले टारगेट करने से, आपको प्रोसेस की शुरुआत में ही फ़ाइल के साइज़ में काफ़ी कमी देखने को मिलती है. हालांकि, ऐसा तब तक होता है, जब तक इन लाइब्रेरी में बहुत ज़्यादा कीप नियम न हों. ज़्यादा जानकारी के लिए, लाइब्रेरी सोच-समझकर चुनें लेख पढ़ें.
- डिपेंडेंसी का आकलन करें. अपने ऐप्लिकेशन की लाइब्रेरी की समीक्षा करें.
- व्यवहार में हुए बदलावों की पुष्टि करें. हर नए पैकेज प्रीफ़िक्स को जोड़ने के बाद, पूरी तरह से जांच करें. इससे किसी भी तरह की गड़बड़ी या अनचाहे व्यवहार का पता लगाया जा सकता है और उसे ठीक किया जा सकता है.
- ऐप्लिकेशन पैकेज आखिर में जोड़ें. अगर आपके ऐप्लिकेशन पैकेज में रिफ़्लेक्शन का इस्तेमाल ज़्यादा नहीं किया जाता है, तो ऐप्लिकेशन पैकेज को
packageScopeमें शामिल करें. साथ ही, ज़रूरत के हिसाब से कीप नियमों को धीरे-धीरे जोड़ें. अगर आपके ऐप्लिकेशन पैकेज में रिफ़्लेक्शन का इस्तेमाल ज़्यादा किया जाता है, तोpackageScopeमें पैकेज शामिल करें. साथ ही, ज़रूरी पैकेज के लिए पैकेज-वाइड कीप नियम जोड़ें. निजी डेटा के रखरखाव के नियमों को बेहतर बनाने के लिए, उन पर बार-बार काम करें. - अपने पूरे ऐप्लिकेशन में R8 का इस्तेमाल करें. जब आपके ऐप्लिकेशन की ज़्यादातर डिपेंडेंसी,
packageScopeके एलान में शामिल हो जाएं और आपका ऐप्लिकेशन स्टेबल हो जाए, तबpackageScopeको हटा दें, ताकि आपके पूरे ऐप्लिकेशन को फ़ुल मोड में ऑप्टिमाइज़ किया जा सके.