המעקב ב-Winscope הוא חלק ממסגרת Android. בדף הזה מפורטים השלבים הנדרשים להורדה, לבנייה ולהפעלה של הכלי Winscope trace viewer באופן מקומי.
פיתוח Winscope באופן מקומי
כדי להגדיר את המחשב להרצת הכלי Winscope Tracer:
- הורדת המקור של Android
עוברים לתיקייה Winscope:
cd development/tools/winscope
מתקינים את יחסי התלות באמצעות:
npm install
כדי לראות את רשימת הפקודות הזמינות, מריצים את הפקודה:
npm run
כדי ליצור את כל יעדי הייצור והבדיקה, משתמשים בפקודה:
npm run build:prod
מריצים את Winscope באמצעות:
npm run start
יצירת חלקים נפרדים
אפשר ליצור חלקים נפרדים של Winscope בנפרד באמצעות הפקודות הבאות:
פקודה | תיאור |
---|---|
build:trace_processor |
הכלי מאחזר ובונה מחדש את הגרסה האחרונה של Perfetto trace_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
:
מבצעים build של
:framework-minus-apex-intdefs
כדי להריץ את מעבד ההערות:mp :framework-minus-apex-intdefs
מעתיקים את קובץ
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
מעלים את השינויים ב-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
המצב הזה קורה כשקובץ המעקב נוצר עם הגדרת פרוטו חדשה, שמכילה שדות חובה חדשים.
- חשוב לוודא שפותחים את ה-trace בגרסה הנכונה של Winscope (master, S או R).
אם יוצרים את השדה החדש ב-proto, צריך לקמפל מחדש את ה-proto ב-Winscope באמצעות
npm run build:protos
.
חלק מגרסאות התלות שהותקנו שגויות (הבנייה נכשלת)
- חזרה לגרסה הקודמת של
package.json
ושלpackage-lock.json
. הסרה שלnode_modules
. מריצים שוב אתnpm install
.
- חזרה לגרסה הקודמת של
הוספתי שדה חדש לאחד מקובצי ה-proto. איך מציגים את זה?
- Winscope משתמש בהגדרות פרוטו מהרגע שבו הוא קומפל, ולכן שדות חדשים לא יופיעו כברירת מחדל. כדי להציג שדות חדשים, צריך לבנות מחדש את קובצי ה-proto באמצעות
npm run build:protos
.
- Winscope משתמש בהגדרות פרוטו מהרגע שבו הוא קומפל, ולכן שדות חדשים לא יופיעו כברירת מחדל. כדי להציג שדות חדשים, צריך לבנות מחדש את קובצי ה-proto באמצעות