Matriks kompatibilitas

Bagian ini menjelaskan kerangka kerja dan matriks kompatibilitas perangkat serta skema matriks kompatibilitas. Sebagai aturan pencocokan, lihat Pencocokan Aturan.

Matriks kompatibilitas framework (FCM)

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

FCM system_ext dan FCM produk merupakan pelengkap dari FCM khusus perangkat (yang diinstal di partisi sistem).

  • FCM perangkat harus mencerminkan persyaratan modul dalam partisi sistem.
  • FCM system_ext harus mencerminkan persyaratan oleh modul di partisi system_ext.
  • Produk FCM harus mencerminkan persyaratan berdasarkan modul dalam partisi produk.

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

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 detail selengkapnya, lihat FCM Siklus proses.

Matriks kompatibilitas produk

FCM produk adalah file matriks kompatibilitas framework dalam produk partisi. Objek VINTF menggabungkan FCM produk dengan FCM di dalam system dan system_ext partisi pada waktu proses.

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 di aset sistem

FCM system_ext adalah file matriks kompatibilitas framework di system_ext partisi. Objek VINTF menggabungkan FCM system_ext dengan FCM di dalam sistem dan produk partisi pada waktu proses. Lihat matriks kompatibilitas produk untuk contoh file FCM system_ext.

Matriks kompatibilitas perangkat (DCM)

Matriks kompatibilitas perangkat menjelaskan serangkaian persyaratan perangkat dari framework (persyaratan yang diberlakukan 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 tersebut. Beberapa "wajib diisi" tag bisa hilang dari file sumber di pohon sumber Android dan ditulis oleh assemble_vintf pada waktu build. "Wajib diisi" tag harus ada di file terkait pada perangkat seluler.

?xml
Opsional. Elemen ini hanya memberikan informasi ke parser XML.
compatibility-matrix.version
Wajib diisi. Versi meta dari 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
Diperlukan untuk matriks kompatibilitas framework. Di Android 12 dan yang lebih tinggi, diizinkan dalam file matriks kompatibilitas framework di partisi product 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 diulangi. Mencantumkan satu HAL (HIDL atau native) yang disyaratkan oleh pemilik matriks kompatibilitas ({i>framework<i} atau perangkat) untuk saat ini. Entri HAL dibedakan dengan elemen <name>; mungkin ada beberapa entri HAL dengan nama yang sama (menyiratkan kondisi "dan").
compatibility-matrix.hal.format
Opsional. Nilai dapat berupa salah satu dari:
  • "hidl": HIDL HAL. Ini adalah defaultnya.
  • "aidl": HAL AIDL. Hanya berlaku pada meta-versi matrix kompatibilitas 2.0.
  • "native": HAL native.
compatibility-matrix.hal.optional
Atribut bersifat opsional dan defaultnya adalah salah (false). Menyatakan apakah HAL ini opsional bagi pemilik matriks kompatibilitas (framework atau perangkat). Jika <hal> entri ditandai sebagai opsional, artinya pemilik dapat berfungsi dengan HAL ini, jika ada, tetapi tidak mengharuskannya ada.
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 mendefinisikan versi apa dari pemilik matriks kompatibilitas ({i>framework<i} atau perangkat) yang diharapkan.

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

Untuk AIDL HAL, tidak boleh ada di perangkat yang menjalankan Android 11 dan yang lebih lama. Opsional di perangkat yang menjalankan versi yang lebih baru. Jika ditentukan, formatnya adalah salah satu dari berikut ini:
  • VERSION_MIN-VERSION_MAX
  • VERSION (setara dengan VERSION-VERSION)
Jika tidak ditentukan, nilainya akan ditetapkan secara default ke 1.
compatibility-matrix.hal.interface
Opsional, bisa diulangi. Daftar antarmuka yang diperlukan untuk HAL ini.
compatibility-matrix.hal.interface.name
Wajib diisi. Nama antarmuka.
compatibility-matrix.hal.interface.instance
Opsional, bisa diulangi. Daftar instance antarmuka ini yang diperlukan.
compatibility-matrix.hal.interface.regex-instance
Opsional, bisa diulangi. Daftar pola nama instance yang diperlukan di instance ini dalam antarmuka berbasis web yang sederhana. Gunakan Diperluas Regular Expression.
compatibility-matrix.kernel
Opsional, bisa diulangi. Menetapkan daftar konfigurasi kernel yang digunakan framework diperlukan di setiap versi {i>kernel<i}.
Beberapa <kernel> dengan <version> yang sama dapat untuk menyiratkan "dan" hubungan. Setiap <kernel> adalah "fragmen" dari persyaratan yang diaktifkan hanya jika <conditions> jika kondisi tertentu terpenuhi.
compatibility-matrix.kernel.version
Wajib diisi. Versi kernel. Formatnya adalah VERSION.MAJOR_REVISION.MINOR_REVISION. Versi dan revisi utama harus sama persis. Revisi kecil mendefinisikan versi LTS minimum kernel yang diharapkan oleh framework.
compatibility-matrix.kernel.condition
Opsional. Harus tidak ada untuk <kernel> pertama masing-masing . Menentukan daftar kondisi. Ketika kondisi-kondisi terpenuhi, persyaratan yang dinyatakan dalam fragmen <kernel> ini diaktifkan.
compatibility-matrix.kernel.config
Opsional, bisa diulangi. Mencantumkan CONFIG item yang harus cocok untuk versi {i>kernel<i} ini. Setiap item CONFIG merupakan nilai kunci pasangan; item konfigurasi dibedakan berdasarkan kunci.
compatibility-matrix.kernel.config.key
Wajib diisi. Nama kunci item CONFIG. Diawali dengan CONFIG_.
compatibility-matrix.kernel.config.value
Wajib diisi. Nilai item CONFIG. Format bergantung pada jenis:
  • string. Kutipan dihilangkan.
  • int. Desimal dan heksadesimal (harus diawali dengan 0x atau 0X)nilai diterima. Diinterpretasikan sebagai bilangan bulat 64-bit; overflow akan mengakibatkan pemotongan. (Parser menerima nilai dari -264 + 1 menjadi 264 - 1, bit ke-65 terpotong; untuk mengetahui detailnya, lihat strtoull halaman utama.)
  • range. Formatnya adalah [int]-[int], misalnya 10-20. Nilai heksadesimal diterima dan harus diawali dengan 0x atau 0X. Dua batas harus berupa 64-bit yang tidak ditandatangani bilangan bulat.
  • 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 diisi, dapat diulang. Menjelaskan persyaratan pada versi sepolicy. Sesuai dengan manifest.sepolicy.version. Setiap instance menentukan berbagai versi sepolicy.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Wajib diisi. Mendeklarasikan versi policydb yang digunakan framework Anda.
compatibility-matrix.avb.vbmeta-version
Opsional; hanya digunakan oleh matriks kompatibilitas framework. Mendeklarasikan AVB versi 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, persyaratan VNDK tidak dibuat image sistem.
compatibility-matrix.vendor-ndk.version
Wajib diisi. Bilangan bulat positif yang mendeklarasikan versi VNDK yang diperlukan oleh gambar vendor.
compatibility-matrix.vendor-ndk.library
Opsional, bisa diulangi. Mendeklarasikan kumpulan library VNDK yang diperlukan oleh gambar vendor. Semantik yang sama seperti manifest.vendor-ndk.library.
compatibility-matrix.system-sdk.version
Opsional, dapat mengulangi; hanya digunakan oleh matriks kompatibilitas perangkat. Mendeklarasikan persyaratan oleh aplikasi vendor pada versi SDK Sistem. Jika tidak ada, tidak ada System SDK dibuat pada image sistem.