बेसलाइन प्रोफ़ाइल की खास जानकारी

बेसलाइन प्रोफ़ाइलें, कोड एक्ज़ीक्यूशन की स्पीड को करीब 30% तक बढ़ा देती हैं. ऐसा पहली बार लॉन्च करने के बाद होता है. ऐसा इसलिए होता है, क्योंकि ये शामिल किए गए कोड पाथ के लिए, इंटरप्रेटेशन और जस्ट-इन-टाइम (JIT) कंपाइलेशन के चरणों को छोड़ देती हैं.

किसी ऐप्लिकेशन या लाइब्रेरी में बेसलाइन प्रोफ़ाइल को शामिल करके, Android रनटाइम (एआरटी), Ahead-of-Time (AOT) कंपाइलेशन की मदद से, तय किए गए कोड पाथ को ऑप्टिमाइज़ कर सकता है. इससे, हर नए उपयोगकर्ता और हर ऐप्लिकेशन के अपडेट के लिए परफ़ॉर्मेंस बेहतर होती है. प्रोफ़ाइल गाइडेड ऑप्टिमाइज़ेशन (पीजीओ) की इस सुविधा की मदद से, ऐप्लिकेशन को पहली बार लॉन्च करने वाले उपयोगकर्ताओं के लिए, स्टार्टअप को ऑप्टिमाइज़ किया जा सकता है. साथ ही, इंटरैक्शन जैंक को कम किया जा सकता है और रनटाइम की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है.

परफ़ॉर्मेंस में हुए इन सुधारों से, कारोबार की मेट्रिक में सीधे तौर पर सुधार होता है. जैसे, उपयोगकर्ता को अपने साथ जोड़े रखना, लेन-देन, और रेटिंग. Josh, Lyft, TikTok, और Zomato की कहानियों में, इस बारे में ज़्यादा जानें कि परफ़ॉर्मेंस से कारोबार की मेट्रिक पर क्या असर पड़ता है.

बेसलाइन प्रोफ़ाइलों के फ़ायदे

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

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

बेसलाइन प्रोफ़ाइल का इस्तेमाल न करने पर, ऐप्लिकेशन के सभी कोड को इंटरप्रेट करने के बाद, मेमोरी में JIT-कंपाइल किया जाता है. इसके अलावा, जब डिवाइस का इस्तेमाल नहीं किया जा रहा होता है, तब उसे बैकग्राउंड में odex फ़ाइल में लिखा जाता है. किसी ऐप्लिकेशन को इंस्टॉल या अपडेट करने के बाद, उपयोगकर्ता को पहली बार ऐप्लिकेशन चलाने पर खराब अनुभव मिलता है. ऐसा तब तक होता है, जब तक नए कोड पाथ ऑप्टिमाइज़ नहीं हो जाते. ऑप्टिमाइज़ करने के बाद, कई ऐप्लिकेशन की परफ़ॉर्मेंस में करीब 30% की बढ़ोतरी होती है.

स्टार्टअप प्रोफ़ाइलें

स्टार्टअप प्रोफ़ाइलें, बेसलाइन प्रोफ़ाइलों की तरह होती हैं. हालांकि, इनका इस्तेमाल कंपाइल टाइम पर किया जाता है. ऐसा इसलिए, ताकि उपयोगकर्ता के डिवाइस पर ऑप्टिमाइज़ करने के बजाय, स्टार्टअप के समय को कम करने के लिए डीईएक्स लेआउट को ऑप्टिमाइज़ किया जा सके. स्टार्टअप प्रोफ़ाइल, बेसलाइन प्रोफ़ाइल से कैसे अलग होती है, इस बारे में ज़्यादा जानने के लिए बेसलाइन प्रोफ़ाइल और स्टार्टअप प्रोफ़ाइल की तुलना करना लेख पढ़ें. 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
  • प्रोफ़ाइल इंस्टॉलर: androidx.profileinstaller:profileinstaller:1.4.1

हमारा सुझाव है कि बेसलाइन प्रोफ़ाइलें बनाने और मैनेज करने के लिए, AGP के नए वर्शन का इस्तेमाल करें. यहां एजीपी के अलग-अलग वर्शन में मिलने वाली मुख्य सुविधाएं दी गई हैं:

AGP का वर्शन सुविधाएं
9.1 पूरे सोर्स सेट डायरेक्ट्री के साथ काम करता है (लाइब्रेरी मॉड्यूल): वैरिएंट के हिसाब से डायरेक्ट्री के अलावा, किसी भी नाम वाली एक से ज़्यादा बेसलाइन प्रोफ़ाइल सोर्स फ़ाइलें भी डिक्लेयर की जा सकती हैं. जैसे, src/free/generated/baselineProfiles/baseline-prof1.txt. ऐसा लाइब्रेरी मॉड्यूल के साथ-साथ ऐप्लिकेशन मॉड्यूल के लिए भी किया जा सकता है.
8.4 Gradle रैपर कमांड लाइन टूल या Android Studio का इस्तेमाल करके, डीबग नहीं की जा सकने वाली बिल्ड के ऐप्लिकेशन स्थानीय तौर पर इंस्टॉल किए जाते हैं. इसलिए, आपकी लोकल रिलीज़ के लिए तैयार बिल्ड की परफ़ॉर्मेंस, प्रोडक्शन बिल्ड की परफ़ॉर्मेंस से ज़्यादा मिलती-जुलती है. इस अपडेट से, बेसलाइन प्रोफ़ाइलों की प्रोडक्शन परफ़ॉर्मेंस पर कोई असर नहीं पड़ता.
8.3
  • सोर्स सेट डायरेक्ट्री के लिए आंशिक तौर पर सहायता (लाइब्रेरी मॉड्यूल): लाइब्रेरी मॉड्यूल के लिए, वैरिएंट के हिसाब से बेसलाइन प्रोफ़ाइल फ़ाइलें, जैसे कि src/free/generated/baselineProfiles/baseline-prof.txt, डिक्लेयर करें.
  • बेसलाइन प्रोफ़ाइल में डीसुगर की गई क्लास शामिल होती हैं.
8.2
  • R8 की मदद से नियमों को फिर से लिखना: D8 और R8, इंसानों के पढ़ने लायक बेसलाइन और स्टार्टअप प्रोफ़ाइल के नियमों को बदल सकते हैं. इससे, ऐप्लिकेशन की परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए ज़रूरी सभी नियमों को पूरी तरह से कैप्चर किया जा सकता है. इससे आपको अनमिनिफ़ाइड बिल्ड से प्रोफ़ाइलें जनरेट करने और उन्हें मिनिफ़ाइड रिलीज़ के लिए तैयार बिल्ड पर लागू करने की सुविधा मिलती है. यह ~30% तक तरीकों के लिए बेसलाइन प्रोफ़ाइल कवरेज को बढ़ाता है और ऐप्लिकेशन की परफ़ॉर्मेंस को ~15% तक बढ़ाता है.
  • स्टार्टअप प्रोफ़ाइलें: इस तरह की बेसलाइन प्रोफ़ाइल जनरेट करें, ताकि DEX में कोड के लेआउट के बारे में जानकारी दी जा सके. इससे स्टार्टअप की परफ़ॉर्मेंस में ~15% की बढ़ोतरी होती है. बड़े ऐप्लिकेशन के लिए, यह बढ़ोतरी काफ़ी ज़्यादा होती है.
8.0 सुझाया गया कम से कम वर्शन: बेसलाइन प्रोफ़ाइल Gradle प्लगिन का इस्तेमाल करके, एक ही Gradle टास्क से बेसलाइन प्रोफ़ाइलें जनरेट करें.
  • पूरे सोर्स सेट डायरेक्ट्री का इस्तेमाल किया जा सकता है (ऐप्लिकेशन मॉड्यूल): एक से ज़्यादा बेसलाइन प्रोफ़ाइल सोर्स फ़ाइलें डिक्लेयर करें. साथ ही, वैरिएंट के हिसाब से डायरेक्ट्री का इस्तेमाल करें. जैसे, src/free/generated/baselineProfiles/baseline-prof1.txt.
7.4 कम से कम ज़रूरी वर्शन: ऐप्लिकेशन, लाइब्रेरी से बेसलाइन प्रोफ़ाइलें इस्तेमाल कर सकते हैं. साथ ही, src/main/baseline-prof.txt फ़ाइल में अपनी बेसलाइन प्रोफ़ाइल दे सकते हैं.
  • ऐप्लिकेशन बंडल से APK बनाते समय, बेसलाइन प्रोफ़ाइलें सही तरीके से पैकेज की जाती हैं (समस्या #230361284).
  • जिन ऐप्लिकेशन में एक से ज़्यादा .dex फ़ाइलें होती हैं उनके लिए, बेसलाइन प्रोफ़ाइलें प्राइमरी .dex फ़ाइल के लिए सही तरीके से पैकेज की जाती हैं.
  • D8 और R8 के साथ काम करता है. साथ ही, ऐसी बिल्ड से स्टार्टअप प्रोफ़ाइलें जनरेट करता है जहां isMinifyEnabled को false पर सेट किया गया हो.

वैरिएंट के हिसाब से प्रोफ़ाइल सोर्स की सेटिंग

ऐप्लिकेशन के लिए Android Gradle Plugin (AGP) 8.0 और लाइब्रेरी के लिए AGP 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()
            }
        }
    }
}

उपयोगकर्ता के सफ़र को अपने-आप पूरा करने के लिए, UI Automator लाइब्रेरी का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, UI Automator की मदद से ऑटोमेटेड टेस्ट लिखना लेख पढ़ें.

इस कोड को पूरे कॉन्टेक्स्ट और ज़्यादा जानकारी के साथ, GitHub पर मौजूद परफ़ॉर्मेंस के सैंपल में देखा जा सकता है.

अपील वाले वीडियो में क्या शामिल करना है

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

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

लाइब्रेरी, अपनी बेसलाइन प्रोफ़ाइलें उपलब्ध करा सकती हैं. साथ ही, ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए, उन्हें रिलीज़ के साथ शिप कर सकती हैं. उदाहरण के लिए, Jetpack Compose की परफ़ॉर्मेंस में, बेसलाइन प्रोफ़ाइल का इस्तेमाल करें सेक्शन देखें.

बेसलाइन प्रोफ़ाइलें कैसे काम करती हैं

अपने ऐप्लिकेशन या लाइब्रेरी को डेवलप करते समय, बेसलाइन प्रोफ़ाइलें तय करें. इससे, उपयोगकर्ता के सामान्य इंटरैक्शन को कवर किया जा सकेगा. इन इंटरैक्शन में, रेंडरिंग का समय या लेटेन्सी अहम होती है. ये इस तरह काम करते हैं:

  1. आपके ऐप्लिकेशन के लिए, आसानी से समझ में आने वाले फ़ॉर्मैट में प्रोफ़ाइल के नियम जनरेट किए जाते हैं. साथ ही, उन्हें ऐप्लिकेशन में बाइनरी फ़ॉर्म में कंपाइल किया जाता है. इन्हें assets/dexopt/baseline.prof में देखा जा सकता है. इसके बाद, Android ऐप्लिकेशन बंडल (AAB) को Google Play पर सामान्य तरीके से अपलोड किया जा सकता है.

  2. Google Play, प्रोफ़ाइल को प्रोसेस करता है और उसे सीधे तौर पर उपयोगकर्ताओं को APK के साथ भेजता है. इंस्टॉल करने के दौरान, ART प्रोफ़ाइल में मौजूद तरीकों का एओटी कंपाइलेशन करता है. इससे उन तरीकों को तेज़ी से लागू किया जा सकता है. अगर प्रोफ़ाइल में ऐप्लिकेशन लॉन्च करने या फ़्रेम रेंडर करने के दौरान इस्तेमाल किए गए तरीके शामिल हैं, तो उपयोगकर्ता को ऐप्लिकेशन के लॉन्च होने में कम समय लग सकता है. साथ ही, उसे कम जंक का सामना करना पड़ सकता है.

  3. यह फ़्लो, क्लाउड प्रोफ़ाइल के एग्रीगेशन के साथ काम करता है, ताकि समय के साथ ऐप्लिकेशन के असल इस्तेमाल के आधार पर परफ़ॉर्मेंस को बेहतर बनाया जा सके.

पहली इमेज. इस डायग्राम में, अपलोड करने से लेकर असली उपयोगकर्ता तक डिलीवरी करने तक, बेसलाइन प्रोफ़ाइल का वर्कफ़्लो दिखाया गया है. साथ ही, यह भी दिखाया गया है कि यह वर्कफ़्लो, क्लाउड प्रोफ़ाइलों से कैसे जुड़ा है.

बेसलाइन प्रोफ़ाइल और स्टार्टअप प्रोफ़ाइल की तुलना करना

प्रोफ़ाइल फ़ाइलों को तय करने और उन्हें बनाने के लिए, बेसलाइन प्रोफ़ाइल Gradle प्लगिन का इस्तेमाल किया जाता है. यह प्लगिन, बिल्ड प्रोसेस में शामिल होता है. साथ ही, AGP, इंसानों के पढ़ने लायक इन प्रोफ़ाइल नियमों को बाइनरी फ़ॉर्मैट में कंपाइल करता है. इन्हें APK या AAB में baseline.prof के तौर पर पैकेज किया जाता है. Android रनटाइम, इनका इस्तेमाल उपयोगकर्ता के डिवाइस पर कंपाइल करने के लिए असरदार तरीके से कर सकता है. हालांकि, इसके लिए ज़रूरी है कि इनका साइज़ 1.5 एमबी से कम हो.

आम तौर पर, बनाई गई इन प्रोफ़ाइल फ़ाइलों का नाम startup-prof.txt और baseline-prof.txt होता है. इनके कॉन्टेंट कभी-कभी एक जैसे दिख सकते हैं. ऐसा खास तौर पर तब होता है, जब आपका मुख्य फ़ोकस स्टार्टअप पर हो. हालांकि, इनके मकसद अलग-अलग होते हैं. साथ ही, ये अलग-अलग चरणों में परफ़ॉर्मेंस पर असर डालते हैं:

बेसलाइन प्रोफ़ाइल

बेसलाइन प्रोफ़ाइल फ़ाइल में नियमों का एक पूरा सेट होता है. Android रनटाइम (ART) इसका इस्तेमाल, अक्सर इस्तेमाल किए जाने वाले कोड पाथ को पहले से कंपाइल करने के लिए करता है. इससे, ऐप्लिकेशन की परफ़ॉर्मेंस को सिर्फ़ स्टार्टअप से आगे ऑप्टिमाइज़ किया जाता है.

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

ये अतिरिक्त नियम, स्टार्टअप के अलावा अन्य नियमों के लिए जनरेट किए जाते हैं. इन्हें includeInStartupProfile कॉन्फ़िगरेशन फ़ील्ड की वैल्यू से कोई फ़र्क़ नहीं पड़ता.

स्टार्टअप प्रोफ़ाइल

Startup Profile फ़ाइल में ऐसे नियम होते हैं जिन्हें खास तौर पर आपके ऐप्लिकेशन के स्टार्टअप पाथ के लिए ऑप्टिमाइज़ किया जाता है. कंपाइलेशन के दौरान, D8, Java बाइटकोड को DEX फ़ॉर्मैट में बदल देता है. इसके बाद, R8 इस फ़ाइल का इस्तेमाल करके आपकी DEX फ़ाइलों के लेआउट को बेहतर बनाता है. इससे यह पक्का किया जाता है कि स्टार्टअप के लिए ज़रूरी कोड को प्राइमरी DEX फ़ाइल में रखा जाए, ताकि उसे तेज़ी से एक्ज़ीक्यूट किया जा सके. आपको आम तौर पर, includeInStartupProfile को true पर सिर्फ़ उन टेस्ट के लिए सेट करना चाहिए जो ऐप्लिकेशन के शुरुआती डिसप्ले के लिए ज़रूरी हैं. ज़्यादा जानकारी के लिए, स्टार्टअप प्रोफ़ाइल बनाना लेख पढ़ें.

क्लाउड प्रोफ़ाइलें

क्लाउड प्रोफ़ाइलें, PGO का एक और फ़ॉर्मैट उपलब्ध कराती हैं. इन्हें Google Play Store इकट्ठा करता है और इंस्टॉल करने के समय कंपाइल करने के लिए डिस्ट्रिब्यूट करता है. ये बेसलाइन प्रोफ़ाइलों के साथ काम करती हैं.

क्लाउड प्रोफ़ाइलें, ऐप्लिकेशन के साथ असल उपयोगकर्ताओं के इंटरैक्शन के आधार पर बनाई जाती हैं. हालांकि, अपडेट के बाद इन्हें डिस्ट्रिब्यूट होने में कई घंटे से लेकर कई दिन लग जाते हैं. इससे इनकी उपलब्धता सीमित हो जाती है. जब तक प्रोफ़ाइलें पूरी तरह से डिस्ट्रिब्यूट नहीं हो जातीं, तब तक नए या अपडेट किए गए ऐप्लिकेशन के उपयोगकर्ताओं के लिए, ऐप्लिकेशन की परफ़ॉर्मेंस अच्छी नहीं होती. इसके अलावा, Cloud Profiles सिर्फ़ Android 9 (एपीआई लेवल 28) या इसके बाद के वर्शन वाले Android डिवाइसों पर काम करती हैं. साथ ही, यह सिर्फ़ उन ऐप्लिकेशन के लिए बेहतर तरीके से काम करती हैं जिनके पास उपयोगकर्ताओं का बड़ा आधार है.

Android के अलग-अलग वर्शन पर कंपाइल करने का तरीका

Android प्लैटफ़ॉर्म के वर्शन, ऐप्लिकेशन कंपाइल करने के अलग-अलग तरीके इस्तेमाल करते हैं. हर तरीके में, परफ़ॉर्मेंस से जुड़ा कोई न कोई समझौता होता है. बेसलाइन प्रोफ़ाइलें, कंपाइल करने के पिछले तरीकों से बेहतर होती हैं. ऐसा इसलिए, क्योंकि ये सभी इंस्टॉल के लिए एक प्रोफ़ाइल उपलब्ध कराती हैं.

Android वर्शन कंपाइल करने का तरीका ऑप्टिमाइज़ेशन का तरीका
5 से 6 (एपीआई लेवल 21 से 23) फ़ुल एओटी पूरे ऐप्लिकेशन को इंस्टॉल करने के दौरान ऑप्टिमाइज़ किया जाता है. इससे ऐप्लिकेशन इस्तेमाल करने के लिए, लोगों को ज़्यादा इंतज़ार करना पड़ता है. साथ ही, रैम और डिस्क स्पेस का इस्तेमाल बढ़ जाता है. इसके अलावा, डिस्क से कोड लोड होने में ज़्यादा समय लगता है. इससे कोल्ड स्टार्टअप में लगने वाला समय बढ़ सकता है.
7 से लेकर 8.1 (एपीआई लेवल 24 से 27) पार्शियल एओटी (बेसलाइन प्रोफ़ाइल) जब ऐप्लिकेशन मॉड्यूल इस डिपेंडेंसी को तय करता है, तब पहली बार रन करने पर androidx.profileinstaller, बेसलाइन प्रोफ़ाइलें इंस्टॉल करता है. ART, ऐप्लिकेशन के इस्तेमाल के दौरान प्रोफ़ाइल के अतिरिक्त नियम जोड़कर, इसे और बेहतर बना सकता है. साथ ही, डिवाइस के इस्तेमाल में न होने पर उन्हें कंपाइल कर सकता है. इससे डिस्क स्पेस को ऑप्टिमाइज़ किया जाता है. साथ ही, डिस्क से कोड लोड करने में लगने वाला समय कम हो जाता है. इससे ऐप्लिकेशन के लिए इंतज़ार करने का समय कम हो जाता है.
9 (एपीआई लेवल 28) और इससे ऊपर के वर्शन आंशिक एओटी (बेसलाइन + क्लाउड प्रोफ़ाइल) Play, ऐप्लिकेशन इंस्टॉल करने के दौरान बेसलाइन प्रोफ़ाइलों का इस्तेमाल करता है. इससे, APK और क्लाउड प्रोफ़ाइलों को ऑप्टिमाइज़ किया जा सकता है. हालांकि, ऐसा तब ही किया जा सकता है, जब ये प्रोफ़ाइलें उपलब्ध हों. इंस्टॉल करने के बाद, ART प्रोफ़ाइलें Play पर अपलोड की जाती हैं. इसके बाद, उन्हें इकट्ठा किया जाता है. इसके बाद, जब अन्य उपयोगकर्ता ऐप्लिकेशन इंस्टॉल या अपडेट करते हैं, तो उन्हें क्लाउड प्रोफ़ाइलें के तौर पर उपलब्ध कराया जाता है.

पहले से मालूम समस्याएं

यहां कुछ ऐसी समस्याएं और उनके समाधान दिए गए हैं जिनके बारे में हमें पता है. इसके अलावा, कुछ ऐसी समस्याएं भी दी गई हैं जिनके समाधान पर हम काम कर रहे हैं:

  • ऐसा हो सकता है कि कुछ डिवाइसों पर अनुमति की सेटिंग की वजह से, बेसलाइन प्रोफ़ाइल जनरेट न हो पाए. इनमें OnePlus डिवाइस भी शामिल हैं. इस समस्या को ठीक करने के लिए, डेवलपर के लिए सेटिंग और टूल में जाकर, अनुमति की निगरानी करने की सुविधा बंद करें विकल्प को बंद करें.

  • लाइब्रेरी के लिए बेसलाइन प्रोफ़ाइलें उपलब्ध कराने के लिए, कम से कम Baseline Profile Gradle प्लगिन 1.2.3 या AGP 8.3 का इस्तेमाल करें (समस्या #313992099).

  • अगर ./gradlew app:generateBaselineProfile कमांड से बेसलाइन प्रोफ़ाइलें जनरेट की जाती हैं, तो टेस्ट मॉड्यूल में बेंचमार्क भी चलते हैं और नतीजों को खारिज कर दिया जाता है. अगर ऐसा होता है, तो -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile के साथ कमांड चलाकर, सिर्फ़ बेसलाइन प्रोफ़ाइलें जनरेट की जा सकती हैं. इस समस्या को AGP 8.2 में ठीक कर दिया गया है.

  • सभी बिल्ड टाइप के लिए बेसलाइन प्रोफ़ाइल जनरेट करने का निर्देश—./gradlew app:generateBaselineProfile—सिर्फ़ रिलीज़ बिल्ड टाइप के लिए बेसलाइन प्रोफ़ाइल जनरेट करता है. इस समस्या को AGP 8.1 में ठीक कर दिया गया है.

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

  • Play Store में संगठन में काम करने वालों के साथ ऐप्लिकेशन शेयर करने की सुविधा, बेसलाइन प्रोफ़ाइल के साथ काम नहीं करती. हालांकि, ऐप्लिकेशन का इंटरनल टेस्ट ट्रैक के साथ काम करती है.

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

अन्य संसाधन

आपके लिए सुझाव