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

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

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

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

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

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

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

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

यह लेख पढ़ने के बाद, YouTube पर R8 ऑप्टिमाइज़र के बारे में बताने वाले Performance Spotlight Week का परिचय देखें.

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

image.png

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

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

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

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

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

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

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

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

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

image.png

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

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

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

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

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

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

image.png

इसलिए, इसे वही नाम देते हैं जो यह है: परफ़ॉर्मेंस को जान-बूझकर ऑप्टिमाइज़ करना एक खूबी है.

आपको ज़्यादा परफ़ॉर्म करने वाला ऐप्लिकेशन बनाने में मदद करना

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

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

हमने कीप नियमों के बारे में अपनी गाइड को काफ़ी हद तक बढ़ाया है. ये नियम, R8 ऑप्टिमाइज़र को कंट्रोल करने का मुख्य तरीका हैं. अब हम एक सेक्शन उपलब्ध कराते हैं, जिसमें कीप नियमों के बारे में बताया गया है. इसमें, उन्हें लागू करने का तरीका और उन्हें लिखने और बनाए रखने के सबसे सही तरीकों के बारे में जानकारी दी गई है. हम व्यावहारिक और काम के उदाहरण भी उपलब्ध कराते हैं. इससे आपको यह समझने में मदद मिलती है कि रनटाइम पर ज़रूरी कोड को 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 के बाद से, आपको Lint की चेतावनी दिखेगी. proguard-android.txt

image.png

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

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

अगले चरण

YouTube पर R8 ऑप्टिमाइज़र के बारे में बताने वाले Performance Spotlight Week का परिचय देखें.

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

अब खुद ही इसके फ़ायदे देखें.

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

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

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

शुक्रवार को 'Ask Android' सेशन के लिए अपने सवाल भेजें

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

इसे लिखा है:

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