車のディスプレイの互換性

車載ディスプレイの互換性により、スマートフォンやタブレットのアプリを車載デバイスで適切に動作させることができます。

以下のような機能があります。

  • DPI スケーリング: ディスプレイの DPI に基づいてアプリの UI 要素をスケーリングします。
  • アプリのレンダリングのセーフエリア: アプリのコンテンツをセーフエリア内に収め、システム UI 要素による隠蔽を回避します。
  • アプリの分類ロジック: 車載ディスプレイ互換性を必要とするアプリを特定します。

互換性機能

このプラットフォームには、車載ディスプレイでのアプリのレンダリングとスケーリングを最適化するためのメカニズムがいくつか用意されています。

DPI スケーリング

DPI スケーリング機能により、デバイス メーカーは、個々のアプリまたは Car Display Compat を必要とするすべてのアプリの密度 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. Car Display Compat を必要とするすべてのアプリのデフォルトのスケール値を設定するには、ディスプレイ 0 のデフォルトのスケールを <scale display="0">1.0</scale> に変更します。値は逆スケーリングの値です。たとえば、Car Display Compat が必要なアプリを 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,
    }
    

安全なアプリ領域

スマートフォンやタブレットのアプリは、Automotive にある大きなシステムバーを想定して設計されていないことがよくあります。これらのアプリは、システムバーまたはシステム オーバーレイの下にコンテンツを描画することを制限する必要があります。そうしないと、エンドユーザーから見えない領域にインタラクティブ要素がレンダリングされる可能性があります。

安全なアプリ領域は、スケーラブル 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:requiredtruefalse かは関係ありません)→ アプリに互換性は必要ありません
    • 機能が見つからない場合は、次のチェックに進みます。
  3. アプリのアクティビティ:
    • アプリにアクティビティがない場合(RRO、ヘッドレス アプリ、サービスなど)→ アプリに互換性は不要
    • アプリにアクティビティがある場合は、次のチェックに進みます。
  4. アプリケーション情報:
    • アプリが特権アプリの場合 → アプリに互換性は不要
    • アプリがシステムアプリ(FLAG_SYSTEM)の場合 → アプリに互換性は不要
    • それ以外の場合は、次のチェックに進みます。
  5. 署名情報:
    • アプリがプラットフォーム署名済み(Android フレームワークと同じ署名で署名されている)場合 → アプリに互換性は不要
    • それ以外の場合は、次のチェックに進みます。
  6. 代替の決定:
    • すべてのチェックに合格し、オプトアウトしていない場合 → アプリに互換性が必要

CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked をご覧ください。

デバイスのサポート

車載ディスプレイの互換性をサポートするデバイスは、機能宣言を使用してサポートを宣言しなければなりません。

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