اجرای Winscope

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

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

برای راه‌اندازی رایانه شخصی خود برای اجرای ردیاب Winscope، این مراحل را دنبال کنید:

  1. بارگیری منبع Android.
  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 جدیدترین نسخه
‫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، کارهای زیر را انجام دهید:

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

    cd development/tools/winscope
    ./scripts/update_intdef_mappings.sh
    
  2. بااستفاده از فرمان git commit، تغییرات را در src/common/intDefMapping.json اعمال کنید و بااستفاده از فرمان repo upload، آن‌ها را بارگذاری کنید.

اگر این دستورگان دردسترس نیست، این مراحل را دنبال کنید تا @IntDef نقشه‌بندی را به‌صورت دستی از دایرکتوری ریشه Android خود ($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 ایجاد می‌کنید، protoها را در Winscope بااستفاده از npm run build:protos بازهمگردانی کنید.

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

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

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