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

बेसलाइन प्रोफ़ाइल 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 प्लग इन का कॉन्फ़िगरेशन इस तरह से करें:

Kotlin

baselineProfile {
    managedDevices += "pixel6Api31"
}

ग्रूवी

baselineProfile {
    managedDevices = ['pixel6Api31']
}

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

Kotlin

baselineProfile {
    ...
    useConnectedDevices = false
}

ग्रूवी

baselineProfile {
    ...
    useConnectedDevices false
}

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

हर वैरिएंट, हर फ़्लेवर या एक फ़ाइल के तौर पर बेसलाइन प्रोफ़ाइल जनरेट की जा सकती है इस्तेमाल करें. इस व्यवहार को मर्ज सेटिंग से कंट्रोल करें, जैसे कि नीचे दिए गए उदाहरण में दिखाया गया है.

Kotlin

baselineProfile {
    mergeIntoMain = true
}

ग्रूवी

baselineProfile {
    mergeIntoMain true
}

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

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

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

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

Kotlin

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

ग्रूवी

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 की मदद से, सोर्स डायरेक्ट्री में बेसलाइन प्रोफ़ाइल सेव की जा सकती हैं फ़्लैग करें:

  • 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 {
            ...
        }
        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")
        }
        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
        }
    }
}

ग्रूवी

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 ऐप्लिकेशन के हिसाब से, पसंद के मुताबिक बेसलाइन प्रोफ़ाइल बनाएं और इसके असर की पुष्टि करें.