تتبُّع Winscope هو جزء من إطار عمل Android. توضّح هذه الصفحة الخطوات المطلوبة لتنزيل أداة عرض عمليات التتبُّع في Winscope وإنشائها وتشغيلها على جهازك.
إنشاء Winscope محليًا
اتّبِع الخطوات التالية لإعداد جهاز الكمبيوتر لتشغيل أداة Winscope لتتبُّع الأخطاء:
- تنزيل مصدر Android
انتقِل إلى مجلد Winscope:
cd development/tools/winscopeثبِّت الحِزم التابعة باستخدام:
npm installللاطّلاع على قائمة بالأوامر المتاحة، شغِّل الأمر:
npm runإنشاء جميع أهداف الإنتاج والاختبار باستخدام:
npm run build:prodشغِّل Winscope باستخدام:
npm run start
إنشاء أجزاء منفصلة
يمكنك إنشاء أجزاء فردية من Winscope بشكل منفصل باستخدام الأوامر التالية:
| الأمر | الوصف |
|---|---|
build:trace_processor |
يتم استخراج أحدث إصدار من trace_processor وإعادة إنشائه. |
build:protos |
يعيد تجميع تعريفات proto. |
إجراء الاختبارات
يحتوي Winscope على اختبارات الوحدة والاختبارات الشاملة. لتشغيلها، استخدِم npm run
<command>:
| الأمر | الوصف |
|---|---|
test:unit:ci |
يُجري اختبارات الوحدات بتنسيق أقل تفصيلاً لعمليات الدمج المتواصل أو خطاف ما قبل الإرسال. |
test:unit:dev |
يُجري اختبارات الوحدات بتنسيق أكثر تفصيلاً للتطوير المحلي. يراقب هذا الوضع التغييرات ويعيد تشغيل الاختبارات الصحيحة تلقائيًا. |
test:e2e |
لتشغيل الاختبارات الشاملة، مثل اختبارات البروتوكول المشترك بين الأدوات |
test:presubmit:quiet |
تنشئ هذه السمة جميع اختبارات الوحدات وعمليات التدقيق والتحليل البياني التي يتم إجراؤها قبل إرسال الرمز البرمجي، وذلك بتنسيق أقل تفصيلاً، من أجل الدمج المتواصل أو خطاف عملية التدقيق قبل الإرسال. |
test:presubmit |
تنشئ هذه السمة جميع وحدات الاختبار قبل الإرسال، وأدوات التدقيق، وتحليل الرسومات بتنسيق أكثر تفصيلاً للتطوير المحلي. |
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نفِّذ التغييرات على
src/common/intDefMapping.jsonباستخدام الأمرgit commitوحمِّلها باستخدام الأمر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حمِّل التغييرات في 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 جديد، يحتوي على حقول مطلوبة جديدة.
- تأكَّد من فتح التتبُّع على إصدار Winscope الصحيح (الإصدار الرئيسي أو الإصدار S أو الإصدار R).
إذا أنشأت الحقل الجديد في ملف proto، عليك إعادة تجميع ملفات proto في Winscope باستخدام
npm run build:protos.
بعض إصدارات الاعتماديات المثبَّتة غير صحيحة (يتعذّر إنشاء الإصدار)
- إلغاء التغييرات التي أجريتها على
package.jsonوpackage-lock.jsonإزالةnode_modulesنفِّذ الأمرnpm installمرة أخرى.
- إلغاء التغييرات التي أجريتها على
أضفتُ حقلًا جديدًا إلى أحد ملفات proto. كيف يمكنني عرضها؟
- يستخدم Winscope تعريفات proto من وقت تجميعه، لذا لن تظهر الحقول الجديدة تلقائيًا. لعرض الحقول الجديدة، أعِد إنشاء ملفات protos باستخدام
npm run build:protos.
- يستخدم Winscope تعريفات proto من وقت تجميعه، لذا لن تظهر الحقول الجديدة تلقائيًا. لعرض الحقول الجديدة، أعِد إنشاء ملفات protos باستخدام