자동차 디스플레이 호환성

자동차 디스플레이 호환성을 통해 휴대전화 및 태블릿 앱이 자동차 기기에서 잘 실행될 수 있습니다.

다음과 같은 기능이 있습니다.

  • DPI 확장: 디스플레이 DPI에 따라 앱 UI 요소를 확장합니다.
  • 앱 렌더링을 위한 안전 영역: 시스템 UI 요소에 의해 가려지지 않도록 안전 영역 내에 앱 콘텐츠를 포함합니다.
  • 앱 분류 로직: 자동차 디스플레이 호환성이 필요한 앱을 식별합니다.

호환성 기능

이 플랫폼은 자동차 디스플레이에서 앱 렌더링과 크기 조정을 최적화하는 여러 메커니즘을 제공합니다.

DPI 확장

DPI 조정 기능을 사용하면 기기 제조업체가 자동차 디스플레이 호환성이 필요한 개별 앱 또는 모든 앱의 밀도 DPI를 조정할 수 있습니다.

앱의 밀도 스케일링을 구성하려면 다음을 실행하세요.

  1. 구성 파일 /product/etc/display_compat_config.xml을 추가합니다.

    <?xml version="1.0" encoding="utf-8"?>
    <!--
        Each scale factor can have the following attributes
    
        display     (required) Specifies the displayId to which this scale factor will be applied.
        packageName (optional) Specifies the packageName to which the scale factor will be applied.
                    If omitted, the scaling will apply to all packages.
    
        For example:
        <scale display="0" packageName="com.android.car.media.localmediaplayer">0.5</scale>
    
        This means that only package `com.android.car.media.localmediaplayer` on display `0` will be scaled.
    -->
    <config>
    <scale display="0">1.0</scale>
    </config>
    
  2. 자동차 디스플레이 호환성이 필요한 모든 앱의 기본 스케일 값을 설정하려면 디스플레이 0의 기본 스케일을 <scale display="0">1.0</scale>로 변경하세요. 값은 역 스케일 값입니다. 예를 들어 자동차 디스플레이 호환성이 필요한 앱을 1.5배로 확장하려면 스케일 값을 (1 / 1.5) = 0.67로 설정합니다.

    <config>
        <scale display="0">0.67</scale>
    </config>
    
  3. 특정 앱의 스케일 값을 설정하려면 구성에 새 scale 요소를 추가합니다. 이 예시에서 YouTube Automotive는 1.43배로 확장됩니다 (예: (1 / 1.43) = 0.7).

    <config>
        <scale display="0">0.67</scale>
        <scale display="0" packageName="com.google.android.apps.automotive.youtube">0.7</scale>
    </config>
    

/product/etc/display_compat_config.xml를 변경할 때 시스템이 실행 중인 경우 새 구성이 적용되도록 캐시를 지워야 합니다. 캐시를 지우려면 다음 매크로를 사용하세요.

SECURE_SETTING_KEY="android.software.car.display_compatibility:settings:secure"
USER_ID_LIST=$(adb shell cmd user list -v | grep 'id=' | cut -d'=' -f2 | cut -d',' -f1)
for USER_ID in $USER_ID_LIST; do
    echo "Deleting Display Compat config for user: $USER_ID"
    adb shell settings delete secure --user $USER_ID $SECURE_SETTING_KEY
    sleep 1
    echo
done
  1. 구성 파일과 기능 선언을 AAOS 빌드에 추가합니다(예: vendor/OEM_NAME/products/displaycompat).

    # File: vendor/OEM_NAME/products/displaycompat/Android.bp
    
    prebuilt_etc {
        name: "display_compat_config",
        filename: "display_compat_config.xml",
        src: "display_compat_config.xml",
        product_specific: true,
    }
    

안전한 앱 영역

휴대전화 및 태블릿 앱은 자동차에 있는 대형 시스템 바로 설계되지 않는 경우가 많습니다. 이러한 앱은 시스템 표시줄이나 시스템 오버레이 아래에 콘텐츠를 그리는 것이 제한되어야 합니다. 그렇지 않으면 최종 사용자에게 가려진 영역에 대화형 요소를 렌더링할 수 있습니다.

안전한 앱 영역은 확장 가능한 UI SafeBounds를 사용하여 구현됩니다.

앱 분류 로직

CarPackageManager.requiresDisplayCompat(..)를 사용하여 앱 호환성을 향상하는 추가 기능을 빌드할 수 있습니다. 예를 들어 이 기능을 사용하여 뒤로 버튼이나 추가 UI를 추가할 수 있습니다.

앱 개발자는 앱의 매니페스트에 메타데이터를 포함하여 자동차 디스플레이 호환성을 선택할 수 있습니다.

<meta-data
    android:name="android.software.car.display_compatibility"
    android:value="true" />

시스템은 다음 논리를 사용하여 앱에 자동차 디스플레이 호환성 기능이 필요한지 평가합니다 (순서대로 평가됨).

  1. 매니페스트 메타데이터 android.software.car.display_compatibility:
    • android:value="true"앱에 호환성이 필요함
    • android:value="false"앱에 호환성이 필요하지 않음
    • 메타데이터가 누락된 경우 다음 확인으로 진행합니다.
  2. android.hardware.type.automotive 기능 사용:
    • 기능이 선언된 경우 (android:requiredtrue인지 false인지와 관계없음) → 앱에 호환성이 필요하지 않음
    • 기능이 누락된 경우 다음 확인으로 진행합니다.
  3. 앱 활동:
    • 앱에 활동이 없는 경우 (예: RRO, 헤드리스 앱, 서비스) → 앱에 호환성이 필요하지 않음
    • 앱에 활동이 있는 경우 다음 확인으로 진행합니다.
  4. 신청 정보:
    • 앱에 권한이 부여된 경우 → 앱에 호환성이 필요하지 않음
    • 앱이 시스템 앱인 경우 (FLAG_SYSTEM) → 앱에 호환성이 필요하지 않음
    • 그렇지 않으면 다음 확인으로 진행합니다.
  5. 서명 정보:
    • 앱이 플랫폼 서명 (Android 프레임워크와 동일한 서명으로 서명)된 경우 → 앱에 호환성이 필요하지 않음
    • 그렇지 않으면 다음 확인으로 진행합니다.
  6. 대체 결정:
    • 모든 검사를 통과하고 선택 해제하지 않은 경우 → 앱에 호환성 필요

CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked을 참고하세요.

기기 지원

자동차 디스플레이 호환성을 지원하는 기기는 기능 선언을 사용하여 지원을 선언해야 합니다.

<feature name="android.software.car.display_compatibility" />