बेसलाइन प्रोफ़ाइल जनरेट करने की प्रोसेस कॉन्फ़िगर करें

बेसलाइन प्रोफ़ाइल Gradle प्लग इन, फ़ाइल बनाने और उसे बनाए रखने में आसान बनाता है बेसलाइन प्रोफ़ाइल. यह आपकी मदद करता है ये काम करें:

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

प्लग इन से जुड़ी ज़रूरी शर्तें

बेसलाइन प्रोफ़ाइल जनरेट करने के लिए, Gradle के ज़रिए मैनेज किए जा रहे डिवाइसों का इस्तेमाल करना

Gradle मैनेज किए जाने वाले डिवाइस (जीएमडी) का इस्तेमाल करके, इन कामों के लिए अपनी बेसलाइन प्रोफ़ाइल जनरेट करें और build.gradle.kts कॉन्फ़िगरेशन में एक प्रोफ़ाइल जोड़ें प्रोफ़ाइल निर्माता मॉड्यूल का—शायद :baselineprofile टेस्ट मॉड्यूल—के तौर पर नीचे दिए गए उदाहरण में दिखाया गया है:

Kotlin

android {
   testOptions.managedDevices.devices {
       create<com.android.build.api.dsl.ManagedVirtualDevice>("pixel6Api31") {
           device = "Pixel 6"
           apiLevel = 31
           systemImageSource = "aosp"
       }
   }
}

ग्रूवी

android {
   testOptions.managedDevices.devices {
       pixel6Api31(ManagedVirtualDevice) {
           device 'Pixel 6'
           apiLevel = 31
           systemImageSource 'aosp'
       }
   }
}

इसे बेसलाइन प्रोफ़ाइल में जोड़कर, GMD का इस्तेमाल करके बेसलाइन प्रोफ़ाइल जनरेट करें Gradle प्लग इन कॉन्फ़िगरेशन निम्न प्रकार से, build.gradle.kts में :baselineprofile टेस्ट मॉड्यूल:

Kotlin

baselineProfile {
    managedDevices += "pixel6Api31"
}

Groovy

baselineProfile {
    managedDevices = ['pixel6Api31']
}

बेसलाइन प्रोफ़ाइल जनरेट करने के लिए GMD का इस्तेमाल करने पर, अपने :baselineprofile टेस्ट मॉड्यूल में useConnectedDevices को false पर सेट करें:

Kotlin

baselineProfile {
    ...
    useConnectedDevices = false
}

ग्रूवी

baselineProfile {
    ...
    useConnectedDevices false
}

अलग-अलग वैरिएंट के लिए बेसलाइन प्रोफ़ाइल जनरेट करें

हर वैरिएंट, हर फ़्लेवर या एक फ़ाइल के तौर पर बेसलाइन प्रोफ़ाइल जनरेट की जा सकती हैं इस्तेमाल करें. इस व्यवहार को मर्ज सेटिंग की मदद से कंट्रोल करें. इस बारे में, ऐप्लिकेशन या लाइब्रेरी मॉड्यूल के build.gradle.kts में दिए गए उदाहरण में बताया गया है.

Kotlin

baselineProfile {
    mergeIntoMain = true
}

ग्रूवी

baselineProfile {
    mergeIntoMain true
}

सभी वैरिएंट के लिए जनरेट की गई प्रोफ़ाइलों को एक ही प्रोफ़ाइल में मर्ज करने के लिए, mergeIntoMain को true पर सेट करें. हर वैरिएंट के लिए बेसलाइन जनरेट नहीं किया जा सकता यह सेटिंग true पर सेट होने पर प्रोफ़ाइल बनाई जाती हैं, इसलिए Gradle टास्क generateBaselineProfile. प्रोफ़ाइल का आउटपुट यहां मौजूद है src/main/generated/baselineProfiles.

मर्ज करने की सुविधा बंद करने और हर वैरिएंट के लिए एक प्रोफ़ाइल बनाने के लिए, mergeIntoMain को false पर सेट करें. इस मामले में, अलग-अलग वैरिएंट के लिए Gradle टास्क मौजूद होते हैं. इसके लिए उदाहरण के लिए, जब उपलब्ध हो दो फ़्लेवर—जैसे कि मुफ़्त और पैसे चुकाकर लिया गया—और एक रिलीज़ बिल्ड टाइप के साथ-साथ, टास्क नीचे बताए गए हैं:

* `generateFreeReleaseBaselineProfile`
* `generatePaidReleaseBaselineProfile`
* `generateReleaseBaselineProfile`

हर वैरिएंट के लिए मर्ज करने के तरीके के बारे में बताने के लिए, नीचे दिए गए कोड का इस्तेमाल करें:

Kotlin

baselineProfile {
    variants {
        freeRelease {
            mergeIntoMain = true
        }
    }
}

Groovy

baselineProfile {
    variants {
        freeRelease {
            mergeIntoMain true
        }
    }
}

पिछले उदाहरण में, जिन वैरिएंट में फ़्लैग को true पर सेट किया गया है वे सभी हैं src/main/generated/baselineProfiles में मर्ज की गई, जबकि जिन वैरिएंट में फ़्लैग को false पर सेट किया जाता है उन्हें फ़ोल्डर में रखा जाता है src/<variant>/generated/baselineProfiles.

डिफ़ॉल्ट रूप से, लाइब्रेरी के लिए mergeIntoMain को true और ऐप्लिकेशन के लिए false पर सेट किया गया है.

नई रिलीज़ बनाते समय, बेसलाइन प्रोफ़ाइल अपने-आप जनरेट होती है

टास्क generateBaselineProfile का मैन्युअल तरीके से इस्तेमाल करने के बजाय, हर रिलीज़ के साथ अपने-आप जनरेट होने के लिए, बेसलाइन प्रोफ़ाइलों को कॉन्फ़िगर किया जा सकता है. के साथ अपने-आप जनरेट होने की सुविधा सेट अप की जाती है. इसका मतलब है कि सबसे नई प्रोफ़ाइल को रिलीज़ के बिल्ड में शामिल किया जाता है.

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

Kotlin

baselineProfile {
    automaticGenerationDuringBuild = true
}

ग्रूवी

baselineProfile {
    automaticGenerationDuringBuild true
}

automaticGenerationDuringBuild फ़्लैग को true पर सेट करने से हर रिलीज़ के लिए नई बेसलाइन प्रोफ़ाइल बनाने में मदद मिलती है. इसका मतलब है कि असेंबल रिलीज़ बिल्ड टास्क चलाना, जैसे कि ./gradlew:app:assembleRelease, :app:generateReleaseBaselineProfile को भी ट्रिगर करता है, बेसलाइन प्रोफ़ाइल शुरू करता है इंस्ट्रुमेंटेशन टेस्ट करता है और उस बेसलाइन प्रोफ़ाइल का बिल्ड बनाता है जिस पर वे चलते हैं. अपने-आप जनरेट होने की सुविधा की मदद से, उपयोगकर्ताओं को सबसे बेहतर परफ़ॉर्मेंस मिलती है. हालांकि, डबल बिल्ड और इंस्ट्रुमेंटेशन की वजह से, बिल्ड का समय भी बढ़ जाता है टेस्ट.

हर वैरिएंट के हिसाब से भी यह व्यवहार तय किया जा सकता है, जैसा कि यहां दिखाया गया है उदाहरण:

Kotlin

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild = true
        }
    }
}

ग्रूवी

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild true
        }
    }
}

पिछले उदाहरण में, generateFreeReleaseBaselineProfile टास्क चलता है assembleFreeRelease को शुरू करते समय. इस��े तब मदद मिलती है, जब उपयोगकर्ता चाहता है कि उदाहरण के लिए, डिस्ट्रिब्यूशन बिल्ड के लिए release, जो हमेशा प्रोफ़ाइल जनरेट करता है और releaseWithoutProfile बिल्ड को इंंटरनल टेस्टिंग के लिए तैयार किया जा सकता है.

सोर्स में बेसलाइन प्रोफ़ाइलें सेव करना

saveInSrc की मदद से, सोर्स डायरेक्ट्री में बेसलाइन प्रोफ़ाइल सेव की जा सकती हैं ऐप्लिकेशन या लाइब्रेरी मॉड्यूल के build.gradle.kts में फ़्लैग करें:

  • true: बेसलाइन प्रोफ़ाइल को src/<variant>/generated/baselineProfiles में सेव किया जाता है. इससे, अपने सोर्स के साथ जनरेट की गई नई प्रोफ़ाइल को कमिट किया जा सकता है.
  • false: बेसलाइन प्रोफ़ाइल, बिल्ड डायरेक्ट्री में इंटरमीडिएट फ़ाइलों में सेव होती है. इस तरह, अपना कोड कम करने के दौरान, आप नए कोड को सेव नहीं कर पाते जनरेट की गई प्रोफ़ाइल.

Kotlin

baselineProfile {
    saveInSrc = true
}

ग्रूवी

baselineProfile {
    saveInSrc true
}

हर वैरिएंट के लिए, यह व्यवहार भी तय किया जा सकता है:

Kotlin

baselineProfile {
    variants {
        freeRelease {
            saveInSrc = true
        }
    }
}

ग्रूवी

baselineProfile {
    variants {
        freeRelease {
            saveInSrc true
        }
    }
}

प्रोफ़ाइल के नियमों को फ़िल्टर करें

बेसलाइन प्रोफ़ाइल ग्रेडल प्लगिन की मदद से, बेसलाइन प्रोफ़ाइल के नियमों को फ़िल्टर किया जा सकता है जनरेट किया गया. यह खास तौर पर लाइब्रेरी के लिए मददगार होता है. ऐसा तब करना पड़ता है, जब आपको उन क्लास और मेथड के लिए प्रोफ़ाइल नियम बनाओ जो सैंपल ऐप्लिकेशन या लाइब्रेरी से ही जोड़ा जा सकता है. फ़िल्टर में खास जानकारी को शामिल और बाहर रखा जा सकता है पैकेज और क्लास की जानकारी देता है. सिर्फ़ 'बाहर रखने का विकल्प' तय करने पर, सिर्फ़ बेसलाइन से मेल खाने वाला प्रोफ़ाइल के नियम लागू नहीं होते और बाकी सब कुछ शामिल होता है.

फ़िल्टर की खास बातें इनमें से कोई भी हो सकती हैं:

  • पैकेज का नाम, जो डबल वाइल्डकार्ड के साथ खत्म होता है. इससे, दिए गए पैकेज और सभी सब-पैकेज से मैच किया जा सकता है. उदाहरण के लिए, com.example.**, com.example.method और com.example.method.bar से मैच करता है.
  • पैकेज का नाम, वाइल्डकार्ड से खत्म होने वाला है, ताकि सिर्फ़ बताए गए पैकेज से मेल खाए. इसके लिए उदाहरण, com.example.* com.example.method से मेल खाता है, लेकिन मेल नहीं खाता com.example.method.bar.
  • किसी क्लास से मैच करने के लिए क्लास के नाम—उदाहरण के लिए, com.example.MyClass.

यहां दिए गए उदाहरणों में, खास पैकेज को शामिल करने और बाहर रखने का तरीका बताया गया है:

Kotlin

baselineProfile {
    filter {
        include("com.somelibrary.widget.grid.**")
        exclude("com.somelibrary.widget.grid.debug.**")
        include("com.somelibrary.widget.list.**")
        exclude("com.somelibrary.widget.list.debug.**")
        include("com.somelibrary.widget.text.**")
        exclude("com.somelibrary.widget.text.debug.**")
    }
}

ग्रूवी

baselineProfile {
    filter {
        include 'com.somelibrary.widget.grid.**'
        exclude 'com.somelibrary.widget.grid.debug.**'
        include 'com.somelibrary.widget.list.**'
        exclude 'com.somelibrary.widget.list.debug.**'
        include 'com.somelibrary.widget.text.**'
        exclude 'com.somelibrary.widget.text.debug.**'
    }
}

अलग-अलग वैरिएंट के लिए, फ़िल्टर के नियमों को पसंद के मुताबिक इस तरह से बनाएं:

Kotlin

// Non-specific filters applied to all the variants.
baselineProfile {
    filter { include("com.myapp.**") }
}

// Flavor-specific filters.
baselineProfile {
    variants {
        free {
            filter {
                include("com.myapp.free.**")
            }
        }
        paid {
            filter {
                include("com.myapp.paid.**")
            }
        }
    }
}

// Build-type-specific filters.
baselineProfile {
    variants {
        release {
            filter {
                include("com.myapp.**")
            }
        }
    }
}

// Variant-specific filters.
baselineProfile {
    variants {
        freeRelease {
            filter {
                include("com.myapp.**")
            }
        }
    }
}

ग्रूवी

// Non-specific filters applied to all the variants.
baselineProfile {
    filter { include 'com.myapp.**' }
}

// Flavor-specific filters.
baselineProfile {
    variants {
        free {
            filter {
                include 'com.myapp.free.**'
            }
        }
        paid {
            filter {
                include 'com.myapp.paid.**'
            }
        }
    }
}

// Build-type specific filters.
baselineProfile {
    variants {
        release {
            filter {
                include 'com.myapp.**'
            }
        }
    }
}

// Variant-specific filters.
baselineProfile {
    variants {
        freeRelease {
            filter {
                include 'com.myapp.**'
            }
        }
    }
}

BaselineProfileRule.collect() में, filterPredicate आर्ग्युमेंट का इस्तेमाल करके भी नियमों को फ़िल्टर किया जा सकता है. हालांकि, हमारा सुझाव है कि आप Gradle का इस्तेमाल करें प्लगिन का उपयोग करें, क्योंकि यह सबपैकेज और पूरे मॉड्यूल को एक ही जगह पर कॉन���फ़िगर किया जा सकता है.

मानदंड और बेसलाइन प्रोफ़ाइल के बिल्ड टाइप को पसंद के मुताबिक बनाएं

बेसलाइन प्रोफ़ाइल Gradle प्लग इन, जनरेट करने के लिए अतिरिक्त बिल्ड टाइप बनाता है और मानदंड तय करने के लिए किया जा सकता है. इन बिल्ड टाइप से पहले, ये चीज़ें जुड़ी होती हैं benchmark और nonMinified. उदाहरण के लिए, release बिल्ड टाइप के लिए, प्लगिन, benchmarkRelease और nonMinifiedRelease बिल्ड टाइप बनाता है. ये बिल्ड टाइप, इस्तेमाल के खास उदाहरण के लिए अपने-आप कॉन्फ़िगर हो जाते हैं और उनमें आम तौर पर किसी कस्टमाइज़ेशन की ज़रूरत नहीं होती. हालांकि, कुछ ऐसे मामले भी होते हैं जिनमें कुछ कस्टम विकल्पों को लागू करने में अब भी मदद मिल सकती है, जैसे कि साइन करने के लिए अलग कॉन्फ़िगरेशन.

अपने-आप जनरेट होने वाले बिल्ड टाइप को पसंद के मुताबिक बनाने के लिए, बिल्ड टाइप प्रॉपर्टी; जिन प्रॉपर्टी का इस्तेमाल नहीं किया जा सकता उन्हें बदल दिया जाता है. नीचे दिए गए उदाहरण में, अन्य बिल्ड टाइप को पसंद के मुताबिक बनाने और कौनसी प्रॉपर्टी बदली जाती हैं:

Kotlin

android {
    buildTypes {
        release {
            ...
        }
        create("benchmarkRelease") {
            // Customize properties for the `benchmarkRelease` build type here.
            // For example, you can change the signing config (by default
            // it's the same as for the `release` build type).
            signingConfig = signingConfigs.getByName("benchmarkRelease")
        }
        create("nonMinifiedRelease") {
            // Customize properties for the `nonMinifiedRelease` build type here.
            signingConfig = signingConfigs.getByName("nonMinifiedRelease")

            // From Baseline Profile Gradle plugin 1.2.4 and higher, you can't
            // customize the following properties, which are always overridden to
            // avoid breaking Baseline Profile generation:
            //
            // isJniDebuggable = false
            // isDebuggable = false
            // isMinifyEnabled = false
            // isShrinkResources = false
            // isProfileable = true
            // enableAndroidTestCoverage = false
            // enableUnitTestCoverage = false
        }
    }
}

Groovy

android {
    buildTypes {
        release {
            ...
        }
        benchmarkRelease {
            // Customize properties for the `benchmarkRelease` build type here.
            // For example, you can change the signing config (by default it's the
            // same as for the `release` build type.)
            signingConfig = signingConfigs.benchmarkRelease
        }
        nonMinifiedRelease {
            // Customize properties for the `nonMinifiedRelease` build type here.
            signingConfig = signingConfigs.nonMinifiedRelease

            // From Baseline Profile Gradle plugin 1.2.4 and higher, you can't use
            // the following properties, which are always overridden to avoid breaking
            // Baseline Profile generation:
            //
            // isJniDebuggable = false
            // isDebuggable = false
            // isMinifyEnabled = false
            // isShrinkResources = false
            // isProfileable = true
            // enableAndroidTestCoverage = false
            // enableUnitTestCoverage = false       
        }
    }
}

अतिरिक्त नोट

बेसलाइन प्रोफ़ाइल बनाते समय, यहां दी गई कुछ और चीज़ों के बारे में आपको पता होना चाहिए:

  • कंपाइल की गई बेसलाइन प्रोफ़ाइलों का साइज़ 1.5 एमबी से कम होना चाहिए. ऐसा नहीं होता है अपनी सोर्स फ़ाइलों में टेक्स्ट फ़ॉर्मैट पर लागू करें, जो आम तौर पर पहले से बड़ा कर लें. अपनी बाइनरी बेसलाइन के साइज़ की पुष्टि करें इसके तहत, आउटपुट आर्टफ़ैक्ट में उसका पता लगाकर प्रोफ़ाइल बनाएं APK के लिए assets/dexopt/baseline.prof या एएबी के लिए BUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof.

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

कोड लैब

परफ़ॉर्मेंस का आकलन करने के लिए, मैक्रोबेंचमार्किंग का इस्तेमाल करें.
Android ऐप्लिकेशन के हिसाब से, पसंद के मुताबिक बेसलाइन प्रोफ़ाइल बनाएं और इसके असर की पुष्टि करें.