เรียกใช้ Winscope

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

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

ทำตามขั้นตอนต่อไปนี้เพื่อตั้งค่า PC ให้เรียกใช้โปรแกรมติดตาม 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 เรียกใช้การทดสอบ 1 หน่วยในรูปแบบที่แสดงรายละเอียดมากขึ้นสําหรับ
การพัฒนาในเครื่อง โหมดนี้จะคอยตรวจสอบการเปลี่ยนแปลงและ
ดำเนินการทดสอบที่ถูกต้องอีกครั้งโดยอัตโนมัติ
test:e2e เรียกใช้การทดสอบจากต้นทางถึงปลายทาง เช่น การทดสอบ
Protocol แบบข้ามเครื่องมือ
test:presubmit:quiet สร้างการทดสอบหน่วยก่อนส่ง โปรแกรมตรวจไวยากรณ์ และการวิเคราะห์กราฟทั้งหมด
ในรูปแบบที่กระชับขึ้นสำหรับ CI หรือฮุกก่อนส่ง
test:presubmit สร้างการทดสอบ 1 หน่วย โปรแกรมตรวจไวยากรณ์ และการวิเคราะห์กราฟทั้งหมดก่อนส่งในรูปแบบที่แสดงรายละเอียดมากขึ้นสําหรับการพัฒนาในเครื่อง

test:all เรียกใช้การทดสอบทั้งหมด (การทดสอบ 1 หน่วยและการทดสอบจากต้นทางถึงปลายทาง) โปรแกรมตรวจไวยากรณ์ และ
การวิเคราะห์กราฟในรูปแบบที่แสดงรายละเอียดมากขึ้นสําหรับการพัฒนาในเครื่อง

อัปเดตการแมป @IntDef

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

หากต้องการอัปเดตการแมป @IntDef ให้ทําดังนี้

  1. บิลด์ :framework-minus-apex-intdefs เพื่อให้โปรแกรมประมวลผลคำอธิบายประกอบทำงาน

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

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

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

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