इस दस्तावेज़ में, समस्याओं की पहचान करने और पक्का करने के लिए सबसे सही तरीके बताए गए हैं ज़्यादा से ज़्यादा फ़ायदा देने के लिए, आपकी बेसलाइन प्रोफ़ाइल सही तरीके से काम करती हैं.
बिल्ड से जुड़ी समस्याएं
अगर आपने अब Android में में बेसलाइन प्रोफ़ाइल का उदाहरण कॉपी किया है, तो सैंपल ऐप्लिकेशन डाउनलोड करते हैं, तो बेसलाइन प्रोफ़ाइल टास्क के दौरान आपको टेस्ट में गड़बड़ी मिल सकती है यह बताता है कि टेस्ट, एम्युलेटर पर नहीं चलाए जा सकते:
./gradlew assembleDemoRelease
Starting a Gradle Daemon (subsequent builds will be faster)
Calculating task graph as no configuration cache is available for tasks: assembleDemoRelease
Type-safe project accessors is an incubating feature.
> Task :benchmarks:pixel6Api33DemoNonMinifiedReleaseAndroidTest
Starting 14 tests on pixel6Api33
com.google.samples.apps.nowinandroid.foryou.ScrollForYouFeedBenchmark > scrollFeedCompilationNone[pixel6Api33] FAILED
java.lang.AssertionError: ERRORS (not suppressed): EMULATOR
WARNINGS (suppressed):
...
ऐसा इसलिए होता है, क्योंकि अब Android में, Gradle से मैनेज किए जाने वाले डिवाइस का इस्तेमाल बेसलाइन प्रोफ़ाइल जनरेशन. आम तौर पर, ऐसा हो सकता है कि आप फ़ेल हो जाएं, एम्युलेटर पर, परफ़ॉर्मेंस के मानदंड नहीं चलाना चाहिए. हालांकि, बेसलाइन प्रोफ़ाइल जनरेट करके, परफ़ॉर्मेंस मेट्रिक इकट्ठा करते समय, सुविधा के लिए, एम्युलेटर पर बेसलाइन प्रोफ़ाइल कलेक्शन की सुविधा. बेसलाइन इस्तेमाल करने के लिए एम्युलेटर वाली प्रोफ़ाइलें बनाएं. इसके बाद, इन्हें बनाएं और इंस्टॉल करें कमांड-लाइन का इस्तेमाल करें और बेसलाइन प्रोफ़ाइल के नियमों को चालू करने के लिए आर्ग्युमेंट सेट करें:
installDemoRelease -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
इसके अलावा, Android Studio में अपनी पसंद के मुताबिक रन कॉन्फ़िगरेशन बनाया जा सकता है, ताकि इसे चुनकर एम्युलेटर पर बेसलाइन प्रोफ़ाइल चालू करें चलाएं > कॉन्फ़िगरेशन में बदलाव करने के लिए:
![Android में Now में बेसलाइन प्रोफ़ाइल बनाने के लिए, कस्टम रन कॉन्फ़िगरेशन जोड़ें](https://developer.android.google.cn/static/topic/performance/images/studio/run-config-nowinandroid-baselineprofiles.png?authuser=0000&hl=hi)
इंस्टॉलेशन संबंधी समस्याएं
यह जांच लें कि आपने जो APK या एएबी बनाया है वह ऐसे बिल्ड वैरिएंट से है जिसमें यह शामिल है
बेसलाइन प्रोफ़ाइल. इसे देखने का सबसे आसान तरीका है कि APK को
बिल्ड > APK का विश्लेषण करें
APK इंस्टॉल कर रहे हैं और /assets/dexopt/baseline.prof
में प्रोफ़ाइल ढूंढ रहे हैं
फ़ाइल:
![Android Studio में APK व्यूअर का इस्तेमाल करके, बेसलाइन प्रोफ़ाइल की जांच करना](https://developer.android.google.cn/static/topic/performance/images/studio/baseline-profile-in-apk.png?authuser=0000&hl=hi)
ऐप्लिकेशन चलाने वाले डिवाइस पर बेसलाइन प्रोफ़ाइल को कंपाइल किया जाना चाहिए. दोनों के लिए
का उपयोग करके इंस्टॉल किए गए ऐप्लिकेशन स्टोर इंस्टॉल और
PackageInstaller
, डिवाइस पर मौजूद कई क्लिप को ऐप्लिकेशन के हिस्से के तौर पर कंपाइल किया जाता है
इंस्टॉल करने की प्रोसेस शुरू होती है. हालांकि, जब Android Studio से ऐप्लिकेशन को अलग से लोड किया जाता है, या
कमांड-लाइन टूल का इस्तेमाल करने पर, Jetpack ProfileInstaller
लाइब्रेरी
यह डेटा इकट्ठा करने के लिए
बैकग्राउंड DEX ऑप्टिमाइज़ेशन प्रोसेस. ऐसे मामलों में, अगर आपको यह पक्का करना है कि
बेसलाइन प्रोफ़ाइल का इस्तेमाल किया जा रहा है. आपको ये काम करने होंगे
बेसलाइन प्रोफ़ाइलों का ज़बरदस्ती कंपाइलेशन होता है. ProfileVerifier
की ओर से
आप प्रोफ़ाइल के इंस्टॉलेशन और कंपाइलेशन की स्थिति के बारे में क्वेरी करते हैं, जैसा कि
नीचे दिया गया उदाहरण:
Kotlin
private const val TAG = "MainActivity" class MainActivity : ComponentActivity() { ... override fun onResume() { super.onResume() lifecycleScope.launch { logCompilationStatus() } } private suspend fun logCompilationStatus() { withContext(Dispatchers.IO) { val status = ProfileVerifier.getCompilationStatusAsync().await() when (status.profileInstallResultCode) { RESULT_CODE_NO_PROFILE -> Log.d(TAG, "ProfileInstaller: Baseline Profile not found") RESULT_CODE_COMPILED_WITH_PROFILE -> Log.d(TAG, "ProfileInstaller: Compiled with profile") RESULT_CODE_PROFILE_ENQUEUED_FOR_COMPILATION -> Log.d(TAG, "ProfileInstaller: Enqueued for compilation") RESULT_CODE_COMPILED_WITH_PROFILE_NON_MATCHING -> Log.d(TAG, "ProfileInstaller: App was installed through Play store") RESULT_CODE_ERROR_PACKAGE_NAME_DOES_NOT_EXIST -> Log.d(TAG, "ProfileInstaller: PackageName not found") RESULT_CODE_ERROR_CACHE_FILE_EXISTS_BUT_CANNOT_BE_READ -> Log.d(TAG, "ProfileInstaller: Cache file exists but cannot be read") RESULT_CODE_ERROR_CANT_WRITE_PROFILE_VERIFICATION_RESULT_CACHE_FILE -> Log.d(TAG, "ProfileInstaller: Can't write cache file") RESULT_CODE_ERROR_UNSUPPORTED_API_VERSION -> Log.d(TAG, "ProfileInstaller: Enqueued for compilation") else -> Log.d(TAG, "ProfileInstaller: Profile not compiled or enqueued") } } }
Java
public class MainActivity extends ComponentActivity { private static final String TAG = "MainActivity"; @Override protected void onResume() { super.onResume(); logCompilationStatus(); } private void logCompilationStatus() { ListeningExecutorService service = MoreExecutors.listeningDecorator( Executors.newSingleThreadExecutor()); ListenableFutureP<rofileVerifier.CompilationStatus >future = ProfileVerifier.getCompilationStatusAsync(); Futures.addCallback(future, new FutureCallback(<>) { @Override public void onSuccess(CompilationStatus result) { int resultCode = result.getProfileInstallResultCode(); if (resultCode == RESULT_CODE_NO_PROFILE) { Log.d(TAG, "ProfileInstaller: Baseline Profile not found"); } else if (resultCode == RESULT_CODE_COMPILED_WITH_PROFILE) { Log.d(TAG, "ProfileInstaller: Compiled with profile"); } else if (resultCode == RESULT_CODE_PROFILE_ENQUEUED_FOR_COMPILATION) { Log.d(TAG, "ProfileInstaller: Enqueued for compilation"); } else if (resultCode == RESULT_CODE_COMPILED_WITH_PROFILE_NON_MATCHING) { Log.d(TAG, "ProfileInstaller: App was installed through Play store"); } else if (resultCode == RESULT_CODE_ERROR_PACKAGE_NAME_DOES_NOT_EXIST) { Log.d(TAG, "ProfileInstaller: PackageName not found"); } else if (resultCode == RESULT_CODE_ERROR_CACHE_FILE_EXISTS_BUT_CANNOT_BE_READ) { Log.d(TAG, "ProfileInstaller: Cache file exists but cannot be read"); } else if (resultCode == RESULT_CODE_ERROR_CANT_WRITE_PROFILE_VERIFICATION_RESULT_CACHE_FILE) { Log.d(TAG, "ProfileInstaller: Can't write cache file"); } else if (resultCode == RESULT_CODE_ERROR_UNSUPPORTED_API_VERSION) { Log.d(TAG, "ProfileInstaller: Enqueued for compilation"); } else { Log.d(TAG, "ProfileInstaller: Profile not compiled or enqueued"); } } @Override public void onFailure(Throwable t) { Log.d(TAG, "ProfileInstaller: Error getting installation status: " + t.getMessage()); } }, service); } }
ये नतीजे कोड कुछ समस्याओं की वजहों के लिए संकेत देते हैं:
RESULT_CODE_COMPILED_WITH_PROFILE
- ऐप्लिकेशन के चलने पर, प्रोफ़ाइल इंस्टॉल और कंपाइल हो जाती है. साथ ही, इसका इस्तेमाल भी किया जाता है. यह ही वह नतीजा है जिसे आपको देखना है.
RESULT_CODE_ERROR_NO_PROFILE_EMBEDDED
- APK या एएबी में कोई प्रोफ़ाइल नहीं मिली. सुनिश्चित करें कि आप एक ऐसा वैरिएंट बनाएं जिसमें बेसलाइन प्रोफ़ाइल शामिल हो, अगर आपको यह गड़बड़ी दिखती है, और वह APK में कोई प्रोफ़ाइल मौजूद है.
RESULT_CODE_NO_PROFILE
- ऐप्लिकेशन के ज़रिए ऐप्लिकेशन इंस्टॉल करते समय, इस ऐप्लिकेशन के लिए कोई प्रोफ़ाइल इंस्टॉल नहीं की गई
स्टोर या पैकेज मैनेजर पर टैप करें. गड़बड़ी कोड के लिए इसकी मुख्य वजह वह प्रोफ़ाइल है
ProfileInstallerInitializer
को बंद करने की वजह से इंस्टॉलर नहीं चला. ध्यान दें कि इस गड़बड़ी की शिकायत किए जाने पर भी, एम्बेड की गई प्रोफ़ाइल ऐप्लिकेशन APK के लिए बना दिया गया है. एम्बेड की गई प्रोफ़ाइल न मिलने पर, गड़बड़ी का कोड दिखेगाRESULT_CODE_ERROR_NO_PROFILE_EMBEDDED
है. RESULT_CODE_PROFILE_ENQUEUED_FOR_COMPILATION
- APK या एएबी में कोई प्रोफ़ाइल मिलती है और उसे कंपाइलेशन के लिए सूची में रखा जाता है. जब
प्रोफ़ाइल को
ProfileInstaller
ने इंस्टॉल किया है, यह अगली बार सिस्टम से बैकग्राउंड DEX ऑप्टिमाइज़ेशन चलाया जाएगा. यह प्रोफ़ाइल कंपाइलेशन पूरा होने तक सक्रिय रहेगा. अपने बेसलाइन कैंपेन को बेंचमार्क करने की कोशिश न करें कंपाइलेशन पूरा होने तक प्रोफ़ाइलें. आपको ये काम करने पड़ सकते हैं बेसलाइन प्रोफ़ाइलों का ज़बरदस्ती कंपाइलेशन होता है. यह गड़बड़ी तब नहीं होगी, जब ऐप्लिकेशन को, चल रहे डिवाइसों पर ऐप स्टोर या पैकेज मैनेजर से इंस्टॉल किया गया हो Android 9 (एपीआई 28) और उसके बाद के वर्शन में उपलब्ध है. ऐसा इसलिए, क्योंकि कंपाइलेशन इंस्टॉल करने के दौरान किया जाता है. RESULT_CODE_COMPILED_WITH_PROFILE_NON_MATCHING
- मेल न खाने वाली प्रोफ़ाइल इंस्टॉल की गई और ऐप्लिकेशन को उसके साथ कंपाइल कर दिया गया.
यह Google Play Store या पैकेज मैनेजर से इंस्टॉल करने का नतीजा है.
ध्यान दें कि यह नतीजा
RESULT_CODE_COMPILED_WITH_PROFILE
से अलग है, क्योंकि मेल न खाने वाली प्रोफ़ाइल सिर्फ़ उन तरीकों को इकट्ठा करेगी जो अब भी शेयर किए गए हैं प्रोफ़ाइल और ऐप के बीच में स्विच कर सकते हैं. प्रोफ़ाइल प्रभावी रूप से इससे छोटी है ऐसा किया जा सकता है. साथ ही, बेसलाइन में शामिल करने की तुलना में कम मेथड कंपाइल किए जाएंगे प्रोफ़ाइल पर क्लिक करें. RESULT_CODE_ERROR_CANT_WRITE_PROFILE_VERIFICATION_RESULT_CACHE_FILE
ProfileVerifier
, पुष्टि के नतीजे की कैश फ़ाइल में बदलाव नहीं कर सकता. यह काम कर सकता है ऐसा हो सकता है कि ऐप्लिकेशन फ़ोल्डर की अनुमतियों में कोई गड़बड़ी हो या डिवाइस की डिस्क में ज़रूरत के मुताबिक स्टोरेज नहीं है.RESULT_CODE_ERROR_UNSUPPORTED_API_VERSION
- ProfileVerifier
is running on an unsupported API version of Android. ProfileVerifier
सुविधा, सिर्फ़ Android 9 (एपीआई लेवल 28) और उसके बाद वाले वर्शन के साथ काम करती है. RESULT_CODE_ERROR_PACKAGE_NAME_DOES_NOT_EXIST
- A
PackageManager.NameNotFoundException
की क्वेरी करते समय ऐप्लिकेशन पैकेज के लिएPackageManager
. ऐसा शायद ही कभी होता है. आज़माएँ ऐप्लिकेशन को अनइंस्टॉल करके सब कुछ फिर से इंस्टॉल करना. RESULT_CODE_ERROR_CACHE_FILE_EXISTS_BUT_CANNOT_BE_READ
- पुष्टि के नतीजे की पिछली कैश फ़ाइल मौजूद है, लेकिन उसे पढ़ा नहीं जा सकता. यह शायद ही कभी होता हो. ऐप्लिकेशन को अनइंस्टॉल करें और सब कुछ फिर से इंस्टॉल करके देखें.
प्रोडक्शन में ProfileVerifier का इस्तेमाल करना
प्रोडक्शन में, ProfileVerifier
को इसके साथ इस्तेमाल किया जा सकता है
आंकड़ों से जुड़ी रिपोर्टिंग लाइब्रेरी, जैसे कि Firebase के लिए Google Analytics
प्रोफ़ाइल की स्थिति को दिखाने वाले ऐनलिटिक्स इवेंट जनरेट करते हैं. उदाहरण के लिए, यह
अगर कोई ऐसा नया ऐप्लिकेशन वर्शन रिलीज़ होता है जिसमें
बेसलाइन प्रोफ़ाइल.
बेसलाइन प्रोफ़ाइल को ज़बरदस्ती कंपाइल करें
अगर आपकी बेसलाइन प्रोफ़ाइलों के कंपाइलेशन स्टेटस को
RESULT_CODE_PROFILE_ENQUEUED_FOR_COMPILATION
, आपके पास तुरंत कार्रवाई करने का विकल्प है
adb
का इस्तेमाल करके कंपाइलेशन:
adb shell cmd package compile -r bg-dexopt PACKAGE_NAME
ProfileVerifier के बिना कंपाइलेशन स्थिति देखें
अगर ProfileVerifier
का इस्तेमाल नहीं किया जा रहा है, तो कंपाइलेशन की स्थिति देखने के लिए
adb
. हालांकि, यह ProfileVerifier
के बराबर ज़्यादा अहम जानकारी नहीं देता:
adb shell dumpsys package dexopt | grep -A 2 PACKAGE_NAME
adb
का इस्तेमाल करने से कुछ ऐसा मिलता है:
[com.google.samples.apps.nowinandroid.demo]
path: /data/app/~~dzJiGMKvp22vi2SsvfjkrQ==/com.google.samples.apps.nowinandroid.demo-7FR1sdJ8ZTy7eCLwAnn0Vg==/base.apk
arm64: [status=speed-profile] [reason=bg-dexopt] [primary-abi]
[location is /data/app/~~dzJiGMKvp22vi2SsvfjkrQ==/com.google.samples.apps.nowinandroid.demo-7FR1sdJ8ZTy7eCLwAnn0Vg==/oat/arm64/base.odex]
स्थिति मान प्रोफ़ाइल के कंपाइलेशन की स्थिति के बारे में बताता है और यह इनमें से एक है नीचे दिए गए मान:
कंपाइलेशन स्टेटस | मतलब |
---|---|
speed‑profile |
एक कंपाइल्ड प्रोफ़ाइल मौजूद है और इसका इस्तेमाल किया जा रहा है. |
verify |
कोई कंपाइल की गई प्रोफ़ाइल मौजूद नहीं है. |
verify
स्थिति का मतलब यह नहीं है कि APK या एएबी में कोई प्रोफ़ाइल नहीं है,
क्योंकि इसे अगले बैकग्राउंड DEX ऑप्टिमाइज़ेशन के ज़रिए कंपाइल करने के लिए जोड़ा जा सकता है
टास्क.
वजह बताने वाली वैल्यू से पता चलता है कि प्रोफ़ाइल को कंपाइल करने के लिए कौनसी चीज़ ट्रिगर होती है और इनमें से किसी एक वैल्यू का इस्तेमाल करें:
वजह | मतलब |
---|---|
install‑dm
|
बेसलाइन प्रोफ़ाइल को मैन्युअल तरीके से या Google ने कंपाइल किया था ऐप्लिकेशन इंस्टॉल होने के दौरान चलाएं. |
bg‑dexopt
|
डिवाइस का इस्तेमाल न होने पर, एक प्रोफ़ाइल को कंपाइल किया गया था. यह कोई बेसलाइन प्रोफ़ाइल हो सकती है या ऐप के इस्तेमाल के दौरान इकट्ठा की गई प्रोफ़ाइल. |
cmdline
|
adb का इस्तेमाल करके कंपाइलेशन ट्रिगर किया गया. यह कोई बेसलाइन प्रोफ़ाइल हो सकती है या ऐप के इस्तेमाल के दौरान इकट्ठा की गई प्रोफ़ाइल. |
परफ़ॉर्मेंस से जुड़ी समस्याएं
इस सेक्शन में, शर्तों को सही तरीके से परिभाषित करने और मानदंड तय करने के कुछ सबसे सही तरीके बताए गए हैं अपनी बेसलाइन प्रोफ़ाइल का इस्तेमाल करें, ताकि आप उनका ज़्यादा से ज़्यादा फ़ायदा पा सकें.
सही बेंचमार्क स्टार्टअप मेट्रिक
आपकी बेसलाइन प्रोफ़ाइल ज़्यादा असरदार होंगी, अगर आपकी स्टार्टअप मेट्रिक अच्छी तरह से परिभाषित किया गया है. दो मुख्य मेट्रिक हैं, शुरुआती डिसप्ले में लगने वाला समय (TTID) और फ़ुल डिसप्ले में लगने वाला समय (टीटीएफ़डी).
टीटीआईडी तब होता है, जब ऐप्लिकेशन अपना पहला फ़्रेम बनाता है. इसे छोटा रखना ज़रूरी है क्योंकि कुछ दिखाने से उपयोगकर्ता को पता चलता है कि ऐप्लिकेशन चल रहा है. ऐप्लिकेशन की प्रोग्रेस दिखाने वाले इंडिकेटर की मदद से, यह भी बताया जा सकता है कि ऐप्लिकेशन रिस्पॉन्सिव.
TTFD का मतलब है कि ऐप्लिकेशन के साथ असल में इंटरैक्ट किया जा सकता है. यह ज़रूरी है कि कम से कम शब्दों में जानकारी दें. अगर आपने सही सिग्नल दिया हो TTFD, आप सिस्टम को बता रहे हैं कि TTFD के लिए भेजे जाने वाला कोड का हिस्सा है. सिस्टम इस कोड को प्रोफ़ाइल में डाल सकता है पहुंच सकते हैं.
TTID और TTFD दोनों को जितना हो सके उतना कम रखें, ताकि आपका ऐप्लिकेशन रिस्पॉन्सिव हो.
सिस्टम TTID का पता लगा सकता है, उसे Logcat में दिखा सकता है, और उसकी रिपोर्ट कर सकता है
शुरुआती बेंचमार्क के बारे में बताया गया है. हालांकि, सिस्टम TTFD का पता नहीं लगा पाता और
पूरी तरह से इंटरैक्टिव होने पर, ऐप्लिकेशन को रिपोर्ट करना
राज्य. ऐसा करने के लिए, reportFullyDrawn()
पर कॉल करें या
अगर Jetpack Compose का इस्तेमाल किया जा रहा है, तो ReportDrawn
. अगर आपके पास कई
ऐप्लिकेशन के पूरी तरह से काम करने से पहले, बैकग्राउंड में होने वाले ऐसे टास्क जिन्हें पूरा करना ज़रूरी है
बनाया है, तो आप FullyDrawnReporter
का इस्तेमाल कर सकते हैं, जैसा कि बेहतर बनाएं
स्टार्टअप समय की सटीक जानकारी देना.
लाइब्रेरी प्रोफ़ाइल और कस्टम प्रोफ़ाइलें
प्रोफ़ाइलों के असर की तुलना करते समय, प्रोफ़ाइलों के असर को पहचानना मुश्किल हो सकता है लाइब्रेरी से मिली प्रोफ़ाइल से आपके ऐप्लिकेशन की प्रोफ़ाइल के फ़ायदे, जैसे कि Jetpack लाइब्रेरी. अपना APK बनाने पर 'Android Gradle प्लग इन', प्रोफ़ाइल के साथ-साथ आपकी कस्टम प्रोफ़ाइल में भी. यह अच्छा है इसका इस्तेमाल करके, पूरी परफ़ॉर्मेंस को ऑप्टिमाइज़ किया जा सकता है. इसका सुझाव आपकी रिलीज़ के बिल्ड के लिए दिया जाता है. हालांकि, इससे यह आकलन करना मुश्किल हो जाता है कि परफ़ॉर्मेंस में कितना अतिरिक्त सुधार हुआ है आपकी कस्टम प्रोफ़ाइल से.
आपके कस्टम द्वारा उपलब्ध कराए गए अतिरिक्त ऑप्टिमाइज़ेशन को मैन्युअल रूप से देखने का एक तेज़ तरीका प्रोफ़ाइल को हटाना और अपने मानदंड चलाना होगा. फिर उसे बदलें और अपना मानदंड फिर से मिलेंगे. इन दोनों की तुलना करने पर आपको इनके ज़रिए उपलब्ध कराए गए ऑप्टिमाइज़ेशन दिखेंगे केवल लाइब्रेरी प्रोफ़ाइल, लाइब्रेरी प्रोफ़ाइल और आपकी कस्टम प्रोफ़ाइल.
प्रोफ़ाइल की तुलना करने का एक ऑटोमेटिक तरीका है, बिल्ड का नया वैरिएंट बनाना
इसमें सिर्फ़ लाइब्रेरी की प्रोफ़ाइलें होती हैं, आपकी कस्टम प्रोफ़ाइल नहीं. तुलना करें
इस वैरिएंट से लेकर रिलीज़ के उन वैरिएंट तक के मानदंड जिनमें ये दोनों शामिल होते हैं
लाइब्रेरी प्रोफ़ाइल और आपकी कस्टम प्रोफ़ाइल. नीचे दिए गए उदाहरण में बताया गया है कि
का इस्तेमाल करें. कोई नया वैरिएंट जोड़ें
आपके प्रोफ़ाइल उपभोक्ता मॉड्यूल में releaseWithoutCustomProfile
नाम दिया गया है, जो कि
आम तौर पर:
Kotlin
android { ... buildTypes { ... // Release build with only library profiles. create("releaseWithoutCustomProfile") { initWith(release) } ... } ... } ... dependencies { ... // Remove the baselineProfile dependency. // baselineProfile(project(":baselineprofile")) } baselineProfile { variants { create("release") { from(project(":baselineprofile")) } } }
ग्रूवी
android { ... buildTypes { ... // Release build with only library profiles. releaseWithoutCustomProfile { initWith(release) } ... } ... } ... dependencies { ... // Remove the baselineProfile dependency. // baselineProfile ':baselineprofile"' } baselineProfile { variants { release { from(project(":baselineprofile")) } } }
ऊपर दिए गए कोड के उदाहरण में, सभी से baselineProfile
डिपेंडेंसी हटा दी गई है
और इसे सिर्फ़ release
वैरिएंट पर लागू किया जाता है. ऐसा लग सकता है
नहीं है कि लाइब्रेरी प्रोफ़ाइल्स को अभी भी जोड़ा जा रहा है जब
प्रोफ़ाइल प्रोड्यूसर मॉड्यूल पर निर्भरता को हटा दिया गया है. हालांकि, यह मॉड्यूल
जो केवल आपकी कस्टम प्रोफ़ाइल बनाने के लिए ज़िम्मेदार है. Android Gradle
प्लगिन अब भी सभी वैरिएंट के लिए चल रहा है. साथ ही, वह इन चीज़ों को शामिल करने के लिए ज़िम्मेदार है
लाइब्रेरी प्रोफ़ाइल से.
आपको प्रोफ़ाइल जनरेटर मॉड्यूल में नया वैरिएंट भी जोड़ना होगा. इसमें
उदाहरण के लिए, प्रोड्यूसर मॉड्यूल का नाम :baselineprofile
है.
Kotlin
android { ... buildTypes { ... // Release build with only library profiles. create("releaseWithoutCustomProfile") {} ... } ... }
ग्रूवी
android { ... buildTypes { ... // Release build with only library profiles. releaseWithoutCustomProfile {} ... } ... }
जब Android Studio से बेंचमार्क की सेटिंग का इस्तेमाल किया जाता है, तो
सिर्फ़ लाइब्रेरी की मदद से परफ़ॉर्मेंस मापने के लिए releaseWithoutCustomProfile
वैरिएंट
प्रोफ़ाइल बनाएं या लाइब्रेरी की मदद से परफ़ॉर्मेंस का आकलन करने के लिए, release
वैरिएंट चुनें
और कस्टम प्रोफ़ाइल बनाने की सुविधा मिलती है.
I/O-बाउंड ऐप्लिकेशन स्टार्टअप से बचें
अगर आपका ऐप्लिकेशन स्टार्टअप के दौरान बहुत ज़्यादा I/O कॉल या नेटवर्क कॉल कर रहा है, तो इससे ऐप्लिकेशन के शुरू होने में लगने वाले समय और उसके खुलने के समय, दोनों पर बुरा असर पड़ सकता है मानदंड. इन हेवीवेट कॉल में काफ़ी समय लग सकता है जो समय के साथ बदल सकते हैं और समान मानदंड की दोहराव के बीच भी हो सकते हैं. I/O आम तौर पर, नेटवर्क कॉल के मुकाबले कॉल बेहतर होते हैं. इसकी वजह यह है कि डिवाइस और डिवाइस पर मौजूद बाहरी फ़ैक्टर का असर पड़ता है. बंद करें स्टार्टअप के दौरान नेटवर्क कॉल. जहां किसी एक या अन्य तरीके का इस्तेमाल करना मुमकिन नहीं है, वहां I/O का इस्तेमाल करें.
हमारा सुझाव है कि आप अपने ऐप्लिकेशन के आर्किटेक्चर को, बिना नेटवर्क के ऐप्लिकेशन शुरू करने की सुविधा दें या I/O कॉल, भले ही उसका इस्तेमाल मानदंड स्टार्टअप के समय ही क्यों न किया गया हो. इससे यह पक्का करने में मदद मिलती है कि आपके मानदंड की अलग-अलग बार-बार की जाने वाली क्षमताओं में सबसे कम बदलाव होगा.
अगर आपका ऐप्लिकेशन Hilt का इस्तेमाल करता है, तो आपके पास नकली I/O-बाउंड वैल्यू उपलब्ध कराने का विकल्प है माइक्रोबेंचमार्क और Hilt में मानक तय करने के बाद, उन्हें लागू किया जाता है.
उपयोगकर्ता की सभी अहम गतिविधियां कवर करें
यह ज़रूरी है कि उसमें उपयोगकर्ता की सभी अहम गतिविधियों को सटीक तरीके से कवर किया जाए बेसलाइन प्रोफ़ाइल जनरेशन. उपयोगकर्ता की ऐसी गतिविधियां जो कवर नहीं की गई हैं इसे बेसलाइन प्रोफ़ाइल से बेहतर बनाया गया है. सबसे असरदार बेसलाइन प्रोफ़ाइल में सभी स्टार्टअप उपयोगकर्ता की सामान्य गतिविधियां, परफ़ॉर्मेंस को लेकर संवेदनशील इन-ऐप्लिकेशन उपयोगकर्ता जैसे कि स्क्रोलिंग लिस्ट.