बेसलाइन प्रोफ़ाइलें, कोड के शामिल किए गए पाथ के लिए इंटरप्रेटेशन और जस्ट-इन-टाइम (जेआईटी) कंपाइलेशन के चरणों को छोड़कर, पहली बार लॉन्च होने पर कोड के एक्ज़ीक्यूशन की स्पीड को करीब 30% तक बेहतर बनाती हैं.
किसी ऐप्लिकेशन या लाइब्रेरी में बेसलाइन प्रोफ़ाइल शामिल करने पर, Android रनटाइम (एआरटी) Ahead-of-Time (AOT) कंपाइलेशन की मदद से, तय किए गए कोड पाथ को ऑप्टिमाइज़ कर सकता है. इससे, हर नए उपयोगकर्ता और ऐप्लिकेशन के हर अपडेट के लिए परफ़ॉर्मेंस बेहतर होती है. प्रोफ़ाइल गाइडेड ऑप्टिमाइज़ेशन (पीजीओ) की मदद से, ऐप्लिकेशन को पहली बार लॉन्च होने पर ही ऑप्टिमाइज़ किया जा सकता है. साथ ही, इससे इंटरैक्शन में होने वाली गड़बड़ियों को कम किया जा सकता है और रनटाइम की कुल परफ़ॉर्मेंस को बेहतर बनाया जा सकता है.
परफ़ॉर्मेंस में होने वाले इन सुधारों से, उपयोगकर्ता के बने रहने की दर, लेन-देन, और रेटिंग जैसी कारोबार की मेट्रिक सीधे तौर पर बेहतर होती हैं. परफ़ॉर्मेंस से कारोबार की मेट्रिक पर कैसे असर पड़ता है, इस बारे में ज़्यादा जानने के लिए, Josh, Lyft, TikTok, और Zomato की कहानियां पढ़ें.
बेसलाइन प्रोफ़ाइलों के फ़ायदे
बेसलाइन प्रोफ़ाइलें, उपयोगकर्ताओं के अहम इंटरैक्शन में कोड को पहले से कंपाइल करने की सुविधा देती हैं. जैसे, ऐप्लिकेशन लॉन्च करना, स्क्रीन के बीच नेविगेट करना या कॉन्टेंट को स्क्रोल करना. इससे, ऐप्लिकेशन पहली बार लॉन्च होने पर भी बेहतर तरीके से काम करते हैं. बेसलाइन प्रोफ़ाइलें, ऐप्लिकेशन की स्पीड और रिस्पॉन्सिवनेस को बढ़ाकर, हर दिन के सक्रिय उपयोगकर्ताओं की संख्या और औसत रिटर्न विज़िट रेट को बढ़ा सकती हैं.
बेसलाइन प्रोफ़ाइलें, उपयोगकर्ताओं के सामान्य इंटरैक्शन की जानकारी देकर, ऐप्लिकेशन के लॉन्च होने के बाद भी ऑप्टिमाइज़ेशन में मदद करती हैं. इससे, ऐप्लिकेशन पहली बार लॉन्च होने पर भी बेहतर तरीके से काम करते हैं. गाइडेड एओटी कंपाइलेशन, उपयोगकर्ता के डिवाइसों पर निर्भर नहीं करता. इसे मोबाइल डिवाइस के बजाय, डेवलपमेंट मशीन पर हर रिलीज़ के लिए एक बार किया जा सकता है. रिलीज़ के साथ a बेसलाइन प्रोफ़ाइल शामिल करने पर, ऐप्लिकेशन के ऑप्टिमाइज़ेशन, क्लाउड प्रोफ़ाइलों पर निर्भर रहने के मुकाबले ज़्यादा तेज़ी से उपलब्ध हो जाते हैं.
बेसलाइन प्रोफ़ाइल का इस्तेमाल न करने पर, ऐप्लिकेशन के सभी कोड को इंटरप्रेट करने के बाद, मेमोरी में जेआईटी-कंपाइल किया जाता है. इसके अलावा, डिवाइस के इस्तेमाल में न होने पर, बैकग्राउंड में odex फ़ाइल में लिखा जाता है. किसी ऐप्लिकेशन को इंस्टॉल या अपडेट करने के बाद, उपयोगकर्ता को पहली बार लॉन्च करने पर, ऑप्टिमाइज़ न किया गया अनुभव मिलता है. ऐसा तब तक होता है, जब तक कोड के नए पाथ ऑप्टिमाइज़ नहीं हो जाते.
ऑप्टिमाइज़ करने के बाद, कई ऐप्लिकेशन की परफ़ॉर्मेंस में करीब 30% का सुधार होता है.
स्टार्टअप प्रोफ़ाइलें
स्टार्टअप प्रोफ़ाइलें, बेसलाइन प्रोफ़ाइलों की तरह होती हैं. हालांकि, इनका इस्तेमाल कंपाइल करने के दौरान, डिवाइस पर ऑप्टिमाइज़ेशन के बजाय, स्टार्टअप के समय को कम करने के लिए, DEX लेआउट को ऑप्टिमाइज़ करने के लिए किया जाता है. स्टार्टअप प्रोफ़ाइलें, बेसलाइन प्रोफ़ाइलों से कैसे अलग होती हैं, इस बारे में ज़्यादा जानने के लिए, बेसलाइन प्रोफ़ाइलें और स्टार्टअप प्रोफ़ाइलें की तुलना करना लेख पढ़ें. DEX लेआउट ऑप्टिमाइज़ेशन के बारे में ज़्यादा जानने के लिए, DEX लेआउट ऑप्टिमाइज़ेशन और स्टार्टअप प्रोफ़ाइलें लेख पढ़ें.
शुरू करें
अपने मौजूदा ऐप्लिकेशन की परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए, बेसलाइन प्रोफ़ाइलें बनाना लेख पढ़ें.
प्रोफ़ाइल जनरेशन बनाम रिलीज़ बिल्ड
यह समझना ज़रूरी है कि बेसलाइन और स्टार्टअप प्रोफ़ाइल फ़ाइलें (उदाहरण के लिए, baseline-prof.txt और startup-prof.txt) जनरेट करते समय, बिल्ड कॉन्फ़िगरेशन में क्या अंतर होता है. साथ ही, यह भी समझना ज़रूरी है कि इन प्रोफ़ाइलों का इस्तेमाल करने वाला, रिलीज़ के लिए फ़ाइनल APK बनाते समय, बिल्ड कॉन्फ़िगरेशन में क्या अंतर होता है.
प्रोफ़ाइल फ़ाइलें जनरेट करते समय (उदाहरण के लिए, benchmark):
यह पक्का करने के लिए कि जनरेट किए गए प्रोफ़ाइल के नियम, आपके कोड के तरीके के सिग्नेचर से सटीक तौर पर मेल खाते हों, आपको प्रोफ़ाइल जनरेशन के लिए इस्तेमाल किए गए बिल्ड वैरिएंट के लिए, अस्पष्ट करने और ऑप्टिमाइज़ेशन (R8) की सुविधा बंद करनी होगी. यह वैरिएंट, रिलीज़ बिल्ड वैरिएंट से अलग होना चाहिए. रिलीज़ बिल्ड वैरिएंट में, अस्पष्ट करने और ऑप्टिमाइज़ेशन की सुविधा चालू होती है. इसके लिए, प्रोफ़ाइल जनरेशन बिल्ड वैरिएंट के लिए, isMinifyEnabled = false सेट करें. अगर बेसलाइन प्रोफ़ाइल Gradle प्लगिन का इस्तेमाल नहीं किया जा रहा है, तो आपको यह भी पक्का करना चाहिए कि -dontobfuscate और -dontoptimize लागू हों. बेसलाइन प्रोफ़ाइल Gradle प्लगिन, आपके लिए इस कॉन्फ़िगरेशन को अपने-आप मैनेज करता है.
रिलीज़ के लिए फ़ाइनल APK बनाते समय:
रिलीज़ बिल्ड में, अस्पष्ट करने, छोटा करने, और ऑप्टिमाइज़ेशन की सुविधा का फ़ायदा पाने के लिए, हमेशा isMinifyEnabled = true होना चाहिए. R8, अस्पष्ट न की गई प्रोफ़ाइल फ़ाइलों के नियमों को अपने-आप फिर से लिखता है, ताकि वे रिलीज़ APK में अस्पष्ट और ऑप्टिमाइज़ किए गए कोड से मेल खा सकें. DEX लेआउट ऑप्टिमाइज़ेशन (स्टार्टअप प्रोफ़ाइलों की मदद से) को असरदार बनाने के लिए, रिलीज़ ऐप्लिकेशन को अस्पष्ट किया जाना चाहिए. साथ ही, इसमें R8 का इस्तेमाल किया जाना चाहिए. इसमें सभी ऑप्टिमाइज़ेशन चालू होने चाहिए.
सुझाए गए कम से कम स्टेबल वर्शन
डिपेंडेंसी चेन, रिलीज़ के स्टेबल और डेवलपमेंट वर्शन उपलब्ध कराती है. बेसलाइन प्रोफ़ाइल जनरेट और इंस्टॉल करने के लिए, Android Gradle प्लगिन, Macrobenchmark लाइब्रेरी, और Profile Installer के ये या इससे नए वर्शन इस्तेमाल करें. इन डिपेंडेंसी की ज़रूरत अलग-अलग समय पर पड़ती है. ये सभी, टूलचेन के तौर पर मिलकर काम करती हैं, ताकि बेसलाइन प्रोफ़ाइल को ऑप्टिमाइज़ किया जा सके.
- Android Gradle प्लगिन:
com.android.tools.build:8.0.0 - Macrobenchmark लाइब्रेरी:
androidx.benchmark:benchmark-macro-junit4:1.4.1 - Profile Installer:
androidx.profileinstaller:profileinstaller:1.4.1
हमारा सुझाव है कि बेसलाइन प्रोफ़ाइलें बनाने और मैनेज करने के लिए, एजीपी के सबसे नए वर्शन का इस्तेमाल करें. यहां एजीपी के अलग-अलग वर्शन के साथ मिलने वाली मुख्य सुविधाएं दी गई हैं:
| एजीपी का वर्शन | सुविधाएं |
|---|---|
| 9.1 |
सोर्स सेट डायरेक्ट्री के पूरे फ़ॉर्मैट के लिए सहायता (लाइब्रेरी मॉड्यूल): वैरिएंट के हिसाब से डायरेक्ट्री के अलावा, लाइब्रेरी मॉड्यूल और ऐप्लिकेशन मॉड्यूल के लिए, एक से ज़्यादा बेसलाइन प्रोफ़ाइल सोर्स फ़ाइलें, अपनी पसंद के नाम से भी तय की जा सकती हैं. जैसे, src/free/generated/baselineProfiles/baseline-prof1.txt.
|
| 8.4 | Gradle रैपर कमांड लाइन टूल या Android Studio का इस्तेमाल करके, डीबग न किए जा सकने वाले बिल्ड के लोकल ऐप्लिकेशन इंस्टॉलेशन, बेसलाइन प्रोफ़ाइलें इंस्टॉल करते हैं. इसलिए, रिलीज़ के लिए लोकल बिल्ड की परफ़ॉर्मेंस, प्रोडक्शन से ज़्यादा मिलती-जुलती है. इस अपडेट से, बेसलाइन प्रोफ़ाइलों की प्रोडक्शन परफ़ॉर्मेंस पर कोई असर नहीं पड़ता. |
| 8.3 |
|
| 8.2 |
|
| 8.0 | सुझाया गया कम से कम वर्शन: बेसलाइन
प्रोफ़ाइल Gradle प्लगिन का इस्तेमाल करके, Gradle के एक टास्क से बेसलाइन प्रोफ़ाइलें जनरेट करें.
|
| 7.4 |
सहायता देने वाला कम से कम वर्शन: ऐप्लिकेशन, लाइब्रेरी से बेसलाइन प्रोफ़ाइलें इस्तेमाल कर सकते हैं. साथ ही, src/main/baseline-prof.txt फ़ाइल में अपनी बेसलाइन प्रोफ़ाइल उपलब्ध करा सकते हैं.
|
वैरिएंट के हिसाब से प्रोफ़ाइल सोर्स सेटिंग
ऐप्लिकेशन के लिए Android Gradle प्लगिन (एजीपी) के वर्शन 8.0 और लाइब्रेरी के लिए एजीपी के वर्शन 8.3 का इस्तेमाल करके, बेसलाइन प्रोफ़ाइल के नियम, सोर्स सेट डायरेक्ट्री में रखे जा सकते हैं. इससे, एक तय पाथ (उदाहरण के लिए, src/main/baseline-prof.txt) की पाबंदी से बचा जा सकता है और एक से ज़्यादा फ़ाइलें इस्तेमाल की जा सकती हैं.
इससे, वैरिएंट के लिए बेहतर सहायता मिलती है. साथ ही, अलग-अलग बिल्ड फ़्लेवर और टाइप के हिसाब से, अलग-अलग बेसलाइन प्रोफ़ाइलें तय की जा सकती हैं. उदाहरण के लिए, src/variant/baselineProfiles/ जैसी डायरेक्ट्री का इस्तेमाल किया जा सकता है. इससे यह पक्का किया जा सकता है कि हर यूनीक ऐप्लिकेशन या लाइब्रेरी बाइनरी के लिए, परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के नियम सटीक तौर पर लागू हों.
प्रोफ़ाइल जनरेशन का उदाहरण
यहां एक उदाहरण क्लास दी गई है. इसकी मदद से, ऐप्लिकेशन के लॉन्च होने के साथ-साथ, नेविगेशन और स्क्रोल के कई इवेंट के लिए बेसलाइन प्रोफ़ाइल बनाई जा सकती है. इसके लिए, सुझाए गए Macrobenchmark लाइब्रेरी का इस्तेमाल किया गया है:
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun appStartupAndUserJourneys() {
baselineProfileRule.collect(packageName = PACKAGE_NAME) {
uiAutomator {
// App startup journey.
startApp(PACKAGE_NAME)
// Find and click elements using the new DSL
onElement { textAsString() == "COMPOSE LAZYLIST" }.click()
onElement { viewIdResourceName == "myLazyColumn" }.also {
it.fling(Direction.DOWN)
it.fling(Direction.UP)
}
pressBack()
}
}
}
}
उपयोगकर्ता के सफ़र को ऑटोमेट करने के लिए, यूज़र इंटरफ़ेस (यूआई) ऑटोमेटर लाइब्रेरी का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, यूज़र इंटरफ़ेस (यूआई) ऑटोमेटर की मदद से ऑटोमेटेड टेस्ट लिखना लेख पढ़ें.
GitHub पर, परफ़ॉर्मेंस के हमारे सैंपल में, इस कोड को पूरे कॉन्टेक्स्ट और ज़्यादा जानकारी के साथ देखा जा सकता है.
अपील वाले वीडियो में क्या शामिल करना है
किसी ऐप्लिकेशन में बेसलाइन प्रोफ़ाइलें इस्तेमाल करते समय, ऐप्लिकेशन के लॉन्च होने का कोड और उपयोगकर्ताओं के सामान्य इंटरैक्शन शामिल किए जा सकते हैं. जैसे, स्क्रीन के बीच नेविगेट करना या स्क्रोल करना. इसके अलावा, रजिस्ट्रेशन, लॉगिन या पेमेंट जैसे पूरे फ़्लो इकट्ठा किए जा सकते हैं. उपयोगकर्ता के ऐसे सफ़र जिन्हें अहम माना जाता है, उनके रनटाइम की परफ़ॉर्मेंस को बेहतर बनाकर, बेसलाइन प्रोफ़ाइलों से फ़ायदा पाया जा सकता है.
अगर परफ़ॉर्मेंस को बेहतर बनाने के लिए, अलग-अलग तरीकों के साथ एक्सपेरिमेंट किया जा रहा है, तो अपने एक्सपेरिमेंट के दोनों ग्रुप के लिए बेसलाइन प्रोफ़ाइलें शामिल करें. ऐसा करने से, यह पक्का किया जा सकता है कि आपके सभी उपयोगकर्ता, कंपाइल किए गए कोड को लगातार चला रहे हों. इससे, नतीजों को समझना आसान हो जाता है.
लाइब्रेरी, अपनी बेसलाइन प्रोफ़ाइलें उपलब्ध करा सकती हैं और ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए, उन्हें रिलीज़ के साथ शिप कर सकती हैं. उदाहरण के लिए, Jetpack Compose की परफ़ॉर्मेंस में, बेसलाइन प्रोफ़ाइल का इस्तेमाल करना सेक्शन देखें
बेसलाइन प्रोफ़ाइलें कैसे काम करती हैं
अपने ऐप्लिकेशन या लाइब्रेरी को डेवलप करते समय, बेसलाइन प्रोफ़ाइलें तय करें. इससे, उपयोगकर्ताओं के सामान्य इंटरैक्शन को कवर किया जा सकता है. इनमें रेंडरिंग का समय या इंतज़ार का समय अहम होता है. ये इस तरह काम करती हैं:
आपके ऐप्लिकेशन के लिए, लोगों के लिए समझने में आसान प्रोफ़ाइल के नियम जनरेट किए जाते हैं और उन्हें ऐप्लिकेशन में बाइनरी फ़ॉर्म में कंपाइल किया जाता है. इन्हें
assets/dexopt/baseline.profमें देखा जा सकता है. इसके बाद, Android ऐप्लिकेशन बंडल (एएबी) को Google Play पर हमेशा की तरह अपलोड किया जा सकता है.Google Play, प्रोफ़ाइल को प्रोसेस करता है और इसे सीधे उपयोगकर्ताओं को APK के साथ शिप करता है. इंस्टॉल करने के दौरान, एआरटी, प्रोफ़ाइल में मौजूद तरीकों का एओटी कंपाइलेशन करता है. इससे, ये तरीके ज़्यादा तेज़ी से एक्ज़ीक्यूट होते हैं. अगर प्रोफ़ाइल में, ऐप्लिकेशन लॉन्च करने या फ़्रेम रेंडर करने के दौरान इस्तेमाल किए गए तरीके शामिल हैं, तो उपयोगकर्ता को ऐप्लिकेशन लॉन्च होने में कम समय लग सकता है और इंटरैक्शन में होने वाली गड़बड़ियां कम हो सकती हैं.
यह फ़्लो, समय के साथ ऐप्लिकेशन के असल इस्तेमाल के आधार पर, परफ़ॉर्मेंस को बेहतर बनाने के लिए, क्लाउड प्रोफ़ाइलों के एग्रीगेशन के साथ मिलकर काम करता है.
बेसलाइन प्रोफ़ाइलें और स्टार्टअप प्रोफ़ाइलें की तुलना करना
प्रोफ़ाइल फ़ाइलें तय करने और बनाने के लिए, बेसलाइन प्रोफ़ाइल Gradle प्लगिन का इस्तेमाल किया जाता है.
यह प्लगिन, बिल्ड प्रोसेस में जुड़ जाता है. साथ ही, एजीपी, लोगों के लिए समझने में आसान प्रोफ़ाइल के इन नियमों को बाइनरी फ़ॉर्मैट में कंपाइल करता है. इसे APK या एएबी में baseline.prof के तौर पर पैकेज किया जाता है. एआरटी, डिवाइस पर कंपाइलेशन के लिए इसका असरदार तरीके से इस्तेमाल कर सकता है. हालांकि, यह 1.5 एमबी से कम होना चाहिए.
तैयार की गई इन प्रोफ़ाइल फ़ाइलों को आम तौर पर, startup-prof.txt और baseline-prof.txt नाम दिया जाता है. इनका कॉन्टेंट कभी-कभी एक जैसा दिख सकता है. खास तौर पर, अगर आपका मुख्य फ़ोकस स्टार्टअप पर है. हालांकि, इनके मकसद अलग-अलग होते हैं और ये अलग-अलग चरणों में परफ़ॉर्मेंस को प्रभावित करती हैं:
बेसलाइन प्रोफ़ाइल
बेसलाइन प्रोफ़ाइल फ़ाइल में, नियमों का एक पूरा सेट होता है. इसका इस्तेमाल, Android रनटाइम (एआरटी), कोड के अक्सर इस्तेमाल किए जाने वाले पाथ को पहले से कंपाइल करने के लिए करता है. इससे, ऐप्लिकेशन की परफ़ॉर्मेंस, सिर्फ़ स्टार्टअप के अलावा भी बेहतर होती है.
बेसलाइन प्रोफ़ाइल फ़ाइल आम तौर पर, आपकी स्टार्टअप प्रोफ़ाइल में मौजूद नियमों का सुपरसेट होती है. इस फ़ाइल में, ऐप्लिकेशन के स्टार्टअप को ऑप्टिमाइज़ करने के लिए ज़रूरी सभी नियम शामिल होते हैं. इन्हें baselineProfile Gradle टास्क की मदद से जनरेट किया जाता है. इसके अलावा, इसमें उपयोगकर्ताओं के अहम सफ़र के लिए अतिरिक्त प्रोफ़ाइलें भी शामिल होती हैं. उदाहरण के लिए, स्क्रोल करना और अलग-अलग स्क्रीन पर नेविगेट करना.
स्टार्टअप के अलावा अन्य नियमों को, includeInStartupProfile कॉन्फ़िगरेशन फ़ील्ड की वैल्यू के बावजूद जनरेट किया जाता है.
स्टार्टअप प्रोफ़ाइल
स्टार्टअप प्रोफ़ाइल फ़ाइल में, खास तौर पर आपके ऐप्लिकेशन के स्टार्टअप पाथ के लिए ऑप्टिमाइज़ किए गए नियम शामिल होते हैं. कंपाइल करने के दौरान, D8, Java बाइटकोड को DEX फ़ॉर्मैट में बदलता है.
इसके बाद, R8 इस फ़ाइल का इस्तेमाल करके, आपकी DEX फ़ाइलों के लेआउट को प्रभावित करता है. इससे यह पक्का किया जाता है कि स्टार्टअप का अहम कोड, तेज़ी से एक्ज़ीक्यूट होने के लिए, प्राइमरी DEX फ़ाइल में रखा जाए. आम तौर पर, includeInStartupProfile को सिर्फ़ उन टेस्ट के लिए true पर सेट किया जाना चाहिए जो ऐप्लिकेशन के शुरुआती डिसप्ले के लिए ज़रूरी हैं. ज़्यादा जानकारी के लिए, स्टार्टअप प्रोफ़ाइलें बनाना लेख पढ़ें.
क्लाउड प्रोफ़ाइलें
क्लाउड प्रोफ़ाइलें, पीजीओ का एक अतिरिक्त फ़ॉर्मैट उपलब्ध कराती हैं. इन्हें Google Play Store इकट्ठा करता है और इंस्टॉल के समय कंपाइलेशन के लिए डिस्ट्रिब्यूट करता है. ये बेसलाइन प्रोफ़ाइलों के साथ काम करती हैं.
क्लाउड प्रोफ़ाइलें, ऐप्लिकेशन के साथ उपयोगकर्ताओं के असल इंटरैक्शन के आधार पर काम करती हैं. हालांकि, अपडेट के बाद इन्हें डिस्ट्रिब्यूट होने में कुछ घंटे से लेकर कुछ दिन लग सकते हैं. इससे, इनकी उपलब्धता सीमित हो जाती है. जब तक प्रोफ़ाइलें पूरी तरह से डिस्ट्रिब्यूट नहीं हो जातीं, तब तक नए या अपडेट किए गए ऐप्लिकेशन के उपयोगकर्ताओं को ऑप्टिमाइज़ न किया गया अनुभव मिलता है. इसके अलावा, क्लाउड प्रोफ़ाइलें सिर्फ़ Android 9 (एपीआई लेवल 28) या इसके बाद के वर्शन वाले Android डिवाइसों के साथ काम करती हैं. साथ ही, ये सिर्फ़ उन ऐप्लिकेशन के लिए बेहतर तरीके से काम करती हैं जिनके पास उपयोगकर्ताओं का बड़ा ग्रुप होता है.
Android के अलग-अलग वर्शन पर कंपाइलेशन का तरीका
Android प्लैटफ़ॉर्म के अलग-अलग वर्शन, ऐप्लिकेशन को कंपाइल करने के अलग-अलग तरीके इस्तेमाल करते हैं. हर तरीके में, परफ़ॉर्मेंस से जुड़ा कोई न कोई फ़ायदा या नुकसान होता है. बेसलाइन प्रोफ़ाइलें, कंपाइल करने के पिछले तरीकों से बेहतर हैं. ये सभी इंस्टॉलेशन के लिए एक प्रोफ़ाइल उपलब्ध कराती हैं.
| Android वर्शन | कंपाइल करने का तरीका | ऑप्टिमाइज़ेशन का तरीका |
|---|---|---|
| 5 से 6 (एपीआई लेवल 21 से 23) | पूरा एओटी | पूरे ऐप्लिकेशन को इंस्टॉल करने के दौरान ऑप्टिमाइज़ किया जाता है. इससे, ऐप्लिकेशन का इस्तेमाल करने के लिए ज़्यादा इंतज़ार करना पड़ता है. साथ ही, रैम और डिस्क स्पेस का इस्तेमाल बढ़ जाता है. इसके अलावा, डिस्क से कोड लोड करने में ज़्यादा समय लगता है. इससे, कोल्ड स्टार्टअप का समय बढ़ सकता है. |
| 7 से 8.1 (एपीआई लेवल 24 से 27) | आंशिक एओटी (बेसलाइन प्रोफ़ाइल) | जब ऐप्लिकेशन मॉड्यूल इस डिपेंडेंसी को तय करता है, तो androidx.profileinstaller की मदद से, पहली बार लॉन्च होने पर बेसलाइन प्रोफ़ाइलें इंस्टॉल की जाती हैं. एआरटी, ऐप्लिकेशन के इस्तेमाल के दौरान, प्रोफ़ाइल के अतिरिक्त नियम जोड़कर इसे और बेहतर बना सकता है. साथ ही, डिवाइस के इस्तेमाल में न होने पर, उन्हें कंपाइल कर सकता है. इससे, डिस्क स्पेस और डिस्क से कोड लोड करने में लगने वाले समय को ऑप्टिमाइज़ किया जाता है. इसलिए, ऐप्लिकेशन के लिए इंतज़ार का समय कम हो जाता है. |
| 9 (एपीआई लेवल 28) और इसके बाद के वर्शन | आंशिक एओटी (बेसलाइन + क्लाउड प्रोफ़ाइल) | Play, ऐप्लिकेशन इंस्टॉल करने के दौरान, APK और क्लाउड प्रोफ़ाइलों को ऑप्टिमाइज़ करने के लिए, बेसलाइन प्रोफ़ाइलों का इस्तेमाल करता है. हालांकि, यह तभी होता है, जब क्लाउड प्रोफ़ाइलें उपलब्ध हों. इंस्टॉल करने के बाद, एआरटी प्रोफ़ाइलें Play पर अपलोड की जाती हैं, इकट्ठा की जाती हैं, और फिर ऐप्लिकेशन इंस्टॉल या अपडेट करने पर, अन्य उपयोगकर्ताओं को क्लाउड प्रोफ़ाइलों के तौर पर उपलब्ध कराई जाती हैं. |
पहले से मालूम समस्याएं
यहां संभावित समस्याएं और उनके हल दिए गए हैं. साथ ही, उन समस्याओं के बारे में भी बताया गया है जिनके लिए, कामचलाऊ समाधानों पर काम किया जा रहा है:
कुछ डिवाइसों पर, अनुमति की सेटिंग की वजह से, बेसलाइन प्रोफ़ाइल जनरेट नहीं हो पाती. इनमें OnePlus डिवाइस भी शामिल हैं. इससे बचने के लिए, डेवलपर के लिए सेटिंग और टूल में जाकर, अनुमति की निगरानी बंद करें विकल्प बंद करें.
Firebase टेस्ट लैब डिवाइसों पर, बेसलाइन प्रोफ़ाइल जनरेट करने की सुविधा उपलब्ध नहीं है. इनमें, Gradle से मैनेज किए जाने वाले टेस्ट लैब डिवाइस भी शामिल हैं (समस्या #285187547).
लाइब्रेरी के लिए, बेसलाइन प्रोफ़ाइलें जनरेट करने के लिए, कम से कम बेसलाइन प्रोफ़ाइल Gradle प्लगिन 1.2.3 या एजीपी 8.3 का इस्तेमाल करें (समस्या #313992099).
अगर
./gradlew app:generateBaselineProfileकमांड से बेसलाइन प्रोफ़ाइलें जनरेट की जाती हैं, तो टेस्ट मॉड्यूल में बेंचमार्क भी चलते हैं. हालांकि, नतीजों को खारिज कर दिया जाता है. अगर ऐसा होता है, तो-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfileके साथ कमांड चलाकर, सिर्फ़ बेसलाइन प्रोफ़ाइलें जनरेट की जा सकती हैं. इस समस्या को एजीपी 8.2 में ठीक कर लिया गया है.सभी बिल्ड टाइप के लिए, बेसलाइन प्रोफ़ाइलें जनरेट करने का कमांड—
./gradlew app:generateBaselineProfile—सिर्फ़ रिलीज़ बिल्ड टाइप के लिए बेसलाइन प्रोफ़ाइलें जनरेट करता है. इस समस्या को एजीपी 8.1 में ठीक कर लिया गया है.हो सकता है कि Google Play Store के अलावा, ऐप्लिकेशन डिस्ट्रिब्यूशन के अन्य चैनलों पर, इंस्टॉल करने के दौरान बेसलाइन प्रोफ़ाइलें इस्तेमाल करने की सुविधा उपलब्ध न हो. इन चैनलों से इंस्टॉल किए गए ऐप्लिकेशन के उपयोगकर्ताओं को, बैकग्राउंड में dexopt चलने तक, इस सुविधा का फ़ायदा नहीं मिलता. dexopt आम तौर पर, रात भर में चलता है.
Play Store पर, संगठन में काम करने वालों के साथ ऐप्लिकेशन शेयर करने की सुविधा में, बेसलाइन प्रोफ़ाइलें इस्तेमाल करने की सुविधा उपलब्ध नहीं है. हालांकि, इंटरनल टेस्टिंग ट्रैक में यह सुविधा उपलब्ध है.
कुछ डिवाइसों पर, बैटरी ऑप्टिमाइज़ेशन की सुविधा, प्रोफ़ाइल इंस्टॉल करने में रुकावट डाल सकती है. जैसे, Huawei डिवाइस. यह पक्का करने के लिए कि आपकी प्रोफ़ाइलें सही तरीके से इंस्टॉल हों, बेंचमार्क डिवाइसों में बैटरी ऑप्टिमाइज़ेशन की सुविधा बंद करें.
अन्य संसाधन
- DEX लेआउट ऑप्टिमाइज़ेशन और स्टार्टअप प्रोफ़ाइलें
- बेसलाइन प्रोफ़ाइलों की मदद से ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाएं
आपके लिए सुझाव
- ध्यान दें: JavaScript बंद होने पर, लिंक का टेक्स्ट दिखता है
- बेसलाइन प्रोफ़ाइलें बनाना {:#creating-profile-rules}
- Macrobenchmark के बिना, बेसलाइन प्रोफ़ाइलें बनाना और उन्हें मेज़र करना
- DEX लेआउट ऑप्टिमाइज़ेशन और स्टार्टअप प्रोफ़ाइलें