Matriks kompatibilitas

Bagian ini menjelaskan matriks kompatibilitas framework dan perangkat serta skema matriks kompatibilitas. Untuk aturan pencocokan, lihat Aturan Pencocokan.

Matriks kompatibilitas framework (FCM)

Matriks kompatibilitas framework (FCM) menjelaskan persyaratan framework di perangkat tempatnya berjalan. Matriks kompatibilitas framework terdiri dari matriks kompatibilitas sistem, matriks kompatibilitas produk, dan matriks kompatibilitas system_ext. Persyaratan FCM harus dipenuhi oleh manifes perangkat (persyaratan yang diterapkan pada waktu build, runtime, dan di VTS).

FCM system_ext dan FCM produk adalah pelengkap FCM khusus perangkat (diinstal di partisi sistem).

  • FCM perangkat harus mencerminkan persyaratan modul di partisi sistem.
  • FCM system_ext harus mencerminkan persyaratan menurut modul di partisi system_ext.
  • FCM produk harus mencerminkan persyaratan menurut modul dalam partisi produk.

Semua FCM harus selaras dengan modifikasi OEM pada framework di partisi sistem, produk, dan system_ext. Misalnya, jika aplikasi yang diinstal di partisi produk menggunakan ekstensi vendor antarmuka HAL, persyaratan antarmuka HAL harus dideklarasikan di FCM produk.

Contoh file matriks kompatibilitas sistem:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework" level="3">
    <hal>
        <name>android.hardware.camera</name>
        <version>1.0</version>
        <version>3.1-4</version>
        <interface>
            <name>ICameraProvider</name>
            <instance>default</instance>
            <regex-instance>[a-z_]+/[0-9]+</regex-instance>
        </interface>
    </hal>
    <hal>
        <name>android.hardware.nfc</name>
        <version>1.0</version>
        <interface>
            <name>INfc</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal optional="true">
        <name>android.hardware.graphics.composer</name>
        <version>2.1</version>
        <interface>
            <name>IComposer</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="aidl" optional="true">
        <name>android.hardware.light</name>
        <version>1-2</version>
        <interface>
            <name>ILights</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="native">
        <name>GL</name>
        <version>1.1</version>
        <version>3.0</version>
    </hal>
    <hal format="native">
        <name>EGL</name>
        <version>1.1</version>
    </hal>
    <kernel version="3.18.51">
        <!-- common configs -->
    </kernel>
    <kernel version="3.18.51">
        <!-- arm specific configs -->
        <condition>
            <config>
                <key>CONFIG_ARM</key>
                <value type="tristate">y</value>
            </config>
        <condition>
        <config>
            <key>CONFIG_A</key>
            <value type="string"></value>
        </config>
        <config>
            <key>CONFIG_B</key>
            <value type="tristate">y</value>
        </config>
    </kernel>
    <kernel version="4.1.22">
        <!-- common configs -->
        <config>
            <key>CONFIG_A</key>
            <value type="string">foo</value>
        </config>
        <config>
            <key>CONFIG_B2</key>
            <value type="int">1024</value>
        </config>
    </kernel>
    <sepolicy>
        <kernel-sepolicy-version>30</kernel-sepolicy-version>
        <sepolicy-version>25.0</sepolicy-version>
        <sepolicy-version>26.0-3</sepolicy-version>
    </sepolicy>
    <avb>
        <vbmeta-version>2.1</vbmeta-version>
    </avb>
    <xmlfile format="dtd">
        <name>media_profile</name>
        <version>1.0</version>
        <path>/system/etc/media_profile_V1_0.dtd</path>
    </xmlfile>
</compatibility-matrix>

Untuk mengetahui detail selengkapnya, lihat Siklus Proses FCM.

Matriks kompatibilitas produk

FCM produk adalah file matriks kompatibilitas framework di partisi produk. Objek VINTF menggabungkan FCM produk dengan FCM dalam partisi sistem dan system_ext saat runtime.

Contoh file FCM produk:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework">
    <hal>
        <name>vendor.foo.camera</name>
        <version>1.0</version>
        <interface>
            <name>IBetterCamera</name>
            <instance>default</instance>
        </interface>
    </hal>
</compatibility-matrix>

Matriks kompatibilitas System_ext

FCM system_ext adalah file matriks kompatibilitas framework di partisi system_ext. Objek VINTF menggabungkan FCM system_ext dengan FCM dalam partisi sistem dan produk saat runtime. Lihat matriks kompatibilitas produk untuk mengetahui contoh file FCM system_ext.

Matriks kompatibilitas perangkat (DCM)

Matriks kompatibilitas perangkat menjelaskan serangkaian persyaratan yang diharapkan perangkat dari framework (persyaratan yang diterapkan pada saat peluncuran dan waktu OTA).

Contoh file DCM:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="device">
    <hal>
        <name>android.hidl.manager</name>
        <version>1.0</version>
        <interface>
            <name>IServiceManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.memory</name>
        <version>1.0</version>
        <interface>
            <name>IMemory</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.allocator</name>
        <version>1.0</version>
        <interface>
            <name>IAllocator</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.framework.sensor</name>
        <version>1.0</version>
        <interface>
            <name>ISensorManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <vendor-ndk>
        <version>27</version>
    </vendor-ndk>
    <system-sdk>
        <version>27</version>
    </system-sdk>
</compatibility-matrix>

Skema matriks kompatibilitas

Bagian ini menjelaskan arti tag XML ini. Beberapa tag "required" dapat tidak ada dari file sumber dalam hierarki sumber Android dan ditulis oleh assemble_vintf pada waktu build. Tag "Wajib" harus ada dalam file yang sesuai di perangkat.

?xml
Opsional. Ini hanya memberikan informasi ke parser XML.
compatibility-matrix.version
Wajib diisi. Meta-versi matriks kompatibilitas ini. Menjelaskan elemen yang diharapkan dalam matriks kompatibilitas. Tidak terkait dengan versi XML.
compatibility-matrix.type
Wajib diisi. Jenis matriks kompatibilitas ini:
  • "device": Matriks kompatibilitas perangkat.
  • "framework": Matriks kompatibilitas framework.
manifest.level
Wajib untuk matriks kompatibilitas framework. Di Android 12 dan yang lebih tinggi, diizinkan dalam file matriks kompatibilitas framework di partisi produk dan system_ext. Menentukan Versi Matriks Kompatibilitas Framework (Versi FCM) file ini. Jangan deklarasikan ini dalam matriks kompatibilitas framework khusus perangkat (yaitu DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE).
compatibility-matrix.hal
Opsional dan dapat diulang. Mencantumkan satu HAL (HIDL atau native) yang diperlukan oleh pemilik matriks kompatibilitas (framework atau perangkat) untuk ada. Entri HAL dibedakan oleh elemen <name>; dapat ada beberapa entri HAL dengan nama yang sama (menunjukkan kondisi "dan").
compatibility-matrix.hal.format
Opsional. Nilai dapat berupa salah satu dari:
  • "hidl": HIDL HAL. Ini adalah defaultnya.
  • "aidl": HAL AIDL. Hanya valid pada meta-versi matriks kompatibilitas 2.0.
  • "native": HAL native.
compatibility-matrix.hal.optional (Android 15 atau yang lebih lama)
Atribut
bersifat opsional dan ditetapkan secara default ke salah (false). Menyatakan apakah HAL ini bersifat opsional bagi pemilik matriks kompatibilitas (framework atau perangkat). Jika entri <hal> ditandai sebagai opsional, artinya pemilik dapat menggunakan HAL ini, jika ada, tetapi tidak mengharuskannya ada.
Peringatan: Atribut ini tidak digunakan lagi setelah Android 15 dan tidak lagi memiliki efek apa pun. Jika HAL harus diinstal, persyaratan ini harus diterapkan dalam pengujian.
compatibility-matrix.hal.name
Wajib diisi. Nama paket lengkap HAL ini. Contoh:
  • android.hardware.camera (HIDL atau AIDL HAL)
  • GLES (HAL native, hanya memerlukan nama)
compatibility-matrix.hal.version
Daftar rentang versi (lihat kecocokan HAL) yang menentukan versi yang diharapkan oleh pemilik matriks kompatibilitas (framework atau perangkat).

Untuk HIDL dan HAL native, diperlukan, dapat diulang tanpa duplikat. Formatnya adalah salah satu dari berikut ini:
  • MAJOR.MINOR_MIN-MINOR_MAX
  • MAJOR.MINOR (setara dengan MAJOR.MINOR-MINOR)

Untuk HAL AIDL, tidak boleh ada di perangkat yang menjalankan Android 11 dan yang lebih lama. Opsional di perangkat yang menjalankan versi yang lebih baru. Jika ditentukan, format adalah salah satu dari berikut ini:
  • VERSION_MIN-VERSION_MAX
  • VERSION (setara dengan VERSION-VERSION)
Jika tidak ditentukan, nilai defaultnya adalah 1.
compatibility-matrix.hal.interface
Opsional, dapat diulang. Daftar antarmuka yang diperlukan dari HAL ini.
compatibility-matrix.hal.interface.name
Wajib diisi. Nama antarmuka.
compatibility-matrix.hal.interface.instance
Opsional, dapat diulang. Daftar instance antarmuka ini yang diperlukan.
compatibility-matrix.hal.interface.regex-instance
Opsional, dapat diulang. Daftar pola nama instance yang diperlukan di antarmuka ini. Gunakan format Ekspresi Reguler Ekstensi.
compatibility-matrix.kernel
Opsional, dapat diulang. Tentukan daftar konfigurasi kernel yang diperlukan framework pada setiap versi kernel.
Beberapa <kernel> dengan <version> yang sama dapat ada untuk menyiratkan hubungan "dan". Setiap <kernel> adalah "fragmen" persyaratan yang hanya diaktifkan jika <conditions> terpenuhi.
compatibility-matrix.kernel.version
Wajib diisi. Versi kernel. Formatnya adalah VERSION.MAJOR_REVISION.MINOR_REVISION. Versi dan revisi utama harus sama persis. Revisi minor menentukan versi LTS minimum kernel yang diharapkan framework.
compatibility-matrix.kernel.condition
Opsional. Tidak boleh ada untuk <kernel> pertama dari setiap versi. Menentukan daftar kondisi. Jika kondisi terpenuhi, persyaratan yang dinyatakan dalam fragmen <kernel> ini akan diaktifkan.
compatibility-matrix.kernel.config
Opsional, dapat diulang. Mencantumkan item CONFIG yang harus dicocokkan untuk versi kernel ini. Setiap item CONFIG adalah pasangan nilai kunci; item konfigurasi dibedakan menurut kunci.
compatibility-matrix.kernel.config.key
Wajib diisi. Nama kunci item CONFIG. Dimulai dengan CONFIG_.
compatibility-matrix.kernel.config.value
Wajib diisi. Nilai item CONFIG. Format bergantung pada jenis:
  • string. Tanda kutip dihilangkan.
  • int. Nilai desimal dan heksadesimal (harus dimulai dengan nilai 0x atau 0X) diterima. Ditafsirkan sebagai bilangan bulat 64-bit; overflow akan menyebabkan pemotongan. (Parser menerima nilai dari -264 + 1 hingga 264 - 1, bit ke-65 terpotong; untuk mengetahui detailnya, lihat halaman man strtoull.)
  • range. Formatnya adalah [int]-[int], misalnya 10-20. Nilai heksadesimal diterima dan harus diawali dengan 0x atau 0X. Dua batas harus berupa bilangan bulat 64-bit tanpa tanda tangan.
  • tristate. Nilai yang valid adalah y, m, dan n.
compatibility-matrix.kernel.config.value.type
Wajib diisi. Jenis nilai item CONFIG, salah satu dari:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Wajib diisi. Berisi semua entri terkait sepolicy. Hanya digunakan oleh matriks kompatibilitas framework.
compatibility-matrix.sepolicy.sepolicy-version
Wajib, dapat diulang. Menjelaskan persyaratan pada versi sepolicy. Sesuai dengan manifest.sepolicy.version. Setiap instance elemen menentukan rentang versi sepolicy.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Wajib diisi. Mendeklarasikan versi policydb yang digunakan framework.
compatibility-matrix.avb.vbmeta-version
Opsional; hanya digunakan oleh matriks kompatibilitas framework. Mendeklarasikan versi AVB yang digunakan untuk menandatangani system.img. Tidak digunakan lagi di Android 10.
compatibility-matrix.vendor-ndk
Opsional; hanya digunakan oleh matriks kompatibilitas perangkat. Mendeklarasikan persyaratan snapshot vendor VNDK. Jika tidak ada, tidak ada persyaratan VNDK yang dibuat di image sistem.
compatibility-matrix.vendor-ndk.version
Wajib diisi. Bilangan bulat positif yang mendeklarasikan versi VNDK yang diperlukan oleh image vendor.
compatibility-matrix.vendor-ndk.library
Opsional, dapat diulang. Mendeklarasikan sekumpulan library VNDK yang diperlukan oleh gambar vendor. Semantik yang sama dengan manifest.vendor-ndk.library.
compatibility-matrix.system-sdk.version
Opsional, dapat diulang; hanya digunakan oleh matriks kompatibilitas perangkat. Mendeklarasikan persyaratan oleh aplikasi vendor pada versi SDK Sistem. Jika tidak ada, tidak ada persyaratan System SDK yang dibuat pada image sistem.