इवेंट और प्रोग्राम

R8 का इस्तेमाल करके, अपने ऐप्लिकेशन को छोटा करें, उसे ऑप्टिमाइज़ करें, और उसे तेज़ी से ट्रैक करें

पांच मिनट में पढ़ें
Ben Weiss
डेवलपर रिलेशंस इंजीनियर

अपने ऐप्लिकेशन को छोटा करने, ऑप्टिमाइज़ करने, और तेज़ी से ट्रैक करने के लिए R8 का इस्तेमाल करना

Android Performance Spotlight Week के पहले दिन आपका स्वागत है!

हम सबसे पहले, आपके ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए, सबसे ज़्यादा असरदार और आसानी से किए जा सकने वाले बदलाव के बारे में बता रहे हैं: फ़ुल मोड में R8 ऑप्टिमाइज़र को चालू करना.

आपको शायद पहले से ही पता होगा कि R8, ऐप्लिकेशन के साइज़ को कम करने वाला टूल है. यह इस्तेमाल न होने वाले कोड और संसाधनों को हटाने के साथ-साथ, आपके ऐप्लिकेशन का साइज़ कम करने में भी मदद करता है. हालांकि, इसकी असली ताकत ऑप्टिमाइज़र के तौर पर काम करना है. इसमें यह वाकई g-R8 है.

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

इस लेख को पढ़ने के बाद, YouTube पर R8 ऑप्टिमाइज़र के लिए परफ़ॉर्मेंस स्पॉटलाइट वीक का परिचय देखें.

R8, आपके ऐप्लिकेशन की परफ़ॉर्मेंस को कैसे बेहतर बनाता है

image.png

आइए, उन सबसे बड़े चरणों पर एक नज़र डालें जो R8 ऑप्टिमाइज़र, ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए करता है.

ऐप्लिकेशन का साइज़ कम करने के लिए, ट्री शेकिंग सबसे ज़रूरी तरीका है. इस फ़ेज़ के दौरान, R8 ऑप्टिमाइज़र उन लाइब्रेरी से इस्तेमाल न किया गया कोड हटा देता है जिन पर आपका ऐप्लिकेशन निर्भर करता है. साथ ही, यह आपके कोडबेस से डेड कोड भी हटा देता है.

मेथड इनलाइनिंग, किसी मेथड कॉल को असल कोड से बदल देती है. इससे रनटाइम परफ़ॉर्मेंस बेहतर होती है.

कोड को ज़्यादा कॉम्पैक्ट बनाने के लिए, क्लास मर्ज करने के साथ-साथ अन्य रणनीतियां लागू की जाती हैं. इस समय, आपके सभी बेहतरीन ऐब्स्ट्रैक्शन, जैसे कि इंटरफ़ेस और क्लास हैरारकी का कोई मतलब नहीं है. इन्हें हटाया जा सकता है.

कोड छोटा करने की सुविधा का इस्तेमाल, क्लास, फ़ील्ड, और मेथड के नामों को छोटे और बेमतलब के नामों में बदलने के लिए किया जाता है. इसलिए, हो सकता है कि आपको MyDataModel के बजाय a नाम की क्लास मिले. R8 की मदद से ऑप्टिमाइज़ किए गए ऐप्लिकेशन से स्टैक ट्रेस पढ़ते समय, इसी वजह से सबसे ज़्यादा भ्रम होता है. (ध्यान दें कि हमने AGP 9.0 में इसे बेहतर बनाया है!)

संसाधन कम करने की सुविधा, ऐप्लिकेशन के साइज़ को और कम करती है. ऐसा, इस्तेमाल न किए गए संसाधनों को हटाकर किया जाता है. जैसे, एक्सएमएल फ़ाइलें और ड्रॉएबल.

इन चरणों को लागू करने से, R8 ऑप्टिमाइज़र ऐप्लिकेशन के स्टार्टअप टाइम को बेहतर बनाता है. साथ ही, यूज़र इंटरफ़ेस (यूआई) को ज़्यादा आसानी से रेंडर करता है. इससे स्लो और फ़्रीज़ फ़्रेम की संख्या कम हो जाती है. साथ ही, डिवाइस पर मौजूद संसाधनों के इस्तेमाल को बेहतर बनाता है.

केस स्टडी: R8 की मदद से Reddit की परफ़ॉर्मेंस में हुए सुधार

R8 की मदद से परफ़ॉर्मेंस को बेहतर बनाने का एक उदाहरण यहां दिया गया है. आइए, Reddit का एक उदाहरण देखते हैं. Reddit for Android ऐप्लिकेशन में R8 को फ़ुल मोड में चालू करने के बाद, इसकी परफ़ॉर्मेंस में कई तरह से काफ़ी सुधार हुआ.

image.png

कैप्शन: R8 ने Reddit के ऐप्लिकेशन की परफ़ॉर्मेंस को कैसे बेहतर बनाया

टीम ने पाया कि ऐप्लिकेशन 40% तेज़ी से कोल्ड स्टार्टअप हो रहा है, "ऐप्लिकेशन काम नहीं कर रहा" (एएनआर) गड़बड़ियों में 30% की कमी आई है, फ़्रेम रेंडरिंग में 25% का सुधार हुआ है, और ऐप्लिकेशन के साइज़ में 14% की कमी आई है.

उपयोगकर्ताओं को बेहतर अनुभव देने के लिए, इन सुधारों को लागू करना ज़रूरी है. तेज़ी से शुरू होने का मतलब है कि आपको कम इंतज़ार करना पड़ेगा और कॉन्टेंट को तुरंत ऐक्सेस किया जा सकेगा. ANR की संख्या कम होने से, ऐप्लिकेशन ज़्यादा भरोसेमंद और स्थिर होता है. इससे लोगों को बेहतर अनुभव मिलता है. फ़्रेम को आसानी से रेंडर करने से, यूज़र इंटरफ़ेस (यूआई) में होने वाली रुकावटें दूर हो जाती हैं. इससे स्क्रोलिंग और ऐनिमेशन, आसानी से और तुरंत काम करते हैं. तकनीकी तौर पर हुए इस फ़ायदे का असर, लोगों की भावनाओं पर भी साफ़ तौर पर दिखा.

इनके बारे में ज़्यादा जानने के लिए, हमारा ब्लॉग पढ़ें.

R8 का इस्तेमाल करने से होने वाले गैर-तकनीकी साइड इफ़ेक्ट

अपने पार्टनर के साथ काम करने के दौरान, हमने देखा है कि इन तकनीकी सुधारों का सीधा असर उपयोगकर्ता की संतुष्टि पर पड़ता है. साथ ही, ये उपयोगकर्ता के जुड़ाव, सेशन की अवधि, और उपयोगकर्ता के बने रहने की दर में दिख सकते हैं. तकनीकी परफ़ॉर्मेंस में सुधार होने से, उपयोगकर्ता की दिलचस्पी पर भी सकारात्मक असर पड़ा है. इसे हर दिन, हर हफ़्ते या हर महीने के सक्रिय उपयोगकर्ताओं की संख्या से मापा जा सकता है. हमने देखा है कि R8 को अपनाने के बाद, Play Store पर ऐप्लिकेशन की रेटिंग में बढ़ोतरी हुई है. इस जानकारी को अपने प्रॉडक्ट के मालिकों, सीटीओ, और फ़ैसले लेने वाले लोगों के साथ शेयर करने से, आपके ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने में मदद मिल सकती है.

image.png

इसलिए, इसे हम परफ़ॉर्मेंस को जान-बूझकर ऑप्टिमाइज़ करना कहते हैं. यह एक गुण है.

बेहतर परफ़ॉर्म करने वाले ऐप्लिकेशन के बारे में जानकारी देना

हमें पता चला है कि R8 के लिए, डेवलपर से जुड़ी हमारी गाइड को बेहतर बनाने की ज़रूरत है. इसलिए, हमने इस पर काम करना शुरू कर दिया. R8 ऑप्टिमाइज़र के लिए, डेवलपर के लिए उपलब्ध दिशा-निर्देश अब ज़्यादा काम के हैं. साथ ही, R8 को चालू करने और डीबग करने के बारे में पूरी जानकारी देते हैं.

दस्तावेज़ में, अपनाने के लिए हाई-लेवल की रणनीति के बारे में बताया गया है. इसमें, ऑप्टिमाइज़ेशन के साथ काम करने वाली लाइब्रेरी चुनने के महत्व पर ज़ोर दिया गया है. साथ ही, स्थिरता बनाए रखने के लिए, R8 की सुविधाओं को धीरे-धीरे अपनाने के बारे में बताया गया है. इस तरीके से, R8 के फ़ायदों को सुरक्षित तरीके से अनलॉक किया जा सकता है. साथ ही, डीबग करने में मुश्किल आने वाली समस्याओं के बारे में आपको दिशा-निर्देश भी मिलते हैं.

हमने कीप नियमों के बारे में जानकारी को काफ़ी हद तक बढ़ा दिया है. ये नियम, R8 ऑप्टिमाइज़र को कंट्रोल करने का मुख्य तरीका हैं. अब हम एक सेक्शन उपलब्ध करा रहे हैं. इसमें बताया गया है कि Keep के नियम क्या हैं और उन्हें कैसे लागू किया जाता है. साथ ही, उन्हें लिखने और बनाए रखने के सबसे सही तरीकों के बारे में भी बताया गया है. हम इस्तेमाल के ऐसे उदाहरण और तरीके भी बताते हैं जिन्हें आसानी से लागू किया जा सकता है. इससे आपको यह समझने में मदद मिलती है कि R8 को, रनटाइम के दौरान ज़रूरी कोड हटाने से कैसे रोका जाए. जैसे, रिफ़्लेक्शन के ज़रिए ऐक्सेस किया गया कोड या JNI नेटिव इंटरफ़ेस का इस्तेमाल.

दस्तावेज़ में, अब फ़ॉलो-अप के ज़रूरी चरणों और ऐडवांस स्थितियों के बारे में भी बताया गया है. हमने टेस्टिंग और समस्या हल करना सेक्शन जोड़ा है. इससे, आपको परफ़ॉर्मेंस में हुए फ़ायदों की पुष्टि करने और आने वाली किसी भी संभावित समस्या को ठीक करने में मदद मिलेगी. ऐडवांस कॉन्फ़िगरेशन सेक्शन में बताया गया है कि किसी खास बिल्ड वैरिएंट को कैसे टारगेट किया जाता है. साथ ही, यह भी बताया गया है कि किन संसाधनों को रखा जाता है या हटाया जाता है. इसमें लाइब्रेरी के लेखकों के लिए, ऑप्टिमाइज़ेशन से जुड़े खास निर्देश दिए गए हैं. इससे यह पक्का किया जा सकता है कि अन्य डेवलपर के इस्तेमाल के लिए, ऑप्टिमाइज़ किया गया और R8 के साथ काम करने वाला पैकेज उपलब्ध कराया जा सके.

R8 ऑप्टिमाइज़र की सभी सुविधाओं को चालू करना

Android Gradle प्लगिन के 8.0 वर्शन के बाद से, R8 ऑप्टिमाइज़र डिफ़ॉल्ट रूप से "फ़ुल मोड" का इस्तेमाल करता है. अगर आपका प्रोजेक्ट कई सालों से डेवलप किया जा रहा है, तो हो सकता है कि इसमें इसे बंद करने के लिए लेगसी फ़्लैग शामिल हो. इस लाइन के लिए, अपनी gradle.properties फ़ाइल देखें और इसे हटा दें.

android.enableR8.fullMode=false // delete this line to enable R8's full potential

अब देखें कि आपने रिलीज़ वर्शन के लिए, अपने ऐप्लिकेशन की build.gradle.kts फ़ाइल में R8 को चालू किया है या नहीं. isMinifyEnabled और isShrinkResources को सही पर सेट करके, इसे चालू किया जाता है. इस चरण में, डिफ़ॉल्ट और कस्टम कॉन्फ़िगरेशन फ़ाइलें भी पास की जा सकती हैं.

release {

   isMinifyEnabled = true

   isShrinkResources = true

   proguardFiles(

       getDefaultProguardFile("proguard-android-optimize.txt"),

       "keep-rules.pro"

   )

}

केस स्टडी: Disney+ की परफ़ॉर्मेंस में सुधार

Disney+ के इंजीनियर, ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए काम कर रहे हैं. साथ ही, वे ऐप्लिकेशन के उपयोगकर्ता अनुभव को ऑप्टिमाइज़ कर रहे हैं. कभी-कभी, छोटे-छोटे बदलावों से भी काफ़ी फ़र्क़ पड़ सकता है. R8 कॉन्फ़िगरेशन की जांच करते समय टीम को पता चला कि -dontoptimize फ़्लैग का इस्तेमाल किया जा रहा है. इसे डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल के ज़रिए लाया गया था. आज भी कई ऐप्लिकेशन में इसका इस्तेमाल किया जाता है.

proguard-android.txt को proguard-android-optimize.txt से बदलने के बाद, Disney+ की टीम को अपने ऐप्लिकेशन की परफ़ॉर्मेंस में काफ़ी सुधार देखने को मिले.

image.png

जब उपयोगकर्ताओं के लिए, इस बदलाव वाला ऐप्लिकेशन का नया वर्शन रोल आउट किया गया, तब Disney+ को ऐप्लिकेशन के स्टार्टअप में 30% की कमी और यूज़र-पर्सीव्ड एएनआर में 25% की कमी देखने को मिली. 

आज भी कई ऐप्लिकेशन, proguard-android.txt फ़ाइल का इस्तेमाल करते हैं. इसमें -dontoptimize फ़्लैग शामिल होता है. इसलिए, हम टूल को बेहतर बनाने पर काम कर रहे हैं.

टूल से जुड़ी सहायता

Android Studio Narwhal 3 Feature Drop से, proguard-android.txt  का इस्तेमाल करने पर आपको लिंट की चेतावनी दिखेगी 

image.png

AGP 9.0 से, हम इस फ़ाइल के लिए सहायता देना पूरी तरह से बंद कर रहे हैं. इसका मतलब है कि आपको proguard-android-optimize.txt पर माइग्रेट करना होगा.

हमने Android Studio की नई सुविधाओं पर भी काम किया है, ताकि R8-ऑप्टिमाइज़ किए गए कोड को डीबग करना पहले से ज़्यादा आसान हो जाए. AGP 9.0 से, R8 की मदद से प्रोसेस किए गए बिल्ड के लिए, Android Studio के Logcat में स्टैक ट्रेस को अपने-आप डी-ऑब्फ़स्केट किया जा सकता है. इससे आपको उस कोड लाइन का पता लगाने में मदद मिलती है जिसकी वजह से समस्या आ रही है. यह सुविधा, पूरी तरह से ऑप्टिमाइज़ किए गए ऐप्लिकेशन में भी काम करती है. इस बारे में ज़्यादा जानकारी, कल Android Performance Spotlight Week के दौरान पोस्ट किए जाने वाले ब्लॉग में दी जाएगी.

अगले चरण

YouTube पर R8 ऑप्टिमाइज़र के बारे में जानकारी देने वाला वीडियो देखें.

📣 परफ़ॉर्मेंस चैलेंज में हिस्सा लें!

अब समय आ गया है कि आप खुद इन फ़ायदों को देखें.

हमारा सुझाव है कि आप अपने ऐप्लिकेशन के लिए, R8 का फ़ुल मोड आज ही चालू करें.

  1. शुरू करने के लिए, हमारी डेवलपर गाइड देखें: ऐप्लिकेशन ऑप्टिमाइज़ेशन की सुविधा चालू करना.
  2. देखें कि क्या अब भी proguard-android.txt का इस्तेमाल किया जा रहा है. अगर हां, तो इसे proguard-android-optimize.txt से बदलें.
  3. इसके बाद, असर का आकलन करें. सिर्फ़ अंतर को महसूस न करें, बल्कि इसकी पुष्टि करें. स्टार्टअप से पहले और बाद में, स्टार्टअप में लगने वाले समय को मेज़र करने के लिए,  GitHub पर मौजूद हमारे Macrobenchmark के सैंपल ऐप्लिकेशन से कोड को अडॉप्ट करके, अपनी परफ़ॉर्मेंस में हुए सुधार को मेज़र करें.

हमें भरोसा है कि इससे आपके ऐप्लिकेशन की परफ़ॉर्मेंस में काफ़ी सुधार होगा. R8 को चालू करने या उससे जुड़ी किसी समस्या को हल करने के बारे में कोई सवाल पूछने के लिए, #optimizationEnabled का इस्तेमाल करें. हम यहां आपकी मदद करने के लिए हैं.

शुक्रवार को होने वाले 'Android से पूछें' सेशन के लिए अपने सवाल तैयार रखें

परफ़ॉर्मेंस से जुड़े किसी भी सवाल के लिए, #AskAndroid सोशल टैग का इस्तेमाल करें. हम पूरे हफ़्ते आपके सवालों पर नज़र रखते हैं. साथ ही, 21 नवंबर, शुक्रवार को परफ़ॉर्मेंस के बारे में 'Android से पूछें' सेशन में कई सवालों के जवाब देंगे. कल के सेशन में, हम डीबग करने और समस्या हल करने के बारे में ज़्यादा जानकारी देंगे. हमारे साथ बने रहें. हालांकि, फ़िलहाल R8 का इस्तेमाल शुरू करें और अपने ऐप्लिकेशन को फ़ास्ट ट्रैक पर ले जाएं.

इसे लिखा है:

पढ़ना जारी रखें