Matriks Kompatibilitas

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

Matriks kompatibilitas kerangka kerja (FCM)

Matriks kompatibilitas kerangka kerja (FCM) menjelaskan persyaratan kerangka kerja pada perangkat yang menjalankannya. Matriks kompatibilitas kerangka kerja terdiri dari matriks kompatibilitas sistem, matriks kompatibilitas produk , dan matriks kompatibilitas system_ext . Persyaratan FCM harus dipenuhi oleh manifes perangkat (persyaratan diberlakukan pada waktu build, waktu proses, dan di VTS).

FCM system_ext dan FCM produk merupakan pelengkap FCM khusus perangkat (dipasang di partisi sistem).

  • Perangkat FCM harus mencerminkan persyaratan modul di partisi sistem .
  • FCM system_ext harus mencerminkan persyaratan modul di partisi system_ext.
  • FCM produk harus mencerminkan persyaratan modul di partisi produk .

Semua FCM harus selaras dengan modifikasi OEM terhadap kerangka kerja di partisi sistem, produk, dan system_ext. Misalnya, jika aplikasi yang diinstal di partisi produk menggunakan ekstensi vendor antarmuka HAL, persyaratan antarmuka HAL harus dinyatakan 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 detail selengkapnya, lihat Siklus Hidup FCM .

Matriks kompatibilitas produk

Produk FCM adalah file matriks kompatibilitas kerangka kerja di partisi produk. Objek VINTF menggabungkan FCM produk dengan FCM di 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

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

Matriks kompatibilitas perangkat (DCM)

Matriks kompatibilitas perangkat menjelaskan serangkaian persyaratan yang diharapkan perangkat dari kerangka kerja (persyaratan diberlakukan saat peluncuran dan waktu OTA).

Contoh berkas 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 dari tag XML ini. Beberapa tag "wajib" mungkin hilang dari file sumber di pohon sumber Android dan ditulis oleh assemble_vintf pada waktu pembuatan. Tag "Wajib" harus ada di file terkait di perangkat.

?xml
Opsional. Ini hanya memberikan informasi ke parser XML.
compatibility-matrix.version
Diperlukan. Versi meta dari matriks kompatibilitas ini. Menjelaskan elemen yang diharapkan dalam matriks kompatibilitas. Tidak terkait dengan versi XML.
compatibility-matrix.type
Diperlukan. Jenis matriks kompatibilitas ini:
  • "device" : Matriks kompatibilitas perangkat.
  • "framework" : Matriks kompatibilitas kerangka kerja.
manifest.level
Diperlukan untuk matriks kompatibilitas kerangka kerja. Di Android 12 dan lebih tinggi, diperbolehkan dalam file matriks kompatibilitas framework di partisi product dan system_ext. Menentukan Versi Matriks Kompatibilitas Kerangka Kerja (Versi FCM) dari file ini. Jangan deklarasikan ini dalam matriks kompatibilitas kerangka kerja khusus perangkat (yaitu DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
Opsional dan dapat diulang. Mencantumkan satu HAL (HIDL atau asli) yang diperlukan oleh pemilik matriks kompatibilitas (kerangka kerja atau perangkat) untuk ada. Entri HAL dibedakan berdasarkan 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 standarnya.
  • "aidl" : AIDL HAL . Hanya valid pada matriks kompatibilitas meta-versi 2.0.
  • "native" : HAL asli.
compatibility-matrix.hal.optional
Atribut bersifat opsional dan defaultnya adalah false. Menyatakan apakah HAL ini opsional bagi pemilik matriks kompatibilitas (kerangka kerja atau perangkat). Jika entri <hal> ditandai sebagai opsional, artinya pemilik dapat bekerja dengan HAL ini, jika ada, namun tidak mengharuskannya untuk ada.
compatibility-matrix.hal.name
Diperlukan. Nama paket lengkap HAL ini. Contoh:
  • android.hardware.camera (HIDL atau AIDL HAL)
  • GLES (HAL asli, hanya memerlukan nama)
compatibility-matrix.hal.version
Daftar rentang versi (lihat kecocokan HAL ) yang menentukan versi apa yang diharapkan oleh pemilik matriks kompatibilitas (kerangka kerja atau perangkat).

Untuk HIDL dan HAL asli, diperlukan, dapat mengulang tanpa duplikat. Formatnya 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 pada perangkat yang menjalankan versi lebih baru. Jika ditentukan, formatnya 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, bisa diulang. Daftar antarmuka yang diperlukan HAL ini.
compatibility-matrix.hal.interface.name
Diperlukan. Nama antarmuka.
compatibility-matrix.hal.interface.instance
Opsional, bisa diulang. Daftar contoh yang diperlukan dari antarmuka ini.
compatibility-matrix.hal.interface.regex-instance
Opsional, bisa diulang. Daftar pola nama instance yang diperlukan pada antarmuka ini. Gunakan format Ekspresi Reguler yang Diperluas .
compatibility-matrix.kernel
Opsional, bisa diulang. Tentukan daftar konfigurasi kernel yang diperlukan kerangka kerja pada setiap versi kernel.
Beberapa <kernel> dengan <version> yang sama dapat ada untuk menyiratkan hubungan "dan". Setiap <kernel> adalah "fragmen" dari persyaratan yang diaktifkan hanya ketika <conditions> terpenuhi.
compatibility-matrix.kernel.version
Diperlukan. Versi kernel. Formatnya adalah VERSION . MAJOR_REVISION . MINOR_REVISION . Versi dan revisi besar harus sama persis. Revisi kecil menentukan versi LTS minimum dari kernel yang diharapkan oleh kerangka kerja.
compatibility-matrix.kernel.condition
Opsional. Tidak boleh ada untuk <kernel> pertama setiap versi. Menentukan daftar kondisi. Ketika kondisi terpenuhi, persyaratan yang dinyatakan dalam fragmen <kernel> ini akan diaktifkan.
compatibility-matrix.kernel.config
Opsional, bisa diulang. Mencantumkan item CONFIG yang harus cocok untuk versi kernel ini. Setiap item CONFIG adalah pasangan nilai kunci; item konfigurasi dibedakan berdasarkan kunci.
compatibility-matrix.kernel.config.key
Diperlukan. Nama kunci item CONFIG . Dimulai dengan CONFIG_ .
compatibility-matrix.kernel.config.value
Diperlukan. Nilai item CONFIG . Format tergantung pada jenis:
  • string . Kutipan dihilangkan.
  • int . Nilai desimal dan heksadesimal (harus dimulai dengan 0x atau 0X) diterima. Ditafsirkan sebagai bilangan bulat 64-bit; overflow mengakibatkan pemotongan. (Parser menerima nilai dari -2 64 + 1 hingga 2 64 - 1, bit ke-65 terpotong; untuk detailnya lihat halaman manual strtoull .)
  • range . Formatnya adalah [int]-[int] , misalnya 10-20 . Nilai heksadesimal diterima dan harus dimulai dengan 0x atau 0X . Dua batas harus berupa bilangan bulat 64-bit yang tidak ditandatangani.
  • tristate . Nilai yang valid adalah y , m dan n .
compatibility-matrix.kernel.config.value.type
Diperlukan. Jenis nilai item CONFIG , salah satu dari:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Diperlukan. Berisi semua entri terkait sepolicy. Hanya digunakan oleh matriks kompatibilitas kerangka kerja.
compatibility-matrix.sepolicy.sepolicy-version
Wajib, bisa mengulang. Menjelaskan persyaratan pada versi sepolicy. Sesuai dengan manifest.sepolicy.version . Setiap contoh elemen menentukan rentang versi sepolicy.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Diperlukan. Mendeklarasikan versi policydb yang digunakan oleh kerangka kerja tersebut.
compatibility-matrix.avb.vbmeta-version
Opsional; hanya digunakan oleh matriks kompatibilitas kerangka kerja. 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 pada citra sistem.
compatibility-matrix.vendor-ndk.version
Diperlukan. Bilangan bulat positif yang mendeklarasikan versi VNDK yang dibutuhkan oleh image vendor.
compatibility-matrix.vendor-ndk.library
Opsional, bisa diulang. Mendeklarasikan sekumpulan pustaka VNDK yang dibutuhkan oleh image vendor. Semantik yang sama dengan manifest.vendor-ndk.library .
compatibility-matrix.system-sdk.version
Opsional, bisa mengulang; hanya digunakan oleh matriks kompatibilitas perangkat. Mendeklarasikan persyaratan oleh aplikasi vendor pada versi System SDK. Jika tidak ada, tidak ada persyaratan SDK Sistem yang dibuat pada citra sistem.