核心程式碼範例

/system/software_defined_vehicle/samples 中的 SDV Core 服務程式碼範例可協助您開始建構服務。每個範例都包含 README 檔案,說明用途。

使用 Logging API

如要進一步瞭解提供的指示,請參閱:

基本記錄範例

logging.cpp 會顯示寫入 mainsystemradio 緩衝區的內容。 如要閱讀可用記錄緩衝區的簡短說明,請參閱「檢視備用記錄緩衝區」。

  • 如要執行範例,但不使用條件式記錄,例如 ALOGI_IF

    logging_sdv_sample
    
  • 如要執行範例並列印條件式記錄 (例如 ALOGI_IF):

    LOGIF=1 logging_sdv_sample
    

結構化記錄範例

範例檔案:structured_logging.cpp

  • 如要執行範例,將記錄寫入 events 記錄緩衝區:

    structured_logging_sdv_sample
    

eventsecuritystats 記錄緩衝區會保留結構化資料,而非任意文字。

系統會使用事件清單 API 記錄結構化資料,且一律會以 INFO 優先順序和數字標記 ID 記錄。

您可以在 Android.bp. 中使用 logtags 屬性定義 .logtags 檔案。提供這個屬性後,logcat 會使用這個屬性,從數字標記 ID 衍生標記名稱。標記名稱可用於篩選結構化記錄。如需詳細資料和檔案格式說明,請參閱 logcat event.logtags 檔案中的註解。

在建構程序中,所有 logtags 檔案都會合併,並放入 Android 系統映像檔的 /system/etc/event-log-tags 檔案中。

編譯時間記錄篩選範例

範例檔案: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

如要選取所選記錄層級 (依序檢查),每個值都可以設為 VDIWE

有效記錄層級是第一個有值的系統屬性所設定的層級,可能低於或高於應用程式透過 __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() 的結果。舉例來說,可執行檔名稱。