การติดตาม Winscope เป็นส่วนหนึ่งของเฟรมเวิร์ก Android หน้านี้จะอธิบายขั้นตอนที่จำเป็นในการดาวน์โหลด บิลด์ และเรียกใช้โปรแกรมดูร่องรอย Winscope ในเครื่อง
สร้าง Winscope ในเครื่อง
ทำตามขั้นตอนต่อไปนี้เพื่อตั้งค่า PC ให้เรียกใช้โปรแกรมติดตาม 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 |
เรียกใช้การทดสอบ 1 หน่วยในรูปแบบที่แสดงรายละเอียดมากขึ้นสําหรับ การพัฒนาในเครื่อง โหมดนี้จะคอยตรวจสอบการเปลี่ยนแปลงและ ดำเนินการทดสอบที่ถูกต้องอีกครั้งโดยอัตโนมัติ |
test:e2e |
เรียกใช้การทดสอบจากต้นทางถึงปลายทาง เช่น การทดสอบ Protocol แบบข้ามเครื่องมือ |
test:presubmit:quiet |
สร้างการทดสอบหน่วยก่อนส่ง โปรแกรมตรวจไวยากรณ์ และการวิเคราะห์กราฟทั้งหมด ในรูปแบบที่กระชับขึ้นสำหรับ CI หรือฮุกก่อนส่ง |
test:presubmit |
สร้างการทดสอบ 1 หน่วย โปรแกรมตรวจไวยากรณ์ และการวิเคราะห์กราฟทั้งหมดก่อนส่งในรูปแบบที่แสดงรายละเอียดมากขึ้นสําหรับการพัฒนาในเครื่อง |
test:all |
เรียกใช้การทดสอบทั้งหมด (การทดสอบ 1 หน่วยและการทดสอบจากต้นทางถึงปลายทาง) โปรแกรมตรวจไวยากรณ์ และ การวิเคราะห์กราฟในรูปแบบที่แสดงรายละเอียดมากขึ้นสําหรับการพัฒนาในเครื่อง |
อัปเดตการแมป @IntDef
@IntDef
คือการกำกับเนื้อหาที่ใช้ใน Android เพื่อจำกัดค่าที่เป็นไปได้ของจำนวนเต็ม Winscope จะใช้การแมปของคำอธิบายประกอบเหล่านี้เพื่อแสดงชื่อค่าแทนจำนวนเต็ม
หากต้องการอัปเดตการแมป @IntDef
ให้ทําดังนี้
บิลด์
:framework-minus-apex-intdefs
เพื่อให้โปรแกรมประมวลผลคำอธิบายประกอบทำงานmp :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
กรณีนี้เกิดขึ้นเมื่อสร้างไฟล์ติดตามด้วยคําจํากัดความโปรโตคอลใหม่ซึ่งมีช่องที่จําเป็นใหม่
- ตรวจสอบว่าคุณเปิดการติดตามใน Winscope เวอร์ชันที่ถูกต้อง (master, S หรือ R)
หากคุณสร้างช่องใหม่ในโปรโต ให้คอมไพล์โปรโตใน Winscope อีกครั้งโดยใช้
npm run build:protos
เวอร์ชันของ Dependency ที่ติดตั้งไม่ถูกต้อง (สร้างไม่สำเร็จ)
- เปลี่ยนกลับการเปลี่ยนแปลงใน
package.json
และpackage-lock.json
นำnode_modules
ออก เรียกใช้npm install
อีกครั้ง
- เปลี่ยนกลับการเปลี่ยนแปลงใน
ฉันเพิ่มช่องใหม่ลงในไฟล์โปรโตไฟล์ ฉันจะแสดงข้อมูลดังกล่าวได้อย่างไร
- Winscope ใช้คําจํากัดความของโปรโตคอลจากตอนที่คอมไพล์ ดังนั้นช่องใหม่จะไม่ปรากฏโดยค่าเริ่มต้น หากต้องการแสดงช่องใหม่ ให้สร้างโปรโตสใหม่โดยใช้
npm run build:protos
- Winscope ใช้คําจํากัดความของโปรโตคอลจากตอนที่คอมไพล์ ดังนั้นช่องใหม่จะไม่ปรากฏโดยค่าเริ่มต้น หากต้องการแสดงช่องใหม่ ให้สร้างโปรโตสใหม่โดยใช้