ตัวอย่างโค้ดหลัก

ตัวอย่างโค้ดบริการ SDV Core ใน /system/software_defined_vehicle/samples ช่วยให้คุณเริ่มสร้างบริการได้ ตัวอย่างแต่ละรายการจะมีไฟล์ README ที่อธิบายกรณีการใช้งาน

ภาพรวมของไดเรกทอรีตัวอย่าง

ตารางต่อไปนี้แสดงไดเรกทอรีตัวอย่างอ้างอิงใน system/software_defined_vehicle/samples และคู่มือเอกสารประกอบที่เกี่ยวข้อง

ไดเรกทอรีตัวอย่าง คำอธิบาย คู่มือเอกสารประกอบ
system/software_defined_vehicle/samples/quickstart ตัวอย่างแพ็กเกจบริการ Rust แบบครบวงจรที่แสดงการเผยแพร่ VSIDL, การสมัครใช้บริการ และ RPC ระหว่างแพ็กเกจ Manager และ Monitor เริ่มต้นใช้งาน Android: สร้างและเรียกใช้แพ็กเกจบริการ SDV
system/software_defined_vehicle/samples/vsidl ดูแคตตาล็อก VSIDL, คำจำกัดความ protobuf และรูปแบบการติดตั้งใช้งานแพ็กเกจบริการ ใช้ตรรกะทางธุรกิจ
system/software_defined_vehicle/samples/concal ตัวอย่างไคลเอ็นต์สำหรับการอ่านและอัปเดตพารามิเตอร์การกำหนดค่าและการปรับเทียบของยานพาหนะ การกำหนดค่าและการปรับเทียบ
system/software_defined_vehicle/samples/health ตัวอย่างแพ็กเกจบริการที่ตรวจสอบประสิทธิภาพการทำงานและตัวอย่างการตรวจสอบคุณภาพของการบริการ (QoS) การเฝ้าตรวจสอบด้านสุขภาพ
system/software_defined_vehicle/samples/oem_partition_update_client บริการตัวอย่างที่ใช้ลัง sdv_oem_updater เพื่อทริกเกอร์และย้อนกลับการอัปเดตพาร์ติชัน /oem_ab การอัปเดตพาร์ติชัน AB ของ OEM
system/software_defined_vehicle/samples/sdv_gateway แอปตัวอย่าง IVI แบบเนทีฟและ Java (NativeSdvGatewayTestApp และ SdvCarMonitorTestApp) ที่สื่อสารกับบริการ SDV Core ผ่าน SDV Gateway ใช้เกตเวย์ SDV ใน IVI
system/software_defined_vehicle/samples/telemetry แหล่งข้อมูลการตรวจวัดและตัวอย่างเครื่องจำลองในอุปกรณ์ แหล่งข้อมูล

ใช้ Logging API

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการที่ระบุได้ที่หัวข้อต่อไปนี้

ตัวอย่างบันทึกพื้นฐาน

logging.cpp แสดงการเขียนไปยังบัฟเฟอร์ main, system และ radio หากต้องการอ่านคำอธิบายสั้นๆ เกี่ยวกับบัฟเฟอร์บันทึกที่มีอยู่ โปรดดูหัวข้อดูบัฟเฟอร์บันทึกอื่นๆ

  • หากต้องการเรียกใช้ตัวอย่างโดยไม่มีบันทึกแบบมีเงื่อนไข เช่น ALOGI_IF ให้ทำดังนี้

    logging_sdv_sample
    
  • วิธีเรียกใช้ตัวอย่างและพิมพ์บันทึกแบบมีเงื่อนไข เช่น ALOGI_IF

    LOGIF=1 logging_sdv_sample
    

ตัวอย่างการบันทึกที่มีโครงสร้าง

ไฟล์ตัวอย่าง: structured_logging.cpp

  • วิธีเรียกใช้ตัวอย่างซึ่งจะเขียนบันทึกลงในบัฟเฟอร์บันทึก events

    structured_logging_sdv_sample
    

บัฟเฟอร์บันทึก event, security และ stats จะเก็บข้อมูลที่มีโครงสร้างแทนข้อความอิสระ

ระบบจะบันทึกข้อมูลที่มีโครงสร้างโดยใช้ API รายการเหตุการณ์ ซึ่งจะบันทึกด้วยลำดับความสำคัญ INFO และรหัสแท็กที่เป็นตัวเลขเสมอ

คุณสามารถกำหนดไฟล์ .logtags ด้วยแอตทริบิวต์ logtags ใน Android.bp. เมื่อระบุแล้ว logcat จะใช้แอตทริบิวต์นี้เพื่อรับชื่อแท็กจากรหัสแท็กที่เป็นตัวเลข จากนั้นคุณจะใช้ชื่อแท็กเพื่อกรองบันทึกที่มีโครงสร้างได้ ดูรายละเอียดและคำอธิบายรูปแบบไฟล์ได้จากความคิดเห็นในไฟล์ logcat event.logtags

ในระหว่างกระบวนการบิลด์ ระบบจะผสานไฟล์ logtags ทั้งหมดและวางไว้ในไฟล์ /system/etc/event-log-tags ในอิมเมจระบบ Android

รวบรวมตัวอย่างการกรองบันทึกเวลา

ไฟล์ตัวอย่าง: compile_time_log_filtering.cpp

ตัวอย่างนี้มีมาโครที่คุณสามารถปรับเพื่อนำบันทึกบางรายการออกจากไฟล์ปฏิบัติการได้ ดูรายละเอียดในซอร์สโค้ด

ตัวอย่างการกรองบันทึก: log_filtering.cpp

  • หากต้องการเรียกใช้ตัวอย่าง ให้ตั้งค่าลำดับความสำคัญของบันทึกขั้นต่ำเป็น WARN ดังนี้

    LOGLEVEL=WARN log_filtering_sdv_sample
    

การกรองบันทึกจะได้รับผลกระทบจากพร็อพเพอร์ตี้ของระบบ สำหรับบันทึกทั้งหมดที่มี :

  • log.tag.<tag>
  • persist.log.tag.<tag>

สำหรับบันทึกทั้งหมดในระบบ

  • log.tag
  • persist.log.tag

หากต้องการเลือกระดับบันทึกที่เลือกซึ่งจะได้รับการตรวจสอบตามลำดับ คุณสามารถตั้งค่าแต่ละค่าเป็น V, D, I, W หรือ E

ระดับบันทึกที่มีผลคือระดับที่ตั้งค่าไว้ในพร็อพเพอร์ตี้ระบบแรกที่มีค่า ซึ่งอาจต่ำกว่าหรือสูงกว่าระดับบันทึกที่แอปตั้งค่าไว้ด้วยการเรียก __android_log_set_minimum_priority เมื่อไม่ได้ตั้งค่าพร็อพเพอร์ตี้ใดๆ ระบบจะใช้ระดับที่กำหนดค่าด้วย __android_log_set_minimum_priority

ดูรายละเอียดได้ที่ภาพรวมของระบบการบันทึก

  • เรียกใช้ตัวอย่าง โดยตั้งค่าแท็กบันทึกเริ่มต้นเป็น example_tag:

    LOGTAG=example_tag log_filtering_sdv_sample
    

ตัวอย่างยังมีคำจำกัดความมาโคร LOG_TAG ที่ทำเครื่องหมายเป็นความคิดเห็นซึ่งคุณใช้ตั้งค่าแท็กบันทึกสำหรับข้อความในบันทึกทั้งหมดได้ แท็กที่ตั้งค่าด้วยวิธีนี้จะลบล้างแท็กที่ตั้งค่าไว้ขณะรันไทม์ด้วย __android_log_set_default_tag

หากไม่ได้กำหนดมาโคร LOG_TAG และแอปไม่ได้เรียกใช้ __android_log_set_default_tag แท็กเริ่มต้นจะเป็นผลลัพธ์ของ getprogname() เช่น ชื่อไฟล์ปฏิบัติการ