OEM 디자인 토큰

OEM 디자인 토큰은 Material Design 시스템의 Android Automotive OS(AAOS) 구현입니다. OEM은 모바일 토큰 값의 알고리즘 방식 또는 사용자 선택 방식과 달리 디자인 토큰 값이 지정됩니다. 디자인 토큰은 디자인 시스템의 시각적 스타일을 구성하고 정적 값을 설명적인 이름으로 바꾸는 작고 반복되는 디자인 결정을 나타냅니다. 디자인 토큰은 Material Design 시스템에 의해 정의된 토큰과 유사합니다.

OEM 토큰 라이브러리

OEM 디자인 토큰은 아래 그림에 나와 있는 세 가지 구성요소로 이루어진 OEM 토큰 라이브러리를 통해 참조됩니다.

OEM 토큰 라이브러리 구성요소
그림 1. OEM 토큰 라이브러리 구성요소

정적 라이브러리

OEM 토큰 라이브러리의 정적 라이브러리 구성요소는 다음과 같이 토큰 값에 대한 액세스를 지원합니다.

  • 토큰의 OEM 값에 액세스하는 API를 제공합니다.
  • 선택을 통해 OEM 값을 사용하여 테마에서 토큰 참조를 재정의할 수 있도록 지원합니다.

공유 라이브러리

공유 라이브러리 구성요소는 다음을 정의합니다.

  • 라이브러리 이름.
  • OEM 토큰 값 사용 설정을 위한 부울 선택.
  • OEM 토큰 값을 제공하는 스타일.

이 공유 라이브러리 구성요소의 OEM 소유권을 수용하기 위해(OEM에 의해 정의된 패키지 이름 포함) OEM은 공유 라이브러리 구현의 재정의를 만들 수 있습니다.

공유 라이브러리 구현 재정의
그림 2. 공유 라이브러리 구현 재정의

OEM 공유 라이브러리

공유 라이브러리 구성요소의 OEM 재정의는 라이브러리의 OEM 소유권을 지원하는 한편 OEM 토큰 라이브러리의 다른 구성요소와의 호환성을 유지합니다. 후자를 위해, OEM이 패키지 이름 및 서명을 설정할 방법을 제공하고 수정되지 않은 공유 라이브러리의 구현은 그대로 둡니다.

공유 라이브러리의 재정의는 다음과 같이 정의할 수 있습니다.

override_android_app {
    name: "[OEM]-token-shared-lib",
    base: "token-shared-lib",
    package_name: "com.[OEM].sharedlib",
    rename_resources_package: false,
    certificate: …
}

토큰 값을 설정하려면 OEM 토큰 값 지정을 참고하세요.

OEM 공유 라이브러리 맞춤설정

OEM은 토큰 값에 대한 다양한 스킴(예: 모델 또는 드라이브 모드의 차이)을 지원하기 위해, 런타임 리소스 오버레이(RRO)를 사용하여 OEM 공유 라이브러리를 타겟팅하고 토큰에 동적 값을 제공할 수 있습니다. 자세한 내용은 런타임 시 앱 리소스 값 변경을 참고하세요.

토큰 값을 설정하려면 OEM 토큰 값 지정을 참고하세요.

OEM 토큰 값 지정

토큰 값을 지정하려면 OemStyle 스타일의 해당하는 속성을 필요한 값으로 설정합니다.

<resources>
    <style name="OemStyle">
        <item name="colorPrimary">#B0C5FF</item>
        <item name="colorOnPrimary">#002B76</item>
        <item name="colorPrimaryContainer">#003FA4</item>
        <item name="colorOnPrimaryContainer">#D9E2FF</item>
        …
    </style>
</resources>

OEM 값 선택

앱이 OEM에서 제공하는 토큰 값에 액세스할 수 있도록 하려면 OEM이 먼저 enable_oem_tokens 부울을 true로 구성하여 기본 토큰 값을 재정의하도록 선택해야 합니다.

RRO 토큰 값

OemStyle에서 토큰 값이 설정되는 방식과 비슷하게, RRO를 사용하여 스타일을 수정함으로써 다른 토큰 값을 제공할 수 있습니다.

<resources>
    <style name="OemStyle">
        <item name="com.android.oem.tokens:colorPrimary">#B0C5FF</item>
        <item name="com.android.oem.tokens:colorOnPrimary">#002B76</item>
        <item name="com.android.oem.tokens:colorPrimaryContainer">#003FA4</item>
        <item name="com.android.oem.tokens:colorOnPrimaryContainer">#D9E2FF</item>
        …
    </style>
</resources>

RRO는 공유 라이브러리 이름을 지정하여 스타일에서 공유 라이브러리 속성을 설정해야 합니다.

마지막 로드 구성

토큰 공유 라이브러리의 OEM 구현을 포함하는 시스템은 공유 라이브러리가 앱 클래스 뒤에 로드되도록 시스템을 구성해야 합니다. 이렇게 하려면 시스템의 config_sharedLibrariesLoadedAfterApp 구성에 라이브러리 이름(com.android.oem.tokens)을 포함해야 합니다. Google Automotive 서비스(GAS)에 액세스할 수 있는 경우 이 작업은 요구사항으로 적용됩니다.

<!-- The OEM token shared library will be loaded after app classes -->
<string-array name="config_sharedLibrariesLoadedAfterApp" translatable="false">
    <item>com.android.oem.tokens</item>
</string-array>

권장사항

OEM 토큰 라이브러리의 권장사항은 다음과 같습니다.

유연한 업데이트 전략 사용

업데이트에 유연성을 적용하려면 아래 전략을 참고하세요.

OEM 공유 라이브러리

시스템 이미지에 시스템 공유 라이브러리가 사전 설치되어 있어야 하므로, 기기에 라이브러리가 포함된 상태로 출고되거나 라이브러리가 OTA(무선 업데이트)의 일부로 추가되어야 합니다(자세한 내용은 OTA 업데이트 참고). 단, 시스템 이미지에 OEM 토큰 공유 라이브러리의 OEM 재정의 스텁 구현을 포함하면 OTA를 진행하지 않아도 나중에 올바르게 작동하는 구현 업데이트를 기기로 푸시할 수 있습니다.

공유 라이브러리 RRO

RRO를 시스템 앱으로 설치해야 할 필요는 없지만, 이렇게 하면 다음과 같은 유용한 동작이 구현됩니다.

  • 사용자가 로그인하지 않은 경우 앱 자동 업데이트.
  • 사용자가 제거할 수 없음(사용자는 업데이트만 제거할 수 있음).