การติดตาม 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เวอร์ชันล่าสุดของ Perfetto ใหม่ | 
| build:protos | คอมไพล์คำจำกัดความของโปรโตอีกครั้ง | 
ทำการทดสอบ
Winscope มีการทดสอบหน่วยและการทดสอบแบบครบวงจร หากต้องการเรียกใช้ ให้ใช้ npm run
<command> ดังนี้
| คำสั่ง | คำอธิบาย | 
|---|---|
| test:unit:ci | เรียกใช้การทดสอบหน่วยในรูปแบบที่มีรายละเอียดน้อยกว่าสำหรับ CI หรือฮุกก่อนส่ง | 
| test:unit:dev | เรียกใช้การทดสอบหน่วยในรูปแบบที่ละเอียดกว่าสำหรับ การพัฒนาในเครื่อง โหมดนี้จะตรวจสอบการเปลี่ยนแปลงและ เรียกใช้การทดสอบที่ถูกต้องอีกครั้งโดยอัตโนมัติ | 
| test:e2e | เรียกใช้การทดสอบแบบครบวงจร เช่น การทดสอบสำหรับ โปรโตคอลข้ามเครื่องมือ | 
| test:presubmit:quiet | สร้างการทดสอบหน่วยก่อนส่งทั้งหมด, Linter และการวิเคราะห์กราฟ ในรูปแบบที่กระชับมากขึ้นสำหรับ CI หรือฮุกก่อนส่ง | 
| test:presubmit | สร้างการทดสอบ 1 หน่วยก่อนส่งทั้งหมด, เครื่องมือตรวจสอบโค้ด และการวิเคราะห์กราฟ ในรูปแบบที่ละเอียดมากขึ้นสำหรับการพัฒนาในเครื่อง | 
| test:all | เรียกใช้การทดสอบทั้งหมด (Unit Test และการทดสอบจากต้นทางถึงปลายทาง) เครื่องมือตรวจสอบโค้ด และ การวิเคราะห์กราฟในรูปแบบที่ละเอียดกว่าสำหรับการพัฒนาในเครื่อง | 
การทดสอบตั้งแต่ต้นจนจบ
ก่อนที่จะเรียกใช้การทดสอบแบบครบวงจร คุณต้องเริ่มเครื่องมือระยะไกลและติดตั้ง Chrome Driver เวอร์ชันที่ถูกต้อง ในข้อมูลโค้ดต่อไปนี้ คำสั่ง
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 ให้ทำดังนี้
- สร้าง - :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- ปัญหานี้เกิดขึ้นเมื่อสร้างไฟล์การติดตามด้วยคำจำกัดความ Proto ใหม่ ซึ่งมีฟิลด์ใหม่ที่ต้องระบุ - ตรวจสอบว่าคุณเปิดการติดตามใน Winscope เวอร์ชันที่ถูกต้อง (มาสเตอร์, S หรือ R)
- หากสร้างฟิลด์ใหม่ใน Proto ให้คอมไพล์ Proto อีกครั้งใน Winscope โดยใช้ - npm run build:protos
 
 
- เวอร์ชันทรัพยากร Dependency ที่ติดตั้งบางรายการไม่ถูกต้อง (บิลด์ไม่สำเร็จ) - เปลี่ยนกลับการเปลี่ยนแปลงใน package.jsonและpackage-lock.jsonนำออกnode_modulesเรียกใช้npm installอีกครั้ง
 
- เปลี่ยนกลับการเปลี่ยนแปลงใน 
- ฉันเพิ่มฟิลด์ใหม่ลงในไฟล์ Proto ไฟล์หนึ่ง ฉันจะแสดงข้อมูลนี้ได้อย่างไร - Winscope ใช้คำจำกัดความของ Proto จากตอนที่คอมไพล์ ดังนั้นฟิลด์ใหม่
จึงไม่ปรากฏโดยค่าเริ่มต้น หากต้องการแสดงฟิลด์ใหม่ ให้สร้างโปรโตคอลบัฟเฟอร์ใหม่
โดยใช้ npm run build:protos
 
- Winscope ใช้คำจำกัดความของ Proto จากตอนที่คอมไพล์ ดังนั้นฟิลด์ใหม่
จึงไม่ปรากฏโดยค่าเริ่มต้น หากต้องการแสดงฟิลด์ใหม่ ให้สร้างโปรโตคอลบัฟเฟอร์ใหม่
โดยใช้