ردیابی Winscope بخشی از چارچوب Android است. این صفحه مراحل لازم برای بارگیری، ساختن، و اجرای محلی بیننده ردیابی Winscope را شرح میدهد.
ساختن Winscope بهصورت محلی
برای راهاندازی رایانه شخصی خود برای اجرای ردیاب Winscope، این مراحل را دنبال کنید:
- بارگیری منبع Android.
به پوشه Winscope پیمایش کنید:
cd development/tools/winscopeنصب وابستگیها بااستفاده از:
npm installبرای دیدن فهرست فرمانهای دردسترس، این دستور را اجرا کنید:
npm runساختن همه هدفهای تولید و آزمایش بااستفاده از:
npm run build:prodWinscope را بااستفاده از این موارد اجرا کنید:
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 |
Builds all presubmit unit tests, linters, and graph analysis in a less verbose format for CI or presubmit hook. |
test:presubmit |
همه آزمونهای واحد پیشارسال، lint، و تحلیل گراف را در قالب پرحرفتری برای توسعه محلی میسازد. |
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 به چارچوب Android اضافه شود اما در Winscope بهروزرسانی نشود، بهجای رشتههای توصیفی، بهعنوان مقادیر عدد صحیح خام نمایش داده میشوند. برای رفع این مشکل، فایل نگاشت IntDef را بهروز کنید
(development/tools/winscope/src/common/intDefMapping.json).
برای بهروزرسانی خودکار نگاشت @IntDef، کارهای زیر را انجام دهید:
برنامه
update_intdef_mappings.shرا از دایرکتوریdevelopment/tools/winscope/scripts/در درخت Android محلی خود اجرا کنید. این دستورگان فرایند گزارمان را راهاندازی میکند که جدیدترین مقادیر@IntDefرا از کد استخراج میکند وintDefMapping.jsonرا بهروز میکند:cd development/tools/winscope ./scripts/update_intdef_mappings.shبااستفاده از فرمان
git commit، تغییرات را درsrc/common/intDefMapping.jsonاعمال کنید و بااستفاده از فرمانrepo upload، آنها را بارگذاری کنید.
اگر این دستورگان دردسترس نیست، این مراحل را دنبال کنید تا @IntDef
نقشهبندی را بهصورت دستی از دایرکتوری ریشه Android خود ($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 ایجاد میکنید، protoها را در Winscope بااستفاده از
npm run build:protosبازهمگردانی کنید.
برخیاز نسخههای وابستگی نصبشده اشتباه است (ساخت ناموفق است)
- تغییرات
package.jsonوpackage-lock.jsonرا برگردانید. برداشتنnode_modules.npm installرا دوباره اجرا کنید.
- تغییرات
فیلد جدیدی به یکی از فایلهای پروتکل اضافه کردم. چگونه آن را نمایش دهم؟
- Winscope از تعاریف proto مربوط به زمان کامپایل شدن استفاده میکند، بنابراین فیلدهای جدید بهطور پیشفرض نشان داده نمیشوند. برای نمایش فیلدهای جدید، پروتوها را بااستفاده از
npm run build:protosبازسازی کنید.
- Winscope از تعاریف proto مربوط به زمان کامپایل شدن استفاده میکند، بنابراین فیلدهای جدید بهطور پیشفرض نشان داده نمیشوند. برای نمایش فیلدهای جدید، پروتوها را بااستفاده از