כדי לראות את רשימת הפקודות הזמינות, מריצים את הפקודה: npm run
כדי ליצור את כל יעדי הייצור והבדיקה, משתמשים בפקודה:
npm run build:prod
מריצים את Winscope באמצעות:
npm run start
יצירת חלקים נפרדים
אפשר ליצור חלקים נפרדים של Winscope בנפרד באמצעות הפקודות הבאות:
פקודה
תיאור
build:trace_processor
הכלי מאחזר ובונה מחדש את הגרסה האחרונה של Perfettotrace_processor.
build:protos
הקומפילציה של הגדרות ה-proto מתבצעת מחדש.
הרצת בדיקות
Winscope מכיל בדיקות יחידה ובדיקות מקצה לקצה. כדי להריץ אותן, משתמשים ב-npm run
<command>:
פקודה
תיאור
test:unit:ci
מריץ את בדיקות היחידה בפורמט פחות מפורט עבור CI
או presubmit hook.
test:unit:dev
מריץ את בדיקות היחידה בפורמט מפורט יותר עבור
פיתוח מקומי. במצב הזה המערכת עוקבת אחרי שינויים ו
מריצה מחדש באופן אוטומטי את הבדיקות הנכונות.
test:e2e
מריצים את הבדיקות מקצה לקצה, כמו אלה של
פרוטוקול בין כלים.
test:presubmit:quiet
יוצר את כל בדיקות היחידות לפני השליחה, את כלי ה-lint ואת ניתוח הגרף
בפורמט פחות מפורט עבור CI או ווֹבְּהוּק לפני השליחה .
test:presubmit
יוצר את כל בדיקות היחידה לפני שליחת הקוד, את כלי ה-lint ואת ניתוח הגרף
בפורמט מפורט יותר לפיתוח מקומי.
test:all
מריץ את כל הבדיקות (יחידה וקצה לקצה), את כלי ה-lint ואת
ניתוח הגרפים בפורמט מפורט יותר לפיתוח
מקומי.
בדיקות מקצה לקצה
לפני שמריצים בדיקות מקצה לקצה, צריך להפעיל את הכלי המרוחק ולהתקין את הגרסה הנכונה של מנהל ההתקן של Chrome. בקטע הקוד הבא, הפקודה
run test:e2e מתקינה באופן אוטומטי את מנהל ההתקן של Chrome.
בנוסף לבנייה ולבדיקות, סקריפטים של 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
המצב הזה קורה כשקובץ המעקב נוצר עם הגדרת פרוטו חדשה, שמכילה שדות חובה חדשים.
חשוב לוודא שפותחים את ה-trace בגרסה הנכונה של Winscope (master, S או R).
אם יוצרים את השדה החדש ב-proto, צריך לקמפל מחדש את ה-proto ב-Winscope באמצעות npm run build:protos.
חלק מגרסאות התלות שהותקנו שגויות (הבנייה נכשלת)
חזרה לגרסה הקודמת של package.json ושל package-lock.json. הסרה של node_modules. מריצים שוב את npm install.
הוספתי שדה חדש לאחד מקובצי ה-proto. איך מציגים את זה?
Winscope משתמש בהגדרות פרוטו מהרגע שבו הוא קומפל, ולכן שדות חדשים לא יופיעו כברירת מחדל. כדי להציג שדות חדשים, צריך לבנות מחדש את קובצי ה-proto באמצעות npm run build:protos.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-09-03 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-09-03 (שעון UTC)."],[],[],null,["Winscope tracing is part of the Android framework. This page outlines the\nsteps required to download, build, and run the Winscope trace viewer locally.\n\nBuild Winscope locally\n\nFollow these steps to set up your PC to run the Winscope tracer:\n\n1. [Download the Android source](/docs/setup/build/building).\n2. Navigate to the Winscope folder:\n\n cd development/tools/winscope\n\n3. Install dependencies using:\n\n npm install\n\n To see a list of available commands, run: `npm run`\n4. Build all prod and test targets using:\n\n npm run build:prod\n\n5. Run Winscope using:\n\n npm run start\n\n| **Note:** You can also download and build Winscope to host on a standard web server to get a shareable link to the tool.\n\nBuild separate parts\n\nYou can build individual parts of Winscope separately using the following\ncommands:\n\n| Command | Description |\n|-------------------------|-----------------------------------------------------------------------------|\n| `build:trace_processor` | Checks out and rebuilds the latest version of Perfetto's `trace_processor`. |\n| `build:protos` | Recompiles the proto definitions. |\n\nRun tests **Tip:** Winscope doesn't build on Soong and can't be built by Tradefed, so it's recommended to have a local Git hook to the tests in your local environment.\n\nWinscope contains unit and end-to-end tests. To run them use `npm run\n\u003ccommand\u003e`:\n\n| Command | Description |\n|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|\n| `test:unit:ci` | Runs the unit tests in a less verbose format for CI or presubmit hook. |\n| `test:unit:dev` | Runs the unit tests in a more verbose format for local development. This mode watches for changes and automatically reruns the correct tests. |\n| `test:e2e` | Runs the end-to-end tests, such as those for the cross-tool protocol. |\n| `test:presubmit:quiet` | Builds all presubmit unit tests, linters, and graph analysis in a less verbose format for CI or presubmit hook. |\n| `test:presubmit` | Builds all presubmit unit tests, linters, and graph analysis in a more verbose format for local development. |\n| `test:all` | Runs all tests (unit and end-to-end), linters, and graph analysis in a more verbose format for local development. |\n\nEnd-to-end tests\n\nBefore running end-to-end tests, you must start the remote tool and install the\ncorrect version of the Chrome driver. In the following code snippet, the\n`run test:e2e` command automatically installs the Chrome driver. \n\n $ npm run start\n $ npm run start:remote_tool_mock\n $ npm run test:e2e\n\nThe following table lists the necessary commands and their descriptions. To run\nthem use `npm run `\u003cvar translate=\"no\"\u003ecommand\u003c/var\u003e:\n\n| Command | Description |\n|--------------------------|---------------------------------------------------------------|\n| `start:remote_tool_mock` | Starts the remote tool mock for testing cross tool protocol. |\n| `install:chromedriver` | Installs the Chrome driver necessary to run end-to-end tests. |\n\nUpdate @IntDef mapping\n\n`@IntDef` is an annotation used in Android to restrict the possible values of an\ninteger. Winscope uses a mapping of these annotations to display the name of the\nvalue instead of the integer.\n\nTo update the `@IntDef` mapping, do the following:\n\n1. Build `:framework-minus-apex-intdefs` for the annotation preprocessor to run:\n\n mp :framework-minus-apex-intdefs\n\n2. Copy the generated `intDefMapping.json` file to the prebuilts repository:\n\n $ 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) \u003e ./development/tools/winscope/src/common/intDefMapping.json\n\n3. Upload the changes in Winscope using `repo upload`.\n\nOther commands\n\nIn addition to build and tests, Winscope scripts contain other capabilities, as\nshown in the table. To run them use `npm run `\u003cvar translate=\"no\"\u003ecommand\u003c/var\u003e:\n\n| Command | Description |\n|---------------------------|----------------------------------------------------------------|\n| `format:check` | Checks for code formatting issues using `prettier`. |\n| `format:fix` | Checks and auto fixes code formatting issues using `prettier`. |\n| `eslint:check` | Checks for code formatting issues using `eslint`. |\n| `eslint:fix` | Checks and auto fixes code formatting issues using `eslint`. |\n| `tslint:check` | Checks for code formatting issues using `tslint`. |\n| `tslint:fix` | Checks and auto fixes code formatting issues using `tslint`. |\n| `deps_graph:check_cycles` | Analyzes the code for cyclical dependencies. |\n\nTroubleshoot\n\nUse the following tips for troubleshooting:\n\n- **Error `ProtocolError: missing required '\u003cFIELD\u003e'` or `TypeError: Cannot\n read property '\u003cPROP\u003e' of null`**\n\n - This occurs when the trace file was created with a new proto definition,\n containing new *required* fields.\n\n 1. Make sure you're opening the trace on the correct Winscope version (master, S, or R).\n 2. If you create the new field on the proto, recompile the protos in\n Winscope using `npm run build:protos`.\n\n | **Note:** You shouldn't need a new required field, because the protos should be backward compatible.\n- **Some installed dependency versions are wrong (build fails)**\n\n - Revert changes to `package.json` and `package-lock.json`. Remove `node_modules`. Run `npm install` again.\n- **I added a new field to one of the proto files. How do I display it?**\n\n - Winscope uses the proto definitions from when it was compiled, so new fields won't appear by default. To show new fields, rebuild the protos using `npm run build:protos`."]]