Kompatibilitas layar mobil

Kompatibilitas layar mobil memungkinkan aplikasi ponsel dan tablet berperforma baik di perangkat otomotif.

Fiturnya meliputi:

  • Penskalaan DPI: Menskalakan elemen UI aplikasi berdasarkan DPI layar.
  • Area aman untuk rendering aplikasi: Berisi konten aplikasi dalam area aman, sehingga tidak tertutup oleh elemen UI sistem.
  • Logika klasifikasi aplikasi: Mengidentifikasi aplikasi yang memerlukan Kompatibilitas Layar Mobil.

Fitur kompatibilitas

Platform ini menyediakan beberapa mekanisme untuk mengoptimalkan rendering dan penskalaan aplikasi pada layar otomotif.

Penskalaan DPI

Fitur penskalaan DPI memungkinkan produsen perangkat menskalakan DPI kepadatan aplikasi individual atau semua aplikasi yang memerlukan Kompatibilitas Layar Mobil.

Untuk mengonfigurasi penskalaan kepadatan aplikasi:

  1. Tambahkan file konfigurasi /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. Untuk menetapkan nilai skala default bagi semua aplikasi yang memerlukan Kompatibilitas Layar Mobil, ubah skala default untuk layar 0 menjadi <scale display="0">1.0</scale>. Nilainya adalah nilai skala terbalik. Misalnya, untuk menskalakan aplikasi yang memerlukan Kompatibilitas Layar Mobil hingga 1,5x, tetapkan nilai skala ke (1 / 1.5) = 0.67:

    <config>
        <scale display="0">0.67</scale>
    </config>
    
  3. Untuk menetapkan nilai skala untuk aplikasi tertentu, tambahkan elemen scale baru ke config. Dalam contoh ini, YouTube Automotive diskalakan menjadi 1,43x (misalnya, (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>
    

Jika sistem sedang berjalan saat Anda mengubah /product/etc/display_compat_config.xml, Anda harus menghapus cache agar konfigurasi baru dapat diterapkan. Gunakan makro ini untuk menghapus cache:

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. Tambahkan file konfigurasi dan deklarasi fitur ke build AAOS, misalnya, di 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,
    }
    

Area aplikasi yang aman

Aplikasi ponsel dan tablet sering kali tidak dirancang untuk kolom sistem besar yang ada di Automotive. Aplikasi ini harus dibatasi agar tidak menggambar konten di bawah kolom sistem atau overlay sistem. Jika tidak, elemen interaktif mungkin dirender di area yang terhalang dari pengguna akhir.

Area aplikasi yang aman diimplementasikan menggunakan UI yang Dapat Diskalakan SafeBounds.

Logika klasifikasi aplikasi

Anda dapat menggunakan CarPackageManager.requiresDisplayCompat(..) untuk membangun fungsionalitas tambahan yang meningkatkan kompatibilitas aplikasi. Misalnya, Anda dapat menggunakan fungsi ini untuk menambahkan tombol kembali atau UI tambahan.

Developer aplikasi dapat memilih untuk mengaktifkan kompatibilitas layar mobil dengan menyertakan metadata dalam manifes aplikasi:

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

Sistem mengevaluasi apakah aplikasi memerlukan fitur kompatibilitas tampilan mobil menggunakan logika berikut (dievaluasi secara berurutan):

  1. Metadata manifes android.software.car.display_compatibility:
    • Jika android:value="true"Aplikasi memerlukan compat
    • Jika android:value="false"Aplikasi tidak memerlukan kompatibilitas
    • Jika metadata tidak ada, lanjutkan ke pemeriksaan berikutnya.
  2. Menggunakan fitur android.hardware.type.automotive:
    • Jika fitur dideklarasikan (terlepas dari apakah android:required adalah true atau false) → Aplikasi tidak memerlukan kompatibilitas
    • Jika fitur tidak ada, lanjutkan ke pemeriksaan berikutnya.
  3. Aktivitas aplikasi:
    • Jika aplikasi tidak memiliki aktivitas (seperti RRO, aplikasi headless, atau layanan) → Aplikasi tidak memerlukan kompatibilitas
    • Jika aplikasi memiliki aktivitas, lanjutkan ke pemeriksaan berikutnya.
  4. Info aplikasi:
    • Jika aplikasi memiliki hak istimewa → Aplikasi tidak memerlukan kompatibilitas
    • Jika aplikasi adalah aplikasi sistem (FLAG_SYSTEM) → Aplikasi tidak memerlukan kompatibilitas
    • Jika tidak, lanjutkan ke pemeriksaan berikutnya.
  5. Info tanda tangan:
    • Jika aplikasi ditandatangani platform (ditandatangani dengan tanda tangan yang sama dengan framework Android) → Aplikasi tidak memerlukan kompatibilitas
    • Jika tidak, lanjutkan ke pemeriksaan berikutnya.
  6. Keputusan penggantian:
    • Jika semua pemeriksaan lolos tanpa memilih tidak ikut → Aplikasi memerlukan kompatibilitas

Lihat CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked.

Dukungan perangkat

Perangkat yang mendukung kompatibilitas layar mobil harus mendeklarasikan dukungan menggunakan deklarasi fitur:

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