Winscope ट्रेसिंग, Android फ़्रेमवर्क का हिस्सा है. इस पेज पर, Winscope Trace Viewer को स्थानीय तौर पर डाउनलोड, बिल्ड, और चलाने का तरीका बताया गया है.
Winscope को लोकल तौर पर बनाना
Winscope ट्रेसर चलाने के लिए, अपने पीसी को सेट अप करने के लिए यह तरीका अपनाएं:
- Android सोर्स कोड डाउनलोड करें.
Winscope फ़ोल्डर पर जाएं:
cd development/tools/winscopeइनका इस्तेमाल करके डिपेंडेंसी इंस्टॉल करें:
npm installउपलब्ध कमांड की सूची देखने के लिए, यह कमांड चलाएं:
npm runइनका इस्तेमाल करके, सभी प्रॉड और टेस्ट टारगेट बनाएं:
npm run build:prodइनका इस्तेमाल करके Winscope चलाएं:
npm run start
अलग-अलग हिस्से बनाना
इन कमांड का इस्तेमाल करके, Winscope के अलग-अलग हिस्सों को अलग-अलग बनाया जा सकता है:
| निर्देश | ब्यौरा |
|---|---|
build:trace_processor |
यह Perfetto trace_processor के नए वर्शन को चेक आउट और फिर से बनाता है. |
build:protos |
यह कुकी, प्रोटो की परिभाषाओं को फिर से कंपाइल करती है. |
टेस्ट चलाना
Winscope में यूनिट और एंड-टू-एंड टेस्ट शामिल होते हैं. इन्हें चलाने के लिए, npm run
<command> का इस्तेमाल करें:
| निर्देश | ब्यौरा |
|---|---|
test:unit:ci |
यह CI या प्रीसबमिट हुक के लिए, यूनिट टेस्ट को कम शब्दों वाले फ़ॉर्मैट में चलाता है. |
test:unit:dev |
यह लोकल डेवलपमेंट के लिए, यूनिट टेस्ट को ज़्यादा जानकारी वाले फ़ॉर्मैट में चलाता है. यह मोड बदलावों पर नज़र रखता है और सही टेस्ट को अपने-आप फिर से चलाता है. |
test:e2e |
यह एंड-टू-एंड टेस्ट चलाता है. जैसे, क्रॉस-टूल प्रोटोकॉल के लिए टेस्ट. |
test:presubmit:quiet |
यह CI या presubmit hook के लिए, सभी presubmit यूनिट टेस्ट, लिंटर, और graph analysis को कम शब्दों में तैयार करता है. |
test:presubmit |
यह लोकल डेवलपमेंट के लिए, ज़्यादा जानकारी वाले फ़ॉर्मैट में सभी प्रीसबमिट यूनिट टेस्ट, लिंटर, और ग्राफ़ विश्लेषण बनाता है. |
test:all |
यह सभी टेस्ट (यूनिट और एंड-टू-एंड), लिंटर, और स्थानीय डेवलपमेंट के लिए ज़्यादा जानकारी वाले फ़ॉर्मैट में ग्राफ़ विश्लेषण करता है. |
एंड-टू-एंड टेस्ट
एंड-टू-एंड टेस्ट चलाने से पहले, आपको रिमोट टूल शुरू करना होगा. साथ ही, Chrome ड्राइवर का सही वर्शन इंस्टॉल करना होगा. यहां दिए गए कोड स्निपेट में, run test:e2e कमांड Chrome ड्राइवर को अपने-आप इंस्टॉल कर देती है.
$ npm run start
$ npm run start:remote_tool_mock
$ npm run test:e2e
यहां दी गई टेबल में ज़रूरी कमांड और उनके बारे में जानकारी दी गई है. इन्हें चलाने के लिए, npm run command का इस्तेमाल करें:
| निर्देश | ब्यौरा |
|---|---|
start:remote_tool_mock |
यह क्रॉस टूल प्रोटोकॉल की जांच करने के लिए, रिमोट टूल मॉक शुरू करता है. |
install:chromedriver |
यह Chrome ड्राइवर को इंस्टॉल करता है. यह ड्राइवर, शुरू से आखिर तक टेस्ट चलाने के लिए ज़रूरी होता है. |
@IntDef मैपिंग अपडेट करना
@IntDef एक एनोटेशन है. इसका इस्तेमाल Android में, पूर्णांक की संभावित वैल्यू को सीमित करने के लिए किया जाता है. Winscope, इन एनोटेशन की मैपिंग का इस्तेमाल करता है, ताकि पूर्णांक के बजाय वैल्यू का नाम दिखाया जा सके.
@IntDef मैपिंग अपडेट करने के लिए, यह तरीका अपनाएं:
एनोटेशन प्रीप्रोसेसर को चलाने के लिए,
:framework-minus-apex-intdefsबनाएं:mp :framework-minus-apex-intdefsजनरेट की गई
intDefMapping.jsonफ़ाइल को प्रीबिल्ट रिपॉज़िटरी में कॉपी करें:$ python3 -c 'import sys,json,collections; print(json.dumps(collections.OrderedDict(sorted(collections.ChainMap(*map(lambda x:json.load(open(x)), sys.argv[1:])).items())), indent=2))' $(find out/soong/.intermediates/frameworks/base -iname intDefMapping.json) > ./development/tools/winscope/src/common/intDefMapping.jsonrepo uploadका इस्तेमाल करके, Winscope में बदलाव अपलोड करें.
दूसरे निर्देश
बिल्ड और टेस्ट के अलावा, Winscope स्क्रिप्ट में अन्य सुविधाएं भी होती हैं. इनके बारे में टेबल में बताया गया है. इन्हें चलाने के लिए, npm run command का इस्तेमाल करें:
| निर्देश | ब्यौरा |
|---|---|
format:check |
यह prettier का इस्तेमाल करके, कोड फ़ॉर्मैट करने से जुड़ी समस्याओं की जांच करता है. |
format:fix |
यह prettier का इस्तेमाल करके, कोड फ़ॉर्मैट करने से जुड़ी समस्याओं की जांच करता है और उन्हें अपने-आप ठीक करता है. |
eslint:check |
यह eslint का इस्तेमाल करके, कोड फ़ॉर्मैट करने से जुड़ी समस्याओं की जांच करता है. |
eslint:fix |
यह eslint का इस्तेमाल करके, कोड फ़ॉर्मैट करने से जुड़ी समस्याओं की जांच करता है और उन्हें अपने-आप ठीक करता है. |
tslint:check |
यह tslint का इस्तेमाल करके, कोड फ़ॉर्मैट करने से जुड़ी समस्याओं की जांच करता है. |
tslint:fix |
यह tslint का इस्तेमाल करके, कोड फ़ॉर्मैट करने से जुड़ी समस्याओं की जांच करता है और उन्हें अपने-आप ठीक करता है. |
deps_graph:check_cycles |
यह कुकी, साइक्लिकल डिपेंडेंसी के लिए कोड का विश्लेषण करती है. |
समस्या हल करें
समस्या हल करने के लिए, यहां दी गई सलाह का इस्तेमाल करें:
गड़बड़ी
ProtocolError: missing required '<FIELD>'याTypeError: Cannot read property '<PROP>' of nullऐसा तब होता है, जब नई प्रोटो डेफ़िनिशन के साथ ट्रेस फ़ाइल बनाई गई हो. इसमें ज़रूरी फ़ील्ड शामिल होते हैं.
- पक्का करें कि आपने Winscope के सही वर्शन (मास्टर, S या R) पर ट्रेस खोला हो.
अगर आपने प्रोटो पर नया फ़ील्ड बनाया है, तो
npm run build:protosका इस्तेमाल करके Winscope में प्रोटो को फिर से कंपाइल करें.
डिपेंडेंसी के कुछ इंस्टॉल किए गए वर्शन गलत हैं (बिल्ड नहीं हो सका)
package.jsonऔरpackage-lock.jsonमें किए गए बदलावों को पहले जैसा करें.node_modulesहटाएं.npm installको फिर से चलाएं.
मैंने किसी एक प्रोटो फ़ाइल में नया फ़ील्ड जोड़ा है. मैं इसे कैसे दिखाऊं?
- Winscope, कंपाइल किए जाने के समय की प्रोटो परिभाषाओं का इस्तेमाल करता है. इसलिए, नए फ़ील्ड डिफ़ॉल्ट रूप से नहीं दिखेंगे. नए फ़ील्ड दिखाने के लिए,
npm run build:protosका इस्तेमाल करके प्रोटो को फिर से बनाएं.
- Winscope, कंपाइल किए जाने के समय की प्रोटो परिभाषाओं का इस्तेमाल करता है. इसलिए, नए फ़ील्ड डिफ़ॉल्ट रूप से नहीं दिखेंगे. नए फ़ील्ड दिखाने के लिए,