स्टार्टअप प्रोफ़ाइल बनाएं

स्टार्टअप प्रोफ़ाइल, बेसलाइन प्रोफ़ाइल का सबसेट हैं. स्टार्टअप प्रोफ़ाइल का इस्तेमाल ये कंपनियां करती हैं बिल्ड सिस्टम की मदद से, उन क्लास और तरीकों को और ज़्यादा ऑप्टिमाइज़ कर सके जो उनमें शामिल हैं हम आपके APK की DEX फ़ाइलों में कोड के लेआउट को बेहतर बनाते हैं. स्टार्टअप प्रोफ़ाइल से, सिर्फ़ बेसलाइन प्रोफ़ाइल की तुलना में, आपके ऐप्लिकेशन के शुरू होने की प्रोसेस 15% तक तेज़ है.

पहली इमेज. DEX लेआउट की मदद से, कोड के इलाके को बेहतर बनाया गया ऑप्टिमाइज़ेशन.

ज़रूरी शर्तें

हमारा सुझाव है कि आप नीचे दिए गए टूल की मदद से, स्टार्टअप प्रोफ़ाइल का इस्तेमाल करें:

  • Jetpack मैक्रोबेंचमार्क 1.2.0 या उसके बाद का वर्शन
  • Android Gradle प्लग इन 8.2 या इसके बाद वाला वर्शन
  • Android Studio Iguana या इसके बाद वाला वर्शन

इसके अलावा, आपको अपने ऐप्लिकेशन में इन सेटिंग की ज़रूरत होगी:

  • R8 चालू होना चाहिए. अपने रिलीज़ बिल्ड के लिए, isMinifyEnabled = true.
  • DEX लेआउट ऑप्टिमाइज़ेशन चालू किया गया. इसके baselineProfile {} ब्लॉक में ऐप्लिकेशन मॉड्यूल की बिल्ड फ़ाइल में, dexLayoutOptimization = true सेट करें.

कोई स्टार्टअप प्रोफ़ाइल बनाएं

Android Studio, बेसलाइन प्रोफ़ाइल के साथ स्टार्टअप प्रोफ़ाइल बनाता है. डिफ़ॉल्ट बेसलाइन प्रोफ़ाइल जनरेटर टेंप्लेट का इस्तेमाल करें.

स्टार्टअप प्रोफ़ाइल बनाने और जनरेट करने के सामान्य चरण वही हैं बेसलाइन प्रोफ़ाइल बनाने के लिए.

स्टार्टअप प्रोफ़ाइल बनाने का डिफ़ॉल्ट तरीका, बेसलाइन प्रोफ़ाइल का इस्तेमाल करना है Android Studio में जनरेटर मॉड्यूल टेंप्लेट. इसमें स्टार्टअप शामिल हैं इंटरैक्शन जो एक बुनियादी स्टार्टअप प्रोफ़ाइल बनाते हैं. इस स्टार्टअप प्रोफ़ाइल को बेहतर बनाने के लिए ज़्यादा ज़रूरी उपयोगकर्ता गतिविधियों (सीयूजे) की मदद से, अपने ऐप्लिकेशन के स्टार्टअप सीयूजे को rule में जोड़ें ब्लॉक को includeInStartupProfile पर true पर सेट किया गया. सामान्य ऐप्लिकेशन के लिए, ऐप्लिकेशन का MainActivity काफ़ी हो सकता है. ज़्यादा मुश्किल ऐप्लिकेशन बनाने के लिए, अपने ऐप्लिकेशन में सबसे सामान्य एंट्री पॉइंट जोड़ना, जैसे कि ऐप्लिकेशन को होम स्क्रीन पर या डीप लिंक में लॉन्च किया जा सकता है.

नीचे दिया गया कोड स्निपेट, बेसलाइन प्रोफ़ाइल जनरेटर दिखाता है (डिफ़ॉल्ट रूप से BaselineProfileGenerator.kt फ़ाइल) जिसमें आपका ऐप्लिकेशन यहां से शुरू करना शामिल है होम स्क्रीन और डीप लिंक में लॉन्च किया जा रहा है. डीप लिंक सीधे ऐप्लिकेशन की होम स्क्रीन पर नहीं, बल्कि ऐप्लिकेशन के न्यूज़ फ़ीड में.

@RunWith(AndroidJUnit4::class)
@LargeTest
class BaselineProfileGenerator {

    @get:Rule
    val rule = BaselineProfileRule()

    @Test
    fun generate() {
        rule.collect(
            packageName = "com.example.app",
            includeInStartupProfile = true
        ) {
            // Launch directly into the NEWS_FEED.
            startActivityAndWait(Intent().apply {
                setPackage(packageName)
                setAction("com.example.app.NEWS_FEED")
            })
        }
    }
}

ऐप्लिकेशन के लिए बेसलाइन प्रोफ़ाइल जनरेट करें कॉन्फ़िगरेशन चलाएं और Startup Profile के नियम: src/<variant>/generated/baselineProfiles/startup-prof.txt.

स्टार्टअप प्रोफ़ाइल ऑप्टिमाइज़ेशन की पुष्टि करें

DEX लेआउट ऑप्टिमाइज़ेशन की पुष्टि करने के लिए, Android Studio का इस्तेमाल करके APK खोलें और DEX फ़ाइलों में क्लास की पुष्टि करें. पक्का करें कि मुख्य classes.dex पूरी तरह भर गया. अगर आपके ऐप्लिकेशन में एक DEX फ़ाइल है, तो स्टार्टअप प्रोफ़ाइल को चालू करने के बाद, ऐप्लिकेशन में दो DEX फ़ाइलें मौजूद हैं या नहीं.

अगर स्टार्टअप क्लास किसी एक DEX फ़ाइल में फ़िट नहीं होती हैं, तो Android Studio आपको चेतावनी देता है. गड़बड़ी की जानकारी पाने के लिए, इसमें नॉन-स्टार्टअप तरीकों की संख्या शामिल है तो पक्का करें कि R8 कंपाइलर को कम से कम वर्शन पर अपडेट किया गया हो 8.3.36-dev को settings.gradle फ़ाइल में ये बदलाव करके तो आपने स्टार्टअप प्रोफ़ाइल लागू की हो:

Kotlin

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:8.3.6-dev")
        }
    }
}

ग्रूवी

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url uri('https://storage.googleapis.com/r8-releases/raw')
            }
        }
        dependencies {
            classpath 'com.android.tools:r8:8.3.6-dev"
        }
    }
}

इसके बाद --info जोड़ना न भूलें Gradle के साथ बनाते समय, नीचे दिए गए निर्देश में assembleRelease.

./gradlew assembleRelease --info

इसके बाद, गड़बड़ी की जानकारी को टर्मिनल पर प्रिंट कर दिया जाता है.

अगर आपका ऐप्लिकेशन या कोई लाइब्रेरी किसी पुराने एपीआई का रेफ़रंस देती है, तो इन क्लास की कंपैटबिलिटी को लागू करने का तरीका हमेशा आखिरी DEX फ़ाइल का इस्तेमाल करता है. रद्द की गई आखिरी DEX फ़ाइल, DEX लेआउट में शामिल नहीं है ऑप्टिमाइज़ेशन.