تشغيل 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 تتحقّق من أحدث إصدار من
trace_processor في Perfetto وتعيد إنشائه.
build:protos تعيد تجميع تعريفات proto.

إجراء الاختبارات

يحتوي Winscope على اختبارات الوحدة والاختبارات الشاملة. لتنفيذها، استخدِم npm run <command>:

الأمر الوصف
test:unit:ci لتشغيل اختبارات الوحدة بتنسيق أقل تفصيلاً لدمج الإصدارات التلقائية
أو أداة الربط المُسبَق لإرسال المحتوى
test:unit:dev لتشغيل اختبارات الوحدات بتنسيق أكثر تفصيلاً
للتطوير على الجهاز يراقب هذا الوضع التغييرات و
يعيد تلقائيًا إجراء الاختبارات الصحيحة.
test:e2e تشغيل الاختبارات الشاملة، مثل الاختبارات المتعلقة
ببروتوكول الأدوات المتعددة
test:presubmit:quiet تُنشئ جميع اختبارات الوحدة وأدوات فحص الأخطاء وتحليل الرسم البياني
قبل إرسال الرمز البرمجي بتنسيق أقل تفصيلاً لعمليات التكامل المستمر أو ميزة
presubmithook.
test:presubmit إنشاء جميع الاختبارات الوحداتية وأدوات التدقيق وتحليل
الرسوم البيانية قبل إرسالها بتنسيق أكثر تفصيلاً
للتحقّق من التطوير على الجهاز
test:all يُجري جميع الاختبارات (الاختبارات على مستوى الوحدة والاختبارات الشاملة) وأدوات التدقيق و
تحليل الرسوم البيانية بتنسيق أكثر تفصيلاً لعملية
التطوير على الجهاز.

تعديل تعيين @IntDef

@IntDef هو تعليق توضيحي يُستخدَم في Android لتقييد القيم المحتملة لسلسلة رمز برمجي عددية. يستخدم Winscope تعيينًا لهذه التعليقات التوضيحية لعرض اسم القيمة بدلاً من عددها الصحيح.

لتعديل تعيين @IntDef، اتّبِع الخطوات التالية:

  1. أنشئ :framework-minus-apex-intdefs لتشغيل المعالج المُسبَق للتعليقات التوضيحية:

    mp :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. حمِّل التغييرات في 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

    • يحدث ذلك عند إنشاء ملف التتبُّع باستخدام تعريف proto جديد، يحتوي على حقول مطلوب جديدة.

      1. تأكَّد من فتح عملية التتبُّع على إصدار Winscope الصحيح (master أو S أو R).
      2. في حال إنشاء الحقل الجديد في ملف proto، أعِد تجميع ملفات proto في Winscope باستخدام npm run build:protos.

  • بعض إصدارات الملحقات المثبَّتة غير صحيحة (تعذُّر إنشاء الحِزمة)

    • ألغِ التغييرات التي أجريتها على package.json وpackage-lock.json. أزِل node_modules. شغِّل npm install مرة أخرى.
  • لقد أضفت حقلًا جديدًا إلى أحد ملفات proto. كيف يمكنني عرضها؟

    • يستخدم Winscope تعريفات proto منذ وقت تجميعه، لذا لن تظهر الحقول الجديدة تلقائيًا. لعرض حقول جديدة، أعِد إنشاء ملفات protos باستخدام npm run build:protos.