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

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

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

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

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

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

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

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

हमारा सुझाव है कि बेसलाइन प्रोफ़ाइलें बनाने और मैनेज करने के लिए, AGP के नए वर्शन का इस्तेमाल करें. यहां 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.
  • बेसलाइन प्रोफ़ाइल में desugared क्लास शामिल होती हैं.
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 के तौर पर पैकेज किया जाता है. एआरटी, डिवाइस पर कंपाइल करने के लिए इनका असरदार तरीके से इस्तेमाल कर सकता है. हालांकि, इसके लिए ज़रूरी है कि इनका साइज़ 1.5 एमबी से कम हो.

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

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

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

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

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

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

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

  • Firebase टेस्ट लैब के डिवाइसों पर, बेसलाइन प्रोफ़ाइल जनरेट करने की सुविधा काम नहीं करती. इनमें, Gradle मैनेज किए गए टेस्ट लैब डिवाइस भी शामिल हैं (समस्या #285187547).

  • लाइब्रेरी के लिए बेसलाइन प्रोफ़ाइलें उपलब्ध कराने के लिए, कम से कम 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 जैसे कुछ डिवाइसों पर बैटरी ऑप्टिमाइज़ेशन की सुविधा चालू होने पर, प्रोफ़ाइल इंस्टॉल करने में समस्या आ सकती है. यह पक्का करने के लिए कि आपकी प्रोफ़ाइलें सही तरीके से इंस्टॉल हों, बेंचमार्क डिवाइसों में बैटरी ऑप्टिमाइज़ेशन की सुविधा बंद करें.

अन्य संसाधन

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