बेहतर उपयोगकर्ता अनुभव देने के लिए, आपको अपने ऐप्लिकेशन को ऑप्टिमाइज़ करना चाहिए, ताकि वह कम से कम साइज़ का हो और तेज़ी से काम करे. हमारा ऐप्लिकेशन ऑप्टिमाइज़र, R8, आपके ऐप्लिकेशन को बेहतर बनाता है. इसके लिए, यह इस्तेमाल न होने वाले कोड और संसाधनों को हटाता है, रनटाइम परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए कोड को फिर से लिखता है, और अन्य काम करता है. आपके उपयोगकर्ताओं के लिए इसका मतलब यह है कि:
- तेजी से शुरू कर सकते हैं
- रेंडरिंग और रनटाइम परफ़ॉर्मेंस को बेहतर बनाया गया है
- कम एएनआर
ऐप्लिकेशन ऑप्टिमाइज़ेशन की सुविधा चालू करने के लिए, अपने रिलीज़ बिल्ड's ऐप्लिकेशन-लेवल की बिल्ड स्क्रिप्ट में isMinifyEnabled = true (कोड ऑप्टिमाइज़ेशन के लिए) और isShrinkResources = true (संसाधन ऑप्टिमाइज़ेशन के लिए) सेट करें. इसके लिए, यहां दिया गया कोड देखें. हमारा सुझाव है कि आप हमेशा दोनों सेटिंग चालू रखें. हमारा यह भी सुझाव है कि ऐप्लिकेशन ऑप्टिमाइज़ेशन की सुविधा को सिर्फ़ अपने ऐप्लिकेशन के उस फ़ाइनल वर्शन में चालू करें जिसे पब्लिश करने से पहले टेस्ट किया जाता है. आम तौर पर, यह रिलीज़ बिल्ड होता है. ऐसा इसलिए, क्योंकि ऑप्टिमाइज़ेशन की वजह से आपके प्रोजेक्ट को बिल्ड होने में ज़्यादा समय लगता है. साथ ही, कोड में बदलाव करने के तरीके की वजह से डीबग करना मुश्किल हो सकता है.
Kotlin
android { buildTypes { release { // Enables code-related app optimization. isMinifyEnabled = true // Enables resource shrinking. isShrinkResources = true proguardFiles( // Default file with automatically generated optimization rules. getDefaultProguardFile("proguard-android-optimize.txt"), ... ) ... } } ... }
Groovy
android { buildTypes { release { // Enables code-related app optimization. minifyEnabled true // Enables resource shrinking. shrinkResources true // Default file with automatically generated optimization rules. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') ... } } }
छोटे ऐप्लिकेशन के लिए भी, संसाधनों को कम करने की सुविधा को ऑप्टिमाइज़ किया गया है
Android Gradle प्लगिन (AGP) के 8.12.0 वर्शन में, ऑप्टिमाइज़ किए गए संसाधन को छोटा करने की सुविधा जोड़ी गई है. इसका मकसद, संसाधन और कोड ऑप्टिमाइज़ेशन को इंटिग्रेट करना है, ताकि और भी छोटे और तेज़ी से काम करने वाले ऐप्लिकेशन बनाए जा सकें.
ऑप्टिमाइज़ किए गए संसाधन को छोटा करने की सुविधा चालू करना
AGP के 9.0.0 से पहले के वर्शन के लिए, ऑप्टिमाइज़ की गई नई रिसोर्स श्रिंकिंग पाइपलाइन चालू करने के लिए, अपने प्रोजेक्ट की gradle.properties फ़ाइल में यह जोड़ें:
android.r8.optimizedResourceShrinking=true
अगर AGP 9.0.0 या इसके बाद के वर्शन का इस्तेमाल किया जा रहा है, तो आपको android.r8.optimizedResourceShrinking=true सेट करने की ज़रूरत नहीं है. ऑप्टिमाइज़ किए गए संसाधन को छोटा करने की सुविधा, आपके बिल्ड कॉन्फ़िगरेशन में isShrinkResources = true चालू होने पर अपने-आप लागू हो जाती है.
R8 ऑप्टिमाइज़ेशन सेटिंग की पुष्टि करना और उन्हें कॉन्फ़िगर करना
R8 की ऑप्टिमाइज़ेशन की सभी सुविधाओं का इस्तेमाल करने के लिए, अपने प्रोजेक्ट की gradle.properties फ़ाइल से यह लाइन हटाएं. हालांकि, ऐसा सिर्फ़ तब करें, जब यह लाइन मौजूद हो:
android.enableR8.fullMode=false # Remove this line from your codebase.
ध्यान दें कि ऐप्लिकेशन ऑप्टिमाइज़ेशन की सुविधा चालू करने पर, स्टैक ट्रेस को समझना मुश्किल हो जाता है. ऐसा खास तौर पर तब होता है, जब R8 क्लास या तरीके के नामों को बदल देता है. अपने सोर्स कोड से सही तरीके से मेल खाने वाले स्टैक ट्रेस पाने के लिए, ओरिजनल स्टैक ट्रेस वापस पाना लेख पढ़ें.
अगर R8 चालू है, तो आपको स्टार्टअप की परफ़ॉर्मेंस को और बेहतर बनाने के लिए, स्टार्टअप प्रोफ़ाइलें बनानी चाहिए.
अगर ऐप्लिकेशन ऑप्टिमाइज़ेशन की सुविधा चालू करने पर गड़बड़ियां होती हैं, तो उन्हें ठीक करने के लिए यहां कुछ रणनीतियां दी गई हैं:
- कुछ कोड को बिना बदले रखने के लिए, बदलाव न करने से जुड़े नियम जोड़ें.
- ऑप्टिमाइज़ेशन को धीरे-धीरे लागू करें.
- अपने कोड को अपडेट करें, ताकि ऑप्टिमाइज़ेशन के लिए बेहतर लाइब्रेरी का इस्तेमाल किया जा सके.
अगर आपको अपनी बिल्ड स्पीड को ऑप्टिमाइज़ करना है, तो कॉन्फ़िगर करें कि R8 कैसे काम करता है लेख पढ़ें. इसमें आपके एनवायरमेंट के हिसाब से R8 को कॉन्फ़िगर करने के बारे में जानकारी दी गई है.
AGP और R8 के वर्शन के व्यवहार में बदलाव
यहां दी गई टेबल में, Android Gradle प्लगिन (एजीपी) और R8 कंपाइलर के अलग-अलग वर्शन में जोड़ी गई मुख्य सुविधाओं के बारे में बताया गया है.
| AGP का वर्शन | नई सुविधाएं |
|---|---|
| 9.0 |
ऑप्टिमाइज़ किए गए संसाधन को छोटा करना: यह सुविधा डिफ़ॉल्ट रूप से चालू होती है. इसे android.r8.optimizedResourceShrinking का इस्तेमाल करके कंट्रोल किया जाता है. ऑप्टिमाइज़ किए गए संसाधन को छोटा करने की सुविधा, संसाधन को छोटा करने की सुविधा को कोड ऑप्टिमाइज़ेशन पाइपलाइन के साथ इंटिग्रेट करने में मदद करती है. इससे ऐप्लिकेशन छोटे और तेज़ी से काम करते हैं. कोड और संसाधन के रेफ़रंस, दोनों को एक साथ ऑप्टिमाइज़ करके, यह उन संसाधनों का पता लगाता है और उन्हें हटाता है जिन्हें सिर्फ़ इस्तेमाल न होने वाले कोड से रेफ़र किया गया है. यह, ऑप्टिमाइज़ेशन की पिछली अलग-अलग प्रोसेस की तुलना में एक अहम सुधार है.यह खास तौर पर उन ऐप्लिकेशन के लिए मददगार है जो अलग-अलग फ़ॉर्म फ़ैक्टर वर्टिकल में काफ़ी संसाधन और कोड शेयर करते हैं. इससे ऐप्लिकेशन के साइज़ में 50% से ज़्यादा की कमी आई है. इससे ऐप्लिकेशन का साइज़ कम हो जाता है. साथ ही, ऐप्लिकेशन कम समय में डाउनलोड और इंस्टॉल हो जाता है. इसके अलावा, ऐप्लिकेशन के खुलने में कम समय लगता है, रेंडरिंग बेहतर होती है, और एएनआर की समस्याएं कम होती हैं. इससे उपयोगकर्ताओं को बेहतर अनुभव मिलता है. लाइब्रेरी के नियम के हिसाब से फ़िल्टर करना: लाइब्रेरी के उपभोक्ता नियमों में, ग्लोबल विकल्पों (उदाहरण के लिए, -dontobfuscate) के लिए सहायता बंद कर दी गई है. साथ ही, ऐप्लिकेशन उन्हें फ़िल्टर कर देंगे. ज़्यादा जानकारी के लिए, ग्लोबल विकल्प जोड़ना लेख पढ़ें.Kotlin में शून्य की जांच: यह डिफ़ॉल्ट रूप से ऑप्टिमाइज़ होता है. इसे -processkotlinnullchecks का इस्तेमाल करके कंट्रोल किया जाता है. इस वर्शन में, बिल्ड की स्पीड में भी काफ़ी सुधार किए गए हैं. ज़्यादा जानकारी के लिए, ज़्यादा ऑप्टिमाइज़ेशन के लिए ग्लोबल विकल्प लेख पढ़ें.चुनिंदा पैकेज ऑप्टिमाइज़ करें: चुनिंदा पैकेज ऑप्टिमाइज़ करने के लिए, packageScope का इस्तेमाल किया जा सकता है. यह सुविधा, एक्सपेरिमेंट के तौर पर उपलब्ध है. ज़्यादा जानकारी के लिए, packageScope की मदद से चुने गए पैकेज ऑप्टिमाइज़ करना लेख पढ़ें.डिफ़ॉल्ट रूप से ऑप्टिमाइज़ किया गया: getDefaultProguardFile("proguard-android.txt") के लिए सहायता बंद कर दी गई है, क्योंकि इसमें -dontoptimize शामिल है. इसका इस्तेमाल नहीं करना चाहिए. इसके बजाय, "proguard-android-optimize.txt" का इस्तेमाल करें. अगर आपको अपने ऐप्लिकेशन में ऑप्टिमाइज़ेशन की सुविधा को पूरी तरह से बंद करना है, तो proguard फ़ाइल में फ़्लैग को मैन्युअल तरीके से जोड़ें.
|
| 8.12 |
संसाधन कम करना: शुरुआती सहायता जोड़ी गई (डिफ़ॉल्ट रूप से बंद है. isShrinkResources का इस्तेमाल करने की सुविधा चालू करें. संसाधन कम करने की सुविधा, R8 के साथ मिलकर काम करती है. इससे इस्तेमाल न होने वाले संसाधनों की पहचान करके उन्हें हटाने में मदद मिलती है.Logcat रीट्रेसिंग: Android Studio की Logcat विंडो में, अपने-आप रीट्रेसिंग होने की सुविधा उपलब्ध है. |
| 8.6 |
बेहतर रीट्रैसिंग: इसमें सभी minSdk लेवल के लिए, फ़ाइल नाम और लाइन नंबर रीट्रैसिंग की सुविधा डिफ़ॉल्ट रूप से शामिल होती है. इससे पहले, वर्शन 8.2 में minSdk 26+ की ज़रूरत होती थी.R8 को अपडेट करने से यह पक्का करने में मदद मिलती है कि अस्पष्ट किए गए बिल्ड से स्टैक ट्रेस आसानी से और साफ़ तौर पर पढ़े जा सकते हैं. इस वर्शन में, लाइन नंबर और सोर्स फ़ाइलों को मैप करने के तरीके को बेहतर बनाया गया है. इससे Android Studio Logcat जैसे टूल के लिए, क्रैश को ओरिजनल सोर्स कोड में अपने-आप ट्रेस करना आसान हो जाता है. |
| 8.0 |
डिफ़ॉल्ट रूप से फ़ुल मोड: R8 फ़ुल मोड, ऑप्टिमाइज़ेशन की बेहतर सुविधा देता है. यह सुविधा डिफ़ॉल्ट रूप से चालू रहती है. android.enableR8.fullMode=false का इस्तेमाल करके, इससे ऑप्ट आउट किया जा सकता है.
|
| 7.0 |
फ़ुल मोड उपलब्ध है: इसे android.enableR8.fullMode=true का इस्तेमाल करके, ऑप्ट-इन सुविधा के तौर पर लॉन्च किया गया था. फ़ुल मोड में, ज़्यादा बेहतर ऑप्टिमाइज़ेशन लागू किए जाते हैं. ऐसा इसलिए, क्योंकि यह मोड इस बारे में ज़्यादा सटीक अनुमान लगाता है कि आपका कोड, रिफ़्लेक्शन और अन्य डाइनैमिक सुविधाओं का इस्तेमाल कैसे करता है. इससे ऐप्लिकेशन का साइज़ कम हो जाता है और परफ़ॉर्मेंस बेहतर हो जाती है. हालांकि, ज़रूरी कोड को हटाने से रोकने के लिए, इसमें अतिरिक्त कीप नियम की ज़रूरत पड़ सकती है.
|