เรียกใช้ Winscope

การติดตาม Winscope เป็นส่วนหนึ่งของเฟรมเวิร์ก Android หน้านี้อธิบาย ขั้นตอนที่จำเป็นในการดาวน์โหลด สร้าง และเรียกใช้โปรแกรมดูการติดตาม Winscope ในเครื่อง

สร้าง Winscope ในเครื่อง

ทำตามขั้นตอนต่อไปนี้เพื่อตั้งค่าคอมพิวเตอร์ให้เรียกใช้เครื่องมือติดตาม Winscope

  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 ตรวจสอบและสร้าง
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 หน่วยก่อนส่ง, Linter และการวิเคราะห์กราฟ
ทั้งหมดในรูปแบบที่ละเอียดมากขึ้นสำหรับการพัฒนาในเครื่อง
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 ให้ทำดังนี้

  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

คำสั่งอื่นๆ

นอกเหนือจากการสร้างและการทดสอบแล้ว สคริปต์ 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 เวอร์ชันที่ถูกต้อง (มาสเตอร์, S หรือ R)
      2. หากสร้างฟิลด์ใหม่ใน Proto ให้คอมไพล์ Proto อีกครั้งใน Winscope โดยใช้ npm run build:protos

  • เวอร์ชันทรัพยากร Dependency ที่ติดตั้งบางรายการไม่ถูกต้อง (บิลด์ไม่สำเร็จ)

    • เปลี่ยนกลับการเปลี่ยนแปลงใน package.json และ package-lock.json นำออก node_modules เรียกใช้ npm install อีกครั้ง
  • ฉันเพิ่มฟิลด์ใหม่ลงในไฟล์ Proto ไฟล์หนึ่ง ฉันจะแสดงข้อมูลนี้ได้อย่างไร

    • Winscope ใช้คำจำกัดความของ Proto จากตอนที่คอมไพล์ ดังนั้นฟิลด์ใหม่ จึงไม่ปรากฏโดยค่าเริ่มต้น หากต้องการแสดงฟิลด์ใหม่ ให้สร้างโปรโตคอลบัฟเฟอร์ใหม่ โดยใช้ npm run build:protos