클러스터 UI는 일반적으로 별도의 디스플레이에서 운전대 뒤에 배치됩니다. OEM은 클러스터와 IVI를 점차 단일 디스플레이로 결합합니다. 이 결합된 UI가 DriverUI입니다.
그림 1. DriverUI
DriverUI는 고가용성 렌더러 (HAR)에서 렌더링하는 안전 관련 또는 규제 요소를 제외한 전체 계기판 디스플레이를 렌더링하는 Android 시스템 앱입니다. DriverUI는 미디어 재생, 전화 통화, 지도, 내비게이션 등과 관련된 정보를 표시하고 Compose용 Automotive Design을 구현합니다.
기본 클러스터 활동으로서의 DriverUI
DriverUI는 Android에서 권한 있는 클러스터 앱으로 실행되며 AAOS에서 자동으로 시작합니다.
AAOS는 ClusterHomeManager 클래스(클러스터2라고도 함
)를 사용하여 계기판 클러스터를 빌드합니다. 이 클래스는 계기판 클러스터 구현을 식별하는 데 필요한 구성과 AAOS가 계기판 클러스터 구현과 상호작용하는 방법을 지정합니다. Google은 Cluster2 API의 참조 구현을 제공합니다.
플랫폼
SDV에서 디스플레이 안전을 빌드하고 실행할 수 있습니다. 소프트웨어 정의 차량 (SDV) 플랫폼:
- 게스트 VM 2개가 필요합니다.
- 게스트 VM의 SDV 미디어 (빠른 부팅 VM이라고도 함)에서 HAR을 실행합니다.
- 다른 게스트 SDV IVI VM에서 DriverUI를 실행합니다.
- SDV 미디어 VM에서 안전 모니터를 실행합니다.

그림 2. SDV 플랫폼 아키텍처
HAR 및 DriverUI 출력 혼합
HAR과 DriverUI는 별도의 디스플레이를 사용하여 UI를 렌더링합니다. 두 출력은 합성되어 DriverUI에 하나의 이미지로 표시됩니다.
이를 위해 HAR은 DriverUI의 하트비트 메시지를 기반으로 Android 출력이 표시되는 영역의 투명도를 제어합니다. DriverUI를 사용할 수 없는 경우 HAR은 하트비트가 없음을 감지하고 DriverUI 영역을 불투명하게 렌더링하며 자리표시자를 표시합니다. 하트비트가 수신되면 자리표시자가 삭제되고 DriverUI 영역이 투명하게 설정됩니다.

그림 3. HAR 및 DriverUI 구성
DriverUI 및 HAR 통신
DriverUI와 HAR은 리모트 프로시져 콜(RPC)을 사용하여 서로 통신합니다. 하트비트 메시지는 RPC 채널을 통해 전송되는 데이터의 예이며 필드 중 하나로 타임스탬프를 포함합니다.
gRPC는 RPC에 사용됩니다. SDV에서 SDV 통신은 DriverUI에서 HAR로의 채널을 검색하고 설정하는 SDV 게이트웨이 클라이언트를 제공합니다. gRPC 서비스는 프로토콜 버퍼 파일을 정의합니다.
// Heartbeat.
rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse) {}
// Document switched in the DriverUI.
rpc DocumentSwitched(DocumentSwitchedRequest) returns (DocumentSwitchedResponse) {}
// Document updated in the DriverUI. Unary RPC.
rpc DocumentUpdated(DocumentUpdatedRequest) returns (DocumentUpdatedResponse) {}
// Document updated in the DriverUI. Requests are streamed with each request
// containing a part of the document and the entire document is assembled from these
// chunks by the server.
rpc DocumentUpdatedStreaming(stream DocumentUpdatedRequest) returns (DocumentUpdatedResponse) {}
/// Request for HAR to change design tokens.
rpc DesignTokenUpdate(DesignTokenUpdateRequest) returns (DesignTokenUpdateResponse) {}
// Request to change the current locale used in HAR.
rpc LocaleUpdate(LocaleUpdateRequest) returns (LocaleUpdateResponse) {}
// Requests to swap a certain variant at a Figma node.
rpc ChangeVariant(ChangeVariantRequest) returns (ChangeVariantResponse) {}
// Requests to change the container (display/root node) configuration (dpi, size) in HAR.
rpc ChangeContainerConfiguration(ChangeContainerConfigurationRequest) returns (ChangeContainerConfigurationResponse) {}
요청 및 응답 세부정보는 ub-automotive 소스 코드 저장소의 packages/apps/Car/DriverUI/proto/driverui.proto에 있는 디스플레이 안전 소스에 있습니다.
SDV 플랫폼에서 SDV 통신은 DriverUI에서 HAR로의 gRPC 채널을 검색하고 설정하는 SDV 게이트웨이 클라이언트를 제공합니다.
IVI 터미널을 사용하여 이러한 명령어를 실행하면 SDV 미디어에 통신이 전송되어 전체 클러스터에서 테마 업데이트가 트리거됩니다.
adb shell cmd car_service inject-key -d 1 9 # Purple Theme
adb shell cmd car_service inject-key -d 1 8 # Blue Theme

그림 4. DriverUI 및 HAR 테마를 모두 변경하는 RPC 통신
클러스터에 미디어, 지도, 전화 통신 정보 표시
IVI와의 통신을 통해 DriverUI는 참조 클러스터 내에서 미디어, 지도, 전화 통신 정보를 표시할 수 있습니다. 미디어가 참조 구현의 기본 상태로 제공되지만 디스플레이는 다음 우선순위에 따라 활성 서비스를 기반으로 업데이트됩니다.
- 지도
- 전화 통신
- 미디어
시스템은 기본 미디어 상태보다 지도 내비게이션 또는 활성 전화 통신 서비스를 표시하는 데 자동으로 우선순위를 부여합니다.
다양한 DriverUI 디스플레이 상태는 다음 그림에 나와 있습니다.

그림 5. 전체 클러스터에서 미디어 및 전화 통신 섹션을 보여주는 DriverUI
Compose용 Automotive Design 통합
DriverUI는 Compose용 Automotive Design을 구현하여 디자인 (Figma)을 Android 앱 내에서 직접 보여주고 반복할 수 있도록 합니다. 이 통합은 런타임 환경에서 디자인 문서를 렌더링할 수 있도록 하여 디자인과 개발 간의 격차를 해소합니다.
디자인 애셋 액세스
DriverUI용 샘플 Figma 문서는 코드베이스의 일부입니다. 이러한 디자인에 액세스하고 수정하려면 다음 단계를 따르세요.
packages/apps/Car/DriverUI/src/main/assets/figma/*.dcf에서 로컬 Compose용 Automotive Design DCF 디자인 파일로 DriverUI를 실행합니다.packages/apps/Car/DriverUI/src/main/assets/DriverUI.fig애셋 파일을 찾습니다.- 이 파일을 Figma로 가져와 소스 디자인을 보거나 변경합니다.
Compose용 Automotive Design 버전
- Gradle은
packages/apps/Car/libs/aaos-apps-gradle-project/gradle/libs.versions.toml에서designcompose에 지정된 Compose용 Automotive Design 버전을 사용합니다. - Compose용 Automotive Design 출시 버전은 출시 페이지에서 확인할 수 있습니다.
실시간 업데이트 구성
Compose용 Automotive Design은 개발 모드에서 실시간 업데이트를 지원하므로 Figma에서 변경한 내용을 DriverUI에서 즉시 렌더링할 수 있습니다. 이를 통해 빠른 테스트 및 더 빠른 디자인 반복 주기가 가능합니다.
다음 명령어를 실행하여 DriverUI의 Figma 토큰을 설정합니다.
adb shell am startservice \
-n "com.android.car.driverui/com.android.designcompose.ApiKeyService" \
-a setApiKey \
-e ApiKey $FIGMA_ACCESS_TOKEN \
--user 0
듀얼 VM 디자인 문서 동기화
듀얼 VM 설정에서는 일관성을 유지하기 위해 디자인 업데이트가 경계를 넘어 전파되어야 합니다.
- DriverUI는 최신 Figma 디자인 문서를 가져오고 이 페이지에 자세히 설명된 gRPC 통신 채널을 사용하여 HAR에 전송합니다.
- 따라서 전체 클러스터가 최신 Figma 디자인 반복으로 업데이트되어 두 VM이 디자인 소스와 동기화됩니다.

그림 6. Figma에서 DriverUI 및 HAR로의 디자인 문서 실시간 업데이트
gRPC 채널 보안
gRPC에는 SSL 및 TLS 통합이 있으며 서버를 인증하고 클라이언트와 서버 간에 교환되는 모든 데이터를 암호화하기 위해 SSL 및 TLS 사용을 권장합니다. 클라이언트가 상호 인증을 위한 인증서를 제공하는 데 사용할 수 있는 선택적 메커니즘이 있습니다. gRPC 인증에 관한 자세한 내용은 인증을 참고하세요.