Winscope را اجرا کنید

ردیابی Winscope بخشی از چارچوب اندروید است. این صفحه مراحل مورد نیاز برای دانلود، ساخت و اجرای نمایشگر ردیابی Winscope را به صورت محلی شرح می‌دهد.

ساخت وینسکو به صورت محلی

برای تنظیم رایانه خود برای اجرای ردیاب Winscope، این مراحل را دنبال کنید:

  1. سورس اندروید را دانلود کنید .
  2. به پوشه Winscope بروید:

    cd development/tools/winscope
    
  3. نصب وابستگی‌ها با استفاده از:

    npm install
    

    برای دیدن لیستی از دستورات موجود، npm run را اجرا کنید.

  4. ساخت تمام اهداف پرود و تست با استفاده از:

    npm run build:prod
    
  5. اجرای 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 ، مراحل زیر را انجام دهید:

  1. اسکریپت update_intdef_mappings.sh از دایرکتوری development/tools/winscope/scripts/ در درخت اندروید محلی خود اجرا کنید. این اسکریپت فرآیند حاشیه‌نویسی را آغاز می‌کند که آخرین مقادیر @IntDef را از کد استخراج کرده و intDefMapping.json را به‌روزرسانی می‌کند:

    cd development/tools/winscope
    ./scripts/update_intdef_mappings.sh
    
  2. تغییرات را با استفاده از دستور git commit در src/common/intDefMapping.json ثبت (commit) کنید و با استفاده از دستور repo upload آنها را آپلود کنید.

اگر اسکریپت در دسترس نیست، این مراحل را برای به‌روزرسانی دستی نگاشت @IntDef از دایرکتوری ریشه اندروید خود ( $ANDROID_BUILD_TOP ) دنبال کنید:

  1. برای اجرای پیش‌پردازنده‌ی حاشیه‌نویسی، framework-minus-apex-intdefs را بسازید:

    m framework-minus-apex-intdefs
    
  2. فایل 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
    
  3. تغییرات را با استفاده از 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

    • این زمانی رخ می‌دهد که فایل ردیابی با یک تعریف اولیه جدید، حاوی فیلدهای مورد نیاز جدید، ایجاد شده باشد.

      1. مطمئن شوید که مسیر را روی نسخه صحیح Winscope (master، S یا R) باز می‌کنید.
      2. اگر فیلد جدید را در proto ایجاد کردید، protos را در Winscope با استفاده از npm run build:protos دوباره کامپایل کنید.

  • برخی از نسخه‌های وابستگی نصب‌شده اشتباه هستند (ساخت با شکست مواجه می‌شود)

    • تغییرات را به package.json و package-lock.json برگردانید. node_modules را حذف کنید. دوباره npm install اجرا کنید.
  • من یک فیلد جدید به یکی از فایل‌های proto اضافه کردم. چگونه می‌توانم آن را نمایش دهم؟

    • Winscope از تعاریف proto از زمان کامپایل خود استفاده می‌کند، بنابراین فیلدهای جدید به طور پیش‌فرض نمایش داده نمی‌شوند. برای نمایش فیلدهای جدید، protos را با استفاده از npm run build:protos بازسازی کنید.