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