הפעלת Winscope

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

פיתוח Winscope באופן מקומי

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

  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 הכלי מאחזר ובונה מחדש את הגרסה האחרונה של
Perfettotrace_processor.
build:protos הקומפילציה של הגדרות ה-proto מתבצעת מחדש.

הרצת בדיקות

‫Winscope מכיל בדיקות יחידה ובדיקות מקצה לקצה. כדי להריץ אותן, משתמשים ב-npm run <command>:

פקודה תיאור
test:unit:ci מריץ את בדיקות היחידה בפורמט פחות מפורט עבור CI
או presubmit hook.
test:unit:dev מריץ את בדיקות היחידה בפורמט מפורט יותר עבור
פיתוח מקומי. במצב הזה המערכת עוקבת אחרי שינויים ו
מריצה מחדש באופן אוטומטי את הבדיקות הנכונות.
test:e2e מריצים את הבדיקות מקצה לקצה, כמו אלה של
פרוטוקול בין כלים.
test:presubmit:quiet יוצר את כל בדיקות היחידות לפני השליחה, את כלי ה-lint ואת ניתוח הגרף
בפורמט פחות מפורט עבור CI או ווֹבְּהוּק לפני השליחה
.
test:presubmit יוצר את כל בדיקות היחידה לפני שליחת הקוד, את כלי ה-lint ואת ניתוח הגרף
בפורמט מפורט יותר לפיתוח מקומי.
test:all מריץ את כל הבדיקות (יחידה וקצה לקצה), את כלי ה-lint ואת
ניתוח הגרפים בפורמט מפורט יותר לפיתוח
מקומי.

בדיקות מקצה לקצה

לפני שמריצים בדיקות מקצה לקצה, צריך להפעיל את הכלי המרוחק ולהתקין את הגרסה הנכונה של מנהל ההתקן של 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:

  1. מבצעים build של :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.

פקודות אחרות

בנוסף לבנייה ולבדיקות, סקריפטים של 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. חשוב לוודא שפותחים את ה-trace בגרסה הנכונה של Winscope (master,‏ S או R).
      2. אם יוצרים את השדה החדש ב-proto, צריך לקמפל מחדש את ה-proto ב-Winscope באמצעות npm run build:protos.

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

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

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