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

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

ใช้ 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 จะเก็บ Structured Data แทนข้อความอิสระ

ระบบจะบันทึก Structured Data โดยใช้ Event List 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() เช่น ชื่อไฟล์ที่เรียกใช้งานได้