از 27 مارس 2025، توصیه می کنیم از android-latest-release به جای aosp-main برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
ردیابی Winscope بخشی از چارچوب اندروید است. در این صفحه مراحل مورد نیاز برای دانلود، ساخت و اجرای نمایشگر ردیابی Winscope به صورت محلی شرح داده شده است.
Winscope را به صورت محلی بسازید
مراحل زیر را برای تنظیم رایانه شخصی خود برای اجرای ردیاب Winscope دنبال کنید:
برای مشاهده لیستی از دستورات موجود، اجرا کنید: npm run
تمام اهداف تولید و آزمایش را با استفاده از:
npm run build:prod
Winscope را با استفاده از:
npm run start
ساخت قطعات جداگانه
با استفاده از دستورات زیر می توانید بخش های جداگانه Winscope را به طور جداگانه بسازید:
فرمان
توضیحات
build:trace_processor
آخرین نسخه را بررسی و بازسازی می کند trace_processor Perfetto's .
build:protos
تعاریف اولیه را دوباره کامپایل می کند.
تست ها را اجرا کنید
Winscope شامل تست های واحد و پایان به انتها است. برای اجرای آنها از npm run <command> استفاده کنید:
فرمان
توضیحات
test:unit:ci
تست های واحد را در قالبی کمتر پرمخاطب برای CI اجرا می کند یا از قبل قلاب را ارسال کنید.
test:unit:dev
تست های واحد را در قالبی پرمخاطب تر اجرا می کند توسعه محلی این حالت مراقب تغییرات و به طور خودکار تست های صحیح را دوباره اجرا می کند.
test:e2e
آزمایشهای سرتاسری را اجرا میکند، مانند آزمایشهای مربوط به پروتکل متقابل ابزار
test:presubmit:quiet
همه آزمونهای واحد پیشارسال، لینترها و نمودارها را میسازد تجزیه و تحلیل در قالب کمتر پرمخاطب برای CI یا از پیش ارسال کنید قلاب
test:presubmit
همه آزمونهای واحد پیشارسال، لینترها و نمودارها را میسازد تجزیه و تحلیل در قالب مفصل تر برای محلی توسعه
test:all
تمام تست ها (واحد و سرتاسر)، لینترها و تجزیه و تحلیل نمودار در قالبی مفصل تر برای محلی توسعه
نگاشت @IntDef را به روز کنید
@IntDef یک حاشیه نویسی است که در اندروید برای محدود کردن مقادیر احتمالی یک عدد صحیح استفاده می شود. Winscope از نقشه برداری از این حاشیه نویسی ها برای نمایش نام مقدار به جای عدد صحیح استفاده می کند.
برای به روز رسانی نگاشت @IntDef ، موارد زیر را انجام دهید:
ساخت :framework-minus-apex-intdefs برای اجرای پیش پردازنده حاشیه نویسی:
mp:framework-minus-apex-intdefs
فایل intDefMapping.json ایجاد شده را در مخزن از پیش ساخته شده کپی کنید:
تغییرات را در Winscope با استفاده از repo upload آپلود کنید.
دستورات دیگر
علاوه بر ساخت و آزمایش، اسکریپت های 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) باز می کنید.
اگر فیلد جدید را روی پروتو ایجاد کردید، پروتوها را در Winscope با استفاده از npm run build:protos دوباره کامپایل کنید.
برخی از نسخه های وابستگی نصب شده اشتباه هستند (ساخت با شکست مواجه شد)
تغییرات را به package.json و package-lock.json برگردانید. node_modules را حذف کنید. npm install دوباره اجرا کنید.
من یک فیلد جدید به یکی از فایل های پروتو اضافه کردم. چگونه آن را نمایش دهم؟
Winscope از تعاریف اولیه از زمان کامپایل استفاده می کند، بنابراین فیلدهای جدید به طور پیش فرض ظاهر نمی شوند. برای نمایش فیلدهای جدید، پروتوها را با استفاده از npm run build:protos بازسازی کنید.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-08-24 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","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-08-24 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Run Winscope\n\nWinscope 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----------------------\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--------------------\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\n---------\n\n| **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\n### Update @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--------------\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------------\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`."]]