핵심 코드 샘플

/system/software_defined_vehicle/samples의 SDV Core 서비스 코드 샘플을 사용하면 서비스를 빌드할 수 있습니다. 각 샘플에는 사용 사례를 설명하는 README 파일이 포함되어 있습니다.

샘플 디렉터리 개요

다음 표에는 system/software_defined_vehicle/samples의 참조 샘플 디렉터리와 해당 문서 가이드가 나와 있습니다.

샘플 디렉터리 설명 문서 가이드
system/software_defined_vehicle/samples/quickstart Manager 번들과 Monitor 번들 간의 VSIDL 게시, 구독, RPC를 보여주는 엔드 투 엔드 Rust 서비스 번들 샘플 빠른 시작: 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 파티션 업데이트를 트리거하고 롤백하는 샘플 서비스입니다. OEM AB 파티션 업데이트
system/software_defined_vehicle/samples/sdv_gateway SDV 게이트웨이를 통해 SDV 핵심 서비스와 통신하는 네이티브 및 Java IVI 샘플 앱 (NativeSdvGatewayTestApp 및 SdvCarMonitorTestApp) IVI에서 SDV 게이트웨이 사용
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 우선순위 및 숫자 태그 ID로 로깅됩니다.

.logtags 파일은 Android.bp.의 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

순서대로 확인되는 선택한 로그 수준을 선택하려면 각 값을 V, D, I, W 또는 E로 설정하면 됩니다.

유효 로그 수준은 값이 있는 첫 번째 시스템 속성에 설정된 수준으로, __android_log_set_minimum_priority 호출을 통해 앱에서 설정한 로그 수준보다 낮거나 높을 수 있습니다. 설정된 속성이 없으면 __android_log_set_minimum_priority로 구성된 수준이 적용됩니다.

자세한 내용은 Logging 시스템 개요를 참조하세요.

  • 기본 로그 태그를 example_tag로 설정하여 샘플을 실행합니다.

    LOGTAG=example_tag log_filtering_sdv_sample
    

샘플에는 모든 로그 메시지의 로그 태그를 설정하는 데 사용할 수 있는 주석 처리된 LOG_TAG 매크로 정의도 포함되어 있습니다. 이러한 방식으로 설정된 태그는 런타임 시 __android_log_set_default_tag로 설정된 태그를 재정의합니다.

LOG_TAG 매크로가 정의되지 않고 앱이 __android_log_set_default_tag를 호출하지 않으면 기본 태그는 getprogname()의 결과입니다. 예를 들어 실행 파일 이름입니다.