ردیابی Winscope بخشی از چارچوب اندروید است. این صفحه مراحل مورد نیاز برای دانلود، ساخت و اجرای نمایشگر ردیابی Winscope را به صورت محلی شرح میدهد.
ساخت وینسکو به صورت محلی
برای تنظیم رایانه خود برای اجرای ردیاب Winscope، این مراحل را دنبال کنید:
- سورس اندروید را دانلود کنید .
به پوشه Winscope بروید:
cd development/tools/winscopeنصب وابستگیها با استفاده از:
npm installبرای دیدن لیستی از دستورات موجود،
npm runرا اجرا کنید.ساخت تمام اهداف پرود و تست با استفاده از:
npm run build:prodاجرای Winscope با استفاده از:
npm run start
ساخت قطعات جداگانه
شما میتوانید بخشهای مجزای Winscope را با استفاده از دستورات زیر به صورت جداگانه بسازید:
| فرماندهی | توضیحات |
|---|---|
build:trace_processor | آخرین نسخه را بررسی و بازسازی میکندtrace_processor پرفتو. |
build:protos | تعاریف پروتو را دوباره کامپایل میکند. |
اجرای تستها
Winscope شامل تستهای واحد و سرتاسری است. برای اجرای آنها npm run <command> استفاده کنید:
| فرماندهی | توضیحات |
|---|---|
test:unit:ci | تستهای واحد را در قالبی سادهتر برای CI اجرا میکند. یا قلاب را از قبل ارسال کنید. |
test:unit:dev | تستهای واحد را در قالبی مفصلتر برای ... اجرا میکند. توسعه محلی. این حالت تغییرات را رصد میکند و به طور خودکار تستهای صحیح را دوباره اجرا میکند. |
test:e2e | تستهای سرتاسری، مانند تستهای مربوط به پروتکل بین ابزاری. |
test:presubmit:quiet | تمام تستهای واحد، لینترها و گرافهای پیش از ارسال را میسازد. تجزیه و تحلیل در قالبی سادهتر برای CI یا ارسال اولیه قلاب |
test:presubmit | تمام تستهای واحد، لینترها و گرافهای پیش از ارسال را میسازد. تجزیه و تحلیل در قالبی مفصلتر برای دادههای محلی توسعه. |
test:all | تمام تستها (واحد و سرتاسری)، لینترها و ... را اجرا میکند. تحلیل نمودار در قالبی مفصلتر برای دادههای محلی توسعه. |
آزمونهای پایان به پایان
قبل از اجرای تستهای سرتاسری، باید ابزار ریموت را اجرا کرده و نسخه صحیح درایور کروم را نصب کنید. در قطعه کد زیر، دستور run test:e2e به طور خودکار درایور کروم را نصب میکند.
$ npm run start
$ npm run start:remote_tool_mock
$ npm run test:e2e
جدول زیر دستورات لازم و توضیحات آنها را فهرست میکند. برای اجرای آنها npm run command استفاده کنید:
| فرماندهی | توضیحات |
|---|---|
start:remote_tool_mock | اجرای آزمایشی ابزار از راه دور برای آزمایش پروتکل ابزار متقابل. |
install:chromedriver | درایور کروم لازم برای اجرای تستهای سرتاسری را نصب میکند. |
بهروزرسانی نگاشت @IntDef
@IntDef یک حاشیهنویسی است که در اندروید برای محدود کردن مقادیر ممکن برای یک عدد صحیح استفاده میشود. Winscope از نگاشت این حاشیهنویسیها برای نمایش نام مقدار به جای عدد صحیح استفاده میکند.
اگر مقادیر جدید @IntDef به چارچوب اندروید اضافه شوند اما در Winscope بهروزرسانی نشوند، به جای رشتههای توصیفی، به صورت مقادیر صحیح خام نمایش داده میشوند. برای رفع این مشکل، فایل نگاشت IntDef ( development/tools/winscope/src/common/intDefMapping.json ) را بهروزرسانی کنید.
برای بهروزرسانی خودکار نگاشت @IntDef ، مراحل زیر را انجام دهید:
اسکریپت
update_intdef_mappings.shاز دایرکتوریdevelopment/tools/winscope/scripts/در درخت اندروید محلی خود اجرا کنید. این اسکریپت فرآیند حاشیهنویسی را آغاز میکند که آخرین مقادیر@IntDefرا از کد استخراج کرده وintDefMapping.jsonرا بهروزرسانی میکند:cd development/tools/winscope ./scripts/update_intdef_mappings.shتغییرات را با استفاده از دستور
git commitدرsrc/common/intDefMapping.jsonثبت (commit) کنید و با استفاده از دستورrepo uploadآنها را آپلود کنید.
اگر اسکریپت در دسترس نیست، این مراحل را برای بهروزرسانی دستی نگاشت @IntDef از دایرکتوری ریشه اندروید خود ( $ANDROID_BUILD_TOP ) دنبال کنید:
برای اجرای پیشپردازندهی حاشیهنویسی،
framework-minus-apex-intdefsرا بسازید:m 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.jsonتغییرات را با استفاده از
repo 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 (master، S یا R) باز میکنید.
اگر فیلد جدید را در proto ایجاد کردید، protos را در Winscope با استفاده از
npm run build:protosدوباره کامپایل کنید.
برخی از نسخههای وابستگی نصبشده اشتباه هستند (ساخت با شکست مواجه میشود)
- تغییرات را به
package.jsonوpackage-lock.jsonبرگردانید.node_modulesرا حذف کنید. دوبارهnpm installاجرا کنید.
- تغییرات را به
من یک فیلد جدید به یکی از فایلهای proto اضافه کردم. چگونه میتوانم آن را نمایش دهم؟
- Winscope از تعاریف proto از زمان کامپایل خود استفاده میکند، بنابراین فیلدهای جدید به طور پیشفرض نمایش داده نمیشوند. برای نمایش فیلدهای جدید، protos را با استفاده از
npm run build:protosبازسازی کنید.
- Winscope از تعاریف proto از زمان کامپایل خود استفاده میکند، بنابراین فیلدهای جدید به طور پیشفرض نمایش داده نمیشوند. برای نمایش فیلدهای جدید، protos را با استفاده از