تشغيل 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. في حال إنشاء الحقل الجديد في النموذج، أعِد تجميع النماذج في Winscope باستخدام npm run build:protos.

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

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

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