הפעלת Winscope

המעקב של Winscope הוא חלק מהמסגרת של Android. בדף הזה מפורטים השלבים להורדה, ליצירה ולהפעלה של כלי הצפייה בנתוני המעקב של Winscope באופן מקומי.

פיתוח גרסת build של Winscope באופן מקומי

כדי להגדיר את המחשב להרצת הכלי למעקב Winscope:

  1. מורידים את קוד המקור של Android.
  2. עוברים לתיקייה Winscope:

    cd development/tools/winscope
    
  3. מתקינים את יחסי התלות באמצעות:

    npm install
    

    כדי לראות את רשימת הפקודות הזמינות, מריצים את הפקודה: npm run

  4. יצירת גרסאות build לכל יעדי הייצור והבדיקה באמצעות:

    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 הרצת בדיקות היחידה בפורמט פחות מפורט ל-CI
או ל-hook של שליחת קובץ לפני בדיקה.
test:unit:dev הפעלת בדיקות היחידה בפורמט מפורט יותר לפיתוח מקומי
. במצב הזה המערכת עוקבת אחרי שינויים ומריצה אוטומטית את הבדיקות הנכונות.
test:e2e הרצת הבדיקות מקצה לקצה, כמו הבדיקות של הפרוטוקול
לכל הכלים.
test:presubmit:quiet הכלי יוצר את כל בדיקות היחידות, ה-linters והניתוחים של הגרפים לפני שליחת הקוד בפורמט פחות מפורט ל-CI או ל-presubmit hook.

test:presubmit ה-build כולל את כל בדיקות היחידות, ה-linters והניתוחים של התרשימים

שנעשים לפני שליחת הקוד, בפורמט מפורט יותר לפיתוח מקומי.
test:all הפעלת כל הבדיקות (בדיקות יחידה ובדיקות מקצה לקצה), כלי איתור שגיאות בקוד וניתוח גרפים בפורמט מפורט יותר לפיתוח מקומי.

עדכון המיפוי של @IntDef

@IntDef הוא הערה שמשמשת ב-Android כדי להגביל את הערכים האפשריים של מספר שלם. Winscope משתמש במיפוי של ההערות האלה כדי להציג את שם הערך במקום את המספר השלם.

כדי לעדכן את המיפוי של @IntDef:

  1. כדי להריץ את מעבד הקדם של ההערות, צריך לבנות את :framework-minus-apex-intdefs:

    mp :framework-minus-apex-intdefs
    
  2. מעתיקים את קובץ ה-intDefMapping.json שנוצר למאגר של ה-prebuilts:

    $ 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.

פקודות אחרות

בנוסף ל-build ולבדיקות, סקריפטים של 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, צריך לבצע קומפילציה מחדש של ה-protos ב-Winscope באמצעות npm run build:protos.

  • גרסאות מסוימות של יחסי התלות המותקנים שגויות (ה-build נכשל)

    • מבטלים את השינויים ב-package.json וב-package-lock.json. מסירים את node_modules. מריצים שוב את npm install.
  • הוספת שדה חדש לאחד מקובצי ה-proto. איך מציגים אותו?

    • Winscope משתמש בהגדרות ה-proto מהזמן שבו הוא עבר הידור, כך ששדות חדשים לא יופיעו כברירת מחדל. כדי להציג שדות חדשים, צריך ליצור מחדש את ה-protos באמצעות npm run build:protos.