HMI 개요

Android Automotive는 Android 오픈소스 프로젝트(AOSP)와 함께 제공되는 차량 인포테인먼트 플랫폼 솔루션입니다. 이 주제의 문서에서는 OEM, 서드 파티 개발자, 최종 사용자를 대상으로 효과적인 휴먼 머신 인터페이스(HMI) 시스템을 빌드하는 데 필요한 Android Automotive 시스템 UI 및 핵심 앱에서 제공하는 주요 개념과 구성요소를 소개합니다.

  • AOSP 호스트 통합 가이드. 앱 호스트를 사용하면 서드 파티 자동차 앱이 앱 호스트를 대신하여 OEM 스타일의 사용자 인터페이스(UI) 구성요소를 렌더링할 수 있습니다.
  • 자동차 설정 구조. 자동차 설정은 차량 중심의 시각적 사용자 인터페이스, 기본적인 운전자 주의 분산 행동 최적화, OEM을 위한 추가적인 맞춤설정 진입점을 제공합니다.
  • 자동차 UI 라이브러리 통합 가이드. 자동차 UI 라이브러리는 차량에 있는 모든 앱을 일관되게 유지하고 맞춤설정할 수 있는 UI 개발 프레임워크를 제공합니다.
  • 상태 표시줄 시스템 아이콘 맞춤설정. 상태 표시줄은 사용자에게 중요한 정보를 지속적으로 표시하는 데 사용되는 Android 시스템 UI 구성요소입니다. 상태 표시줄 시스템 아이콘을 맞춤설정하는 방법을 알아보세요.
  • 사전 경고 알림. 사전 경고 알림을 맞춤설정하는 방법을 알아보세요.
  • 다이얼러. 이 Android 시스템 앱을 사용하여 블루투스 통화, 연락처 검색 및 통화 관리를 위한 주의 분산 행동 최적화(DO) 환경을 구현할 수 있습니다.
  • 미디어. 개발자는 몇 가지 설정과 서비스만으로 기존 미디어 앱을 확장할 수 있습니다. 앱은 Automotive 미디어 템플릿을 준수해야 하지만, 개발자는 템플릿 색상, 글꼴, 아이콘 등을 맞춤설정하여 브랜드 환경을 만들 수 있습니다.
  • 알림. 알림의 모양과 구성을 변경하는 방법을 알아보세요.

용어

HMI 및 관련 문서에서 사용되는 용어는 다음과 같습니다.

용어 정의
핵심 앱 설정, 라디오, HVAC, 미디어, 다이얼러, 키보드를 포함하여 시스템 기능에 중요한 주요 애플리케이션입니다.
호환성 정의 문서(CDD) 기기가 최신 버전의 Android와 호환되기 위해 충족해야 하는 요구사항을 열거합니다.
호환성 테스트 모음(CTS) 호환성 테스트 모음 다운로드에서 다운로드할 수 있는 상용 등급의 무료 테스트 모음입니다.
맞춤설정 OEM 요구사항을 충족하기 위해 AOSP 구현을 수정하는 것입니다. 일반적으로 리소스 오버레이를 사용하여 외관상의 변경사항을 적용하는 동시에 CDD, CTS 및 관련된 모든 사용자 환경 가이드라인을 준수합니다.
히어로 앱 기능, 업그레이드 가능성, 타사 개발자 생태계, 최종 사용자를 포함한 Android의 모든 측면에 중요한 일련의 주요 앱입니다. 히어로 앱에는 알림, 설정, 미디어, 커뮤니케이션 센터/다이얼러 등이 있습니다. 상응하는 AOSP 구현은 프로덕션 품질이어야 합니다.
리소스 오버레이 사용자 인터페이스 렌더링에 영향을 주려면 이 메커니즘을 사용하여 색상을 바꾸고, 크기를 변경하고, 그리기를 사용하도록 설정하고, 컴파일 시간(가장 일반적임)이나 런타임에(런타임 리소스 오버레이(RRO)) 레이아웃 리소스를 적용하면 됩니다.
시스템 UI 탐색 메뉴, 상태 표시줄, 잠금 화면, 볼륨 대화상자와 같이 시스템에 속한 애플리케이션 외부 사용자 인터페이스입니다.
테마 테마를 상속하는 구성요소 및 앱의 디자인과 분위기를 결정하는 데 사용되는 색상과 스타일의 모음입니다.
사용자 환경(UX) 사용자 인터페이스(UI) 디자인 및 사용성의 환경입니다.

맞춤설정

시스템 UI 및 다른 핵심 시스템 애플리케이션의 AOSP 구현은 HMI 개발 프로세스를 시작하는 강력한 기반이 됩니다. OEM의 브랜딩 및 비즈니스 요구사항을 충족하고 현지 법규를 준수하기 위해 (주로 리소스 오버레이를 사용하는 방법을 통해) AOSP 구현을 수정하는 것을 맞춤설정이라고 합니다.

전반적으로 시스템이 유연하게 작동하도록 설계 및 구축되었지만, 서로 다른 구성요소를 다양한 정도로 맞춤설정해야 합니다.

  • 시스템 UI. OEM은 CDD, CTS 및 적용 가능한 다른 UX 가이드라인에서 부여하는 범위 내에서 AOSP 구현을 맞춤설정하거나 대체할 수 있습니다.

  • 히어로 앱 이외의 시스템 앱(참조라고도 함). OEM은 AOSP 구현을 맞춤설정하거나 대체할 수 있습니다.

  • 히어로 앱. 각 앱은 세부적인 맞춤설정 가이드라인과 함께 제공됩니다. OEM은 AOSP 구현을 채택한 후 가이드라인에서 부여하는 범위 내에서 맞춤설정하는 것이 좋습니다.

밀도 구성

UI 요소가 실제 디스플레이 구성에 따라 제대로 렌더링되도록 하려면 빌드 파일의 다음 항목과 같이 실제 밀도에 가장 근접하게 일치하는 버킷(디스플레이 측정항목)으로 밀도 속성을 설정해야 합니다.

PRODUCT_PROPERTY_OVERRIDES := \
        ro.sf.lcd_density=160

UX 제한 엔진

CarUxRestrictionsManager는 애플리케이션이 운전 상태와 관련된 변경사항을 수신 대기하여 사용자 환경을 적절하게 수정할 수 있는 후크를 제공합니다. OEM은 packages/services/Car/service/res/xml/car_ux_restrictions_map.xml의 구성 파일을 오버레이하여 시스템 동작에 영향을 줄 수 있습니다.

시스템 테마

색상 및 텍스트 스타일과 같은 시스템 전체 기본 항목 세트를 지정하는 테마는 DeviceDefault입니다. OEM은 DeviceDefault 테마를 수정하여 전체 맞춤설정 프로세스를 시작하는 것이 좋습니다. 기본적으로 시스템 UI와 AOSP의 모든 시스템 앱은 이 테마를 상속합니다. OEM에서 개발한 시스템 앱도 DeviceDefault를 상속하는 것이 좋습니다. 타사에서 개발한 앱은 DeviceDefault를 상속하지 않지만 androidx.car 라이브러리에서 제공되는 Theme.Car를 대신 사용합니다. 파일의 위치는 다음과 같습니다.

  • 코어. /frameworks/base/core/res/res/values/themes_device_defaults.xml
  • 색상. /frameworks/base/core/res/res/values/colors_car.xml
  • 스타일. /frameworks/base/core/res/res/values/styles_car.xml
  • 자동차 오버레이.
    /packages/services/Car/car_product/overlay/.../values/themes_device_defaults.xml

OEM은 공급업체 디렉터리의 car_product 디렉터리에 car_product 오버레이를 더욱 확장하는 병렬 오버레이 구조가 있어야 합니다.

테마 플레이그라운드 앱

이 앱은 모든 테마 속성을 한곳에서 시각화하여 DeviceDefault 테마를 맞춤설정하는 프로세스를 간소화합니다. 또한 개발자는 특정 스타일이 이 앱에서 렌더링되는 방식과 다른 시스템 앱에서 렌더링되는 방식을 비교하여 테마 문제를 빠르게 디버그할 수 있습니다. 이 앱은 다음 위치에서 사용할 수 있습니다.

  /packages/services/Car/tests/ThemePlayground

시스템 UI

시스템 UI는 /frameworks/base 아래에, 주로 /frameworks/base/packages/CarSystemUI에 모든 UI를 포함하고 있습니다. 여기에는 탐색 메뉴, 상태 표시줄, 잠금 화면, 볼륨 대화상자, 토스트 메시지, 사용자 선택도구, 권한 대화상자가 포함됩니다. OEM은 리소스 오버레이 및 테마 설정을 통해 광범위하게 시스템 UI 구성요소를 맞춤설정할 수 있으며, 이때 각 구성요소가 CDD, CTS 및 적용 가능한 다른 UX 가이드라인의 요구사항을 준수해야 합니다.

시스템 애플리케이션

Android Automotive에는 전반적인 시스템 기능에 중요한 일련의 핵심 시스템 애플리케이션이 있습니다. 그중에서 커뮤니케이션 센터, 미디어, 알림, 설정은 히어로 애플리케이션으로 간주됩니다.

  • 커뮤니케이션 센터
  • HVAC
  • IME(키보드)
  • 런처(홈 화면)
  • 로컬 미디어 플레이어
  • 미디어
  • 메신저
  • 알림
  • 라디오
  • 설정

홈 화면

차량 런처라고 하는 홈 화면은 HMI 환경의 방문 페이지입니다. AOSP 구현은 참조 역할만 하며 OEM은 AOSP 구현을 자체 구현으로 대체해야 합니다. 이때 필요에 따라 탐색, 미디어 재생, 통신 및 다른 시스템 상태를 결합하는 경우가 많습니다. 종종 차량 런처 앱이 시스템에서 사용할 수 있는 애플리케이션을 표시합니다. 최근, 패키지 변경사항, 헤드리스(런처 활동 없음) 앱과 같은 이벤트를 처리하는 방법을 알아보려면 참조 구현을 참고하세요.

알림

알림은 Android OS의 필수 구성요소이며, 동일한 구조체(사전 경고 알림, 알림 목록/센터, 알림 API, 순위, 인라인 작업 등)가 Android Automotive에 포함되었습니다. 자세한 내용은 휴대기기 알림 개요를 참고하세요. 자동차 사용 사례를 최적화하기 위해 휴대기기 알림 스택과 비교하여 다음과 같은 수정이 이루어졌습니다.

  • 사용자에게 표시되는 전체 알림 콘텐츠 감소. 진행 중인 미디어 재생, 진행 중인 탐색, 시스템 앱에 관한 '중요하지 않은'(중요도가 낮음 이하임) 포그라운드 서비스 알림이 중복되어(예: 미디어 상태를 표시하는 클러스터) 만들어졌거나 유용하지 않다고 파악하여 이러한 알림을 알림 목록/센터에서 삭제했습니다.

  • 길게 누르기, 스와이프 길이 기반 컨트롤과 같은 복잡한 컨텍스트 컨트롤을 삭제했습니다.

  • UX 제한 엔진 구성을 적용합니다.

    • 운전 상태에 따라 메시지 알림 콘텐츠 미리보기를 숨길 수도 있습니다.
    • 모든 문자열을 최대 길이로 제한했습니다.
  • 특히 Android 9 자동차를 위한 새로운 알림 카테고리를 추가했습니다(android.uid.system으로 실행되는 번들 시스템 앱에만 사용 가능).

  • CATEGORY_CAR_EMERGENCY. 알림 목록에서 순위가 가장 높습니다. 방해 금지 모드(DND) 컨트롤을 우회합니다.

  • CATEGORY_CAR_WARNING. 순위가 응급 상황보다는 낮으나 그 외 상황보다는 높습니다(DND 우회).
  • CATEGORY_CAR_INFORMATION. 나머지 알림과 함께 '중요도'와 날짜순에 따라 순위가 매겨집니다.

알림 API부터 UI까지 알림 스택의 엔드 투 엔드 구현은 히어로 앱으로 간주됩니다. 모든 HU에서 일관된 API 상호 운용성을 보장하고 업그레이드 가능성을 극대화하려면 OEM는 AOSP 구현을 채택하여 가볍게 맞춤설정하는 것이 좋습니다.

맞춤설정

표준 DeviceDefault 테마 설정 및 리소스 오버레이가 적용됩니다. 극히 제한된 수의 동작 맞춤설정 조절기는 다음 위치에 있습니다.

packages/apps/Car/Notification/res/values/config.xml

설정

설정 애플리케이션(자동차 설정)은 조절기를 노출하는 히어로 앱 중의 하나로, 사용자는 이 애플리케이션을 통해 Android OS의 다양한 측면과 자동차의 나머지 부분을 구성할 수 있습니다. 설정 애플리케이션은 각 주요 Android 버전과 밀접하게 연결된 200개 이상의 OS 기능을 노출합니다. 업그레이드를 가능하게 하고 단편화를 피하려면 OEM은 (구현을 포크하는 대신) AOSP 구현을 채택하여 맞춤설정하는 것이 좋습니다.

맞춤설정

설정 애플리케이션은 맞춤설정을 고려하고 여러 맞춤설정 방식을 제공합니다.

  • 테마 설정. 다음을 포함하여 각 환경설정 객체 유형을 렌더링할 방식을 시각적으로 맞춤설정할 수 있습니다.

    • Preference.DeviceDefault.CheckBoxPreference

    • Preference.DeviceDefault.DialogPreference.EditTextPreference

  • 계층 구조 맞춤설정. 다음과 같이 사용 설정합니다.

    • 임의의 루트 프래그먼트로 시작되도록 하려면 Settings/res/values/config.xml 파일의 config_settings_hierarchy_root_fragment 값을 오버레이합니다.

    • 순서, 그룹화, 텍스트, 아이콘과 같은 항목을 맞춤설정하려면 Settings/res/xml/*.xml을 오버레이합니다.

  • 정적 삽입. 오버레이 프로젝트를 설정할 때 OEM은 추가 프래그먼트 및 컨트롤러 클래스를 정의한 후 계층 구조에 추가하여 독점 화면을 추가할 수 있습니다.

  • 동적 삽입. 별도의 애플리케이션(apk)이 기본 설정 앱과 연결되어야 하는 설정 화면을 호스팅하는 경우 별도의 애플리케이션을 동적으로 삽입할 수 있습니다. 자세한 내용은 동적 환경설정을 참고하세요.

미디어

미디어는 MediaSessionMediaBrowser API를 구현하는 미디어 애플리케이션을 대신하여 프런트엔드 사용자 환경을 제공하는 히어로 앱입니다. 미디어 애플리케이션은 Spotify 및 Pandora 같은 서드 파티 앱일 수 있으며 블루투스(BT) 스트리밍 및 로컬 미디어와 같은 다른 미디어 소스일 수도 있습니다.

Android Auto(Projection)에서 수백 개의 미디어 앱을 사용할 수 있으며, 이러한 앱은 모두 Auto용 오디오 재생 제공의 설명대로 이러한 미디어 API를 구현합니다. 미디어 API는 주요 Android 버전마다, Androidx 라이브러리 출시를 통해 발전합니다. 모든 미디어 앱과 향후 Android 버전에서 API 상호 운용성을 보장하려면 OEM은 AOSP 구현을 채택하여 맞춤설정하는 것이 좋습니다.

맞춤설정

DeviceDefault 테마를 통한 표준 테마 설정은 미디어 앱에도 적용됩니다. 또한 맞춤설정이 UX 가이드라인의 범위 내에 있는 경우 리소스 오버레이로 디자인과 분위기를 추가로 맞춤설정할 수 있습니다.

다른 미디어 앱

USB 미디어 및 미디어 소스

가능한 범위 내에서 MediaSessionMediaBrowser API의 구현을 통해 이러한 미디어 소스를 미디어 앱에 연결하는 것이 좋습니다(모든 서드 파티 미디어 앱에 해당함). AOSP의 LocalMediaPlayer 앱을 참고하세요. 이 앱은 로컬 미디어 파일을 표시하고 미디어 앱에서 소스로 표시됩니다.