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

अपने ऐप्लिकेशन को छोटा, ऑप्टिमाइज़, और तेज़ी से काम करने वाला बनाने के लिए, 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 में बेहतर बनाया है!)

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

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

दस्तावेज़ में, अब फ़ॉलो-अप के ज़रूरी चरणों और बेहतर स्थितियों के बारे में भी बताया गया है. हमने टेस्टिंग और समस्या हल करने से जुड़ा एक सेक्शन जोड़ा है, ताकि परफ़ॉर्मेंस में हुए सुधारों की पुष्टि की जा सके और आने वाली संभावित समस्याओं को डीबग किया जा सके. बेहतर कॉन्फ़िगरेशन वाले सेक्शन में, यह बताया गया है कि खास बिल्ड वैरिएंट को कैसे टारगेट किया जाए, किन संसाधनों को रखा जाए या हटाया जाए, और लाइब्रेरी के लेखकों के लिए ऑप्टिमाइज़ेशन के खास निर्देश दिए गए हैं. इससे, यह पक्का किया जा सकता है कि आपके पास अन्य डेवलपर के इस्तेमाल के लिए, ऑप्टिमाइज़ किया गया और 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 के बाद से, अब R8 से प्रोसेस किए गए बिल्ड के लिए, Android Studio के Logcat में स्टैक ट्रेस को अपने-आप डी-ऑब्फ़स्केट किया जा सकता है. इससे, आपको उस कोड की सटीक लाइन का पता लगाने में मदद मिलती है जिसकी वजह से कोई समस्या आ रही है. यह सुविधा, पूरी तरह से ऑप्टिमाइज़ किए गए ऐप्लिकेशन में भी काम करती है. इसके बारे में, 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 का इस्तेमाल शुरू करें और अपने ऐप्लिकेशन को तेज़ी से काम करने वाला बनाएं.

इसे लिखा है:
पढ़ना जारी रखें