Uyumluluk Matrisleri

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Bu bölümde, çerçeve ve aygıt uyumluluk matrisleri ile uyumluluk matrisi şeması açıklanmaktadır. Eşleşme kuralları için bkz. Eşleşme Kuralları .

Çerçeve uyumluluk matrisi (FCM)

Çerçeve uyumluluk matrisi (FCM), üzerinde çalıştığı cihazdaki çerçevenin gereksinimlerini açıklar. Çerçeve uyumluluk matrisi, sistem uyumluluk matrisi, ürün uyumluluk matrisi ve system_ext uyumluluk matrisinden oluşur . FCM'nin gereksinimleri, cihaz bildirimi tarafından karşılanmalıdır (gereksinimler derleme zamanında, çalışma zamanında ve VTS'de uygulanır).

system_ext FCM ve ürün FCM'si, aygıta özgü FCM'nin tamamlayıcılarıdır (sistem bölümünde kuruludur).

  • Aygıt FCM'si, sistem bölümündeki modüllerin gereksinimlerini yansıtmalıdır.
  • system_ext FCM, system_ext bölümündeki modüllerin gereksinimlerini yansıtmalıdır.
  • Ürün FCM'si, ürün bölümündeki modüllerin gereksinimlerini yansıtmalıdır.

Tüm FCM'ler, bir OEM'nin sistem, ürün ve system_ext bölümlerindeki çerçevede yaptığı değişikliklerle uyumlu olmalıdır. Örneğin, ürün bölümüne yüklenen bir uygulama, bir HAL arabiriminin satıcı uzantısını kullanıyorsa, HAL arabirim gereksinimi ürün FCM'sinde bildirilmelidir.

Örnek sistem uyumluluğu matris dosyası:

<?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>

Daha fazla ayrıntı için bkz. FCM Yaşam Döngüsü .

Ürün uyumluluk matrisi

Ürün FCM'si, ürün bölümündeki bir çerçeve uyumluluğu matris dosyasıdır. VINTF nesnesi, ürün FCM'sini çalışma zamanında sistem ve system_ext bölümlerindeki FCM'lerle birleştirir.

Örnek ürün FCM dosyası:

<?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>

System_ext uyumluluk matrisi

system_ext FCM, system_ext bölümündeki bir çerçeve uyumluluğu matris dosyasıdır. VINTF nesnesi, system_ext FCM'yi çalışma zamanında sistem ve ürün bölümlerindeki FCM'lerle birleştirir. Örnek bir system_ext FCM dosyası için ürün uyumluluk matrisine bakın.

Cihaz uyumluluk matrisi (DCM)

Cihaz uyumluluk matrisi, cihazın çerçeveden beklediği bir dizi gerekliliği açıklar (başlangıçta ve OTA zamanında uygulanan gereklilikler).

Örnek DCM dosyası:

<?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>

Uyumluluk matrisi şeması

Bu bölümde, bu XML etiketlerinin anlamı açıklanmaktadır. Bazı "gerekli" etiketler, Android kaynak ağacındaki kaynak dosyada eksik olabilir ve derleme zamanında assemble_vintf tarafından yazılabilir. Cihazdaki ilgili dosyalarda "gerekli" etiketler bulunmalıdır.

?xml
İsteğe bağlı. Yalnızca XML ayrıştırıcısına bilgi sağlar.
compatibility-matrix.version
Gerekli. Bu uyumluluk matrisinin meta versiyonu. Uyumluluk matrisinde beklenen öğeleri açıklar. XML sürümüyle ilgisiz.
compatibility-matrix.type
Gerekli. Bu uyumluluk matrisinin türü:
  • "device" : Cihaz uyumluluk matrisi.
  • "framework" : Çerçeve uyumluluk matrisi.
manifest.level
Çerçeve uyumluluk matrisi için gereklidir. Android 12 ve sonraki sürümlerde, ürün ve system_ext bölümlerinde çerçeve uyumluluğu matris dosyalarına izin verilir. Bu dosyanın Çerçeve Uyumluluk Matrisi Sürümünü (FCM Sürümü) belirtir. Bunu cihaza özgü çerçeve uyumluluk matrisinde beyan etmeyin (örn. DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
İsteğe bağlı ve tekrar edebilir. Uyumluluk matrisinin (çerçeve veya aygıt) sahibi tarafından bulunması gereken tek bir HAL'yi (HIDL veya yerel) listeler. HAL girişleri bir <name> öğesi ile ayırt edilir; aynı ada sahip birkaç HAL girişi olabilir ("ve" koşulunu ima eder).
compatibility-matrix.hal.format
İsteğe bağlı. Değer şunlardan biri olabilir:
  • "hidl" : HIDL HAL'ler. Bu varsayılandır.
  • "aidl" : AIDL HAL'leri . Yalnızca uyumluluk matrisi meta sürümü 2.0'da geçerlidir.
  • "native" : yerel HAL'ler.
compatibility-matrix.hal.optional
Öznitelik isteğe bağlıdır ve varsayılan olarak false olur. Bu HAL'nin uyumluluk matrisinin (çerçeve veya aygıt) sahibi için isteğe bağlı olup olmadığını belirtir. Bir <hal> girişi isteğe bağlı olarak işaretlenirse, bu, sahibinin varsa bu HAL ile çalışabileceği, ancak mevcut olmasını gerektirmediği anlamına gelir.
compatibility-matrix.hal.name
Gerekli. Bu HAL'ın tam paket adı. Örnekler:
  • android.hardware.camera (HIDL veya AIDL HAL)
  • GLES (yerel HAL, yalnızca ad gerektirir)
compatibility-matrix.hal.version
Uyumluluk matrisinin (çerçeve veya aygıt) sahibinin hangi sürümleri beklediğini tanımlayan bir sürüm aralıkları listesi (bkz. HAL eşleşmeleri ).

HIDL ve yerel HAL'ler için, gerekli, kopyalar olmadan tekrar edebilir. Biçim aşağıdakilerden biridir:
  • MAJOR . MINOR_MIN - MINOR_MAX
  • MAJOR . MINOR ( MAJOR . MINOR - MINOR eşdeğerdir)

AIDL HAL'leri için, Android 11 ve önceki sürümleri çalıştıran cihazlarda bulunmamalıdır. Daha sonraki sürümleri çalıştıran cihazlarda isteğe bağlıdır. Belirtilmişse, format aşağıdakilerden biridir:
  • VERSION_MIN - VERSION_MAX
  • VERSION ( VERSION - VERSION eşdeğeri)
Belirtilmezse, değer varsayılan olarak 1 olur.
compatibility-matrix.hal.interface
İsteğe bağlı, tekrar edebilir. Bu HAL'ın gerekli arabirimlerinin bir listesi.
compatibility-matrix.hal.interface.name
Gerekli. Arayüzün adı.
compatibility-matrix.hal.interface.instance
İsteğe bağlı, tekrar edebilir. Bu arayüzün gerekli örneklerinin bir listesi.
compatibility-matrix.hal.interface.regex-instance
İsteğe bağlı, tekrar edebilir. Bu arabirimdeki gerekli örnek adı kalıplarının bir listesi. Genişletilmiş Normal İfade biçimini kullanın.
compatibility-matrix.kernel
İsteğe bağlı, tekrar edebilir. Çerçevenin her çekirdek sürümünde gerektirdiği çekirdek yapılandırmalarının bir listesini belirtin.
"ve" ilişkisini ima etmek için aynı <version> ile birden çok <kernel> bulunabilir. Her <kernel> , yalnızca <conditions> karşılandığında etkinleştirilen gereksinimlerin bir "parçasıdır".
compatibility-matrix.kernel.version
Gerekli. Çekirdek sürümü. Biçim VERSION . MAJOR_REVISION . MINOR_REVISION . Sürüm ve ana revizyon tam olarak eşleşmelidir. Küçük revizyon, çerçevenin beklediği çekirdeğin minimum LTS sürümünü tanımlar.
compatibility-matrix.kernel.condition
İsteğe bağlı. Her sürümün ilk <kernel> için mevcut olmamalıdır. Bir koşul listesi belirtir. Koşullar karşılandığında, bu <kernel> parçasında belirtilen gereksinimler etkinleştirilir.
compatibility-matrix.kernel.config
İsteğe bağlı, tekrar edebilir. Bu çekirdek sürümü için eşleşmesi gereken CONFIG öğelerini listeler. Her CONFIG öğesi bir anahtar/değer çiftidir; yapılandırma öğeleri anahtarla ayırt edilir.
compatibility-matrix.kernel.config.key
Gerekli. CONFIG öğesinin anahtar adı. CONFIG_ ile başlar.
compatibility-matrix.kernel.config.value
Gerekli. CONFIG öğesinin değeri. Biçim, türe göre değişir:
  • string Alıntılar atlanmıştır.
  • int . Ondalık ve onaltılık ( 0x veya 0X) değerler kabul edilir. 64 bitlik bir tamsayı olarak yorumlanır; taşmalar kesintiye neden olur. (Ayrıştırıcı -2 64 + 1 ile 2 64 - 1 arasındaki değerleri kabul eder, 65. bit kesilir; ayrıntılar için strtoull kılavuz sayfasına bakın .)
  • range Biçim [int]-[int] , örneğin 10-20 . Onaltılık değerler kabul edilir ve 0x veya 0X ile başlamalıdır. İki sınır, işaretsiz 64 bitlik bir tamsayı olmalıdır.
  • tristate Geçerli değerler y , m ve n .
compatibility-matrix.kernel.config.value.type
Gerekli. CONFIG öğesinin değerinin türü, aşağıdakilerden biri:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Gerekli. Sepolicy ile ilgili tüm girdileri içerir. Yalnızca çerçeve uyumluluk matrisi tarafından kullanılır.
compatibility-matrix.sepolicy.sepolicy-version
Gerekli, tekrarlayabilir. Sepolicy sürümündeki gereksinimi açıklar. manifest.sepolicy.version karşılık gelir. Bir öğenin her örneği, bir dizi sepolicy sürümünü tanımlar.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Gerekli. Çerçevenin birlikte çalıştığı policydb sürümünü bildirir.
compatibility-matrix.avb.vbmeta-version
İsteğe bağlı; yalnızca çerçeve uyumluluk matrisi tarafından kullanılır. system.img imzalamak için kullanılan AVB sürümünü bildirir. Android 10'da kullanımdan kaldırıldı.
compatibility-matrix.vendor-ndk
İsteğe bağlı; yalnızca cihaz uyumluluk matrisi tarafından kullanılır. VNDK satıcı anlık görüntüsünün gereksinimini bildirir. Eksik ise, sistem görüntüsü üzerinde herhangi bir VNDK gereksinimi yapılmaz.
compatibility-matrix.vendor-ndk.version
Gerekli. Satıcı görüntüsünün gerektirdiği bir VNDK sürümünü bildiren pozitif bir tamsayı.
compatibility-matrix.vendor-ndk.library
İsteğe bağlı, tekrar edebilir. Satıcı görüntüsünün gerektirdiği bir dizi VNDK kitaplığını bildirir. manifest.vendor-ndk.library ile aynı semantik.
compatibility-matrix.system-sdk.version
İsteğe bağlı, tekrar edebilir; yalnızca cihaz uyumluluk matrisi tarafından kullanılır. Sistem SDK sürümlerinde satıcı uygulamalarına göre gereksinimi bildirir. Eksikse, sistem görüntüsünde herhangi bir Sistem SDK gereksinimi yapılmaz.
,

Bu bölümde, çerçeve ve aygıt uyumluluk matrisleri ile uyumluluk matrisi şeması açıklanmaktadır. Eşleşme kuralları için bkz. Eşleşme Kuralları .

Çerçeve uyumluluk matrisi (FCM)

Çerçeve uyumluluk matrisi (FCM), üzerinde çalıştığı cihazdaki çerçevenin gereksinimlerini açıklar. Çerçeve uyumluluk matrisi, sistem uyumluluk matrisi, ürün uyumluluk matrisi ve system_ext uyumluluk matrisinden oluşur . FCM'nin gereksinimleri, cihaz bildirimi tarafından karşılanmalıdır (gereksinimler derleme zamanında, çalışma zamanında ve VTS'de uygulanır).

system_ext FCM ve ürün FCM'si, aygıta özgü FCM'nin tamamlayıcılarıdır (sistem bölümünde kuruludur).

  • Aygıt FCM'si, sistem bölümündeki modüllerin gereksinimlerini yansıtmalıdır.
  • system_ext FCM, system_ext bölümündeki modüllerin gereksinimlerini yansıtmalıdır.
  • Ürün FCM'si, ürün bölümündeki modüllerin gereksinimlerini yansıtmalıdır.

Tüm FCM'ler, bir OEM'nin sistem, ürün ve system_ext bölümlerindeki çerçevede yaptığı değişikliklerle uyumlu olmalıdır. Örneğin, ürün bölümüne yüklenen bir uygulama, bir HAL arabiriminin satıcı uzantısını kullanıyorsa, HAL arabirim gereksinimi ürün FCM'sinde bildirilmelidir.

Örnek sistem uyumluluğu matris dosyası:

<?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>

Daha fazla ayrıntı için bkz. FCM Yaşam Döngüsü .

Ürün uyumluluk matrisi

Ürün FCM'si, ürün bölümündeki bir çerçeve uyumluluğu matris dosyasıdır. VINTF nesnesi, ürün FCM'sini çalışma zamanında sistem ve system_ext bölümlerindeki FCM'lerle birleştirir.

Örnek ürün FCM dosyası:

<?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>

System_ext uyumluluk matrisi

system_ext FCM, system_ext bölümündeki bir çerçeve uyumluluğu matris dosyasıdır. VINTF nesnesi, system_ext FCM'yi çalışma zamanında sistem ve ürün bölümlerindeki FCM'lerle birleştirir. Örnek bir system_ext FCM dosyası için ürün uyumluluk matrisine bakın.

Cihaz uyumluluk matrisi (DCM)

Cihaz uyumluluk matrisi, cihazın çerçeveden beklediği bir dizi gerekliliği açıklar (başlangıçta ve OTA zamanında uygulanan gereklilikler).

Örnek DCM dosyası:

<?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>

Uyumluluk matrisi şeması

Bu bölümde, bu XML etiketlerinin anlamı açıklanmaktadır. Bazı "gerekli" etiketler, Android kaynak ağacındaki kaynak dosyada eksik olabilir ve derleme zamanında assemble_vintf tarafından yazılabilir. Cihazdaki ilgili dosyalarda "gerekli" etiketler bulunmalıdır.

?xml
İsteğe bağlı. Yalnızca XML ayrıştırıcısına bilgi sağlar.
compatibility-matrix.version
Gerekli. Bu uyumluluk matrisinin meta versiyonu. Uyumluluk matrisinde beklenen öğeleri açıklar. XML sürümüyle ilgisiz.
compatibility-matrix.type
Gerekli. Bu uyumluluk matrisinin türü:
  • "device" : Cihaz uyumluluk matrisi.
  • "framework" : Çerçeve uyumluluk matrisi.
manifest.level
Çerçeve uyumluluk matrisi için gereklidir. Android 12 ve sonraki sürümlerde, ürün ve system_ext bölümlerinde çerçeve uyumluluğu matris dosyalarına izin verilir. Bu dosyanın Çerçeve Uyumluluk Matrisi Sürümünü (FCM Sürümü) belirtir. Bunu cihaza özgü çerçeve uyumluluk matrisinde beyan etmeyin (örn. DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
İsteğe bağlı ve tekrar edebilir. Uyumluluk matrisinin (çerçeve veya aygıt) sahibi tarafından bulunması gereken tek bir HAL'yi (HIDL veya yerel) listeler. HAL girişleri bir <name> öğesi ile ayırt edilir; aynı ada sahip birkaç HAL girişi olabilir ("ve" koşulunu ima eder).
compatibility-matrix.hal.format
İsteğe bağlı. Değer şunlardan biri olabilir:
  • "hidl" : HIDL HAL'ler. Bu varsayılandır.
  • "aidl" : AIDL HAL'leri . Yalnızca uyumluluk matrisi meta sürümü 2.0'da geçerlidir.
  • "native" : yerel HAL'ler.
compatibility-matrix.hal.optional
Öznitelik isteğe bağlıdır ve varsayılan olarak false olur. Bu HAL'nin uyumluluk matrisinin (çerçeve veya aygıt) sahibi için isteğe bağlı olup olmadığını belirtir. Bir <hal> girişi isteğe bağlı olarak işaretlenirse, bu, sahibinin varsa bu HAL ile çalışabileceği, ancak mevcut olmasını gerektirmediği anlamına gelir.
compatibility-matrix.hal.name
Gerekli. Bu HAL'ın tam paket adı. Örnekler:
  • android.hardware.camera (HIDL veya AIDL HAL)
  • GLES (yerel HAL, yalnızca ad gerektirir)
compatibility-matrix.hal.version
Uyumluluk matrisinin (çerçeve veya aygıt) sahibinin hangi sürümleri beklediğini tanımlayan bir sürüm aralıkları listesi (bkz. HAL eşleşmeleri ).

HIDL ve yerel HAL'ler için, gerekli, kopyalar olmadan tekrar edebilir. Biçim aşağıdakilerden biridir:
  • MAJOR . MINOR_MIN - MINOR_MAX
  • MAJOR . MINOR ( MAJOR . MINOR - MINOR eşdeğerdir)

AIDL HAL'leri için, Android 11 ve önceki sürümleri çalıştıran cihazlarda bulunmamalıdır. Daha sonraki sürümleri çalıştıran cihazlarda isteğe bağlıdır. Belirtilmişse, format aşağıdakilerden biridir:
  • VERSION_MIN - VERSION_MAX
  • VERSION ( VERSION - VERSION eşdeğeri)
Belirtilmezse, değer varsayılan olarak 1 olur.
compatibility-matrix.hal.interface
İsteğe bağlı, tekrar edebilir. Bu HAL'ın gerekli arabirimlerinin bir listesi.
compatibility-matrix.hal.interface.name
Gerekli. Arayüzün adı.
compatibility-matrix.hal.interface.instance
İsteğe bağlı, tekrar edebilir. Bu arayüzün gerekli örneklerinin bir listesi.
compatibility-matrix.hal.interface.regex-instance
İsteğe bağlı, tekrar edebilir. Bu arabirimdeki gerekli örnek adı kalıplarının bir listesi. Genişletilmiş Normal İfade biçimini kullanın.
compatibility-matrix.kernel
İsteğe bağlı, tekrar edebilir. Çerçevenin her çekirdek sürümünde gerektirdiği çekirdek yapılandırmalarının bir listesini belirtin.
"ve" ilişkisini ima etmek için aynı <version> ile birden çok <kernel> bulunabilir. Her <kernel> , yalnızca <conditions> karşılandığında etkinleştirilen gereksinimlerin bir "parçasıdır".
compatibility-matrix.kernel.version
Gerekli. Çekirdek sürümü. Biçim VERSION . MAJOR_REVISION . MINOR_REVISION . Sürüm ve ana revizyon tam olarak eşleşmelidir. Küçük revizyon, çerçevenin beklediği çekirdeğin minimum LTS sürümünü tanımlar.
compatibility-matrix.kernel.condition
İsteğe bağlı. Her sürümün ilk <kernel> için mevcut olmamalıdır. Bir koşul listesi belirtir. Koşullar karşılandığında, bu <kernel> parçasında belirtilen gereksinimler etkinleştirilir.
compatibility-matrix.kernel.config
İsteğe bağlı, tekrar edebilir. Bu çekirdek sürümü için eşleşmesi gereken CONFIG öğelerini listeler. Her CONFIG öğesi bir anahtar/değer çiftidir; yapılandırma öğeleri anahtarla ayırt edilir.
compatibility-matrix.kernel.config.key
Gerekli. CONFIG öğesinin anahtar adı. CONFIG_ ile başlar.
compatibility-matrix.kernel.config.value
Gerekli. CONFIG öğesinin değeri. Biçim, türe göre değişir:
  • string Alıntılar atlanmıştır.
  • int . Ondalık ve onaltılık ( 0x veya 0X) değerler kabul edilir. 64 bitlik bir tamsayı olarak yorumlanır; taşmalar kesintiye neden olur. (Ayrıştırıcı -2 64 + 1 ile 2 64 - 1 arasındaki değerleri kabul eder, 65. bit kesilir; ayrıntılar için strtoull kılavuz sayfasına bakın .)
  • range Biçim [int]-[int] , örneğin 10-20 . Onaltılık değerler kabul edilir ve 0x veya 0X ile başlamalıdır. İki sınır, işaretsiz 64 bitlik bir tamsayı olmalıdır.
  • tristate Geçerli değerler y , m ve n .
compatibility-matrix.kernel.config.value.type
Gerekli. CONFIG öğesinin değerinin türü, aşağıdakilerden biri:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Gerekli. Sepolicy ile ilgili tüm girdileri içerir. Yalnızca çerçeve uyumluluk matrisi tarafından kullanılır.
compatibility-matrix.sepolicy.sepolicy-version
Gerekli, tekrarlayabilir. Sepolicy sürümündeki gereksinimi açıklar. manifest.sepolicy.version karşılık gelir. Bir öğenin her örneği, bir dizi sepolicy sürümünü tanımlar.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Gerekli. Çerçevenin birlikte çalıştığı policydb sürümünü bildirir.
compatibility-matrix.avb.vbmeta-version
İsteğe bağlı; yalnızca çerçeve uyumluluk matrisi tarafından kullanılır. system.img imzalamak için kullanılan AVB sürümünü bildirir. Android 10'da kullanımdan kaldırıldı.
compatibility-matrix.vendor-ndk
İsteğe bağlı; yalnızca cihaz uyumluluk matrisi tarafından kullanılır. VNDK satıcı anlık görüntüsünün gereksinimini bildirir. Eksik ise, sistem görüntüsü üzerinde herhangi bir VNDK gereksinimi yapılmaz.
compatibility-matrix.vendor-ndk.version
Gerekli. Satıcı görüntüsünün gerektirdiği bir VNDK sürümünü bildiren pozitif bir tamsayı.
compatibility-matrix.vendor-ndk.library
İsteğe bağlı, tekrar edebilir. Satıcı görüntüsünün gerektirdiği bir dizi VNDK kitaplığını bildirir. manifest.vendor-ndk.library ile aynı semantik.
compatibility-matrix.system-sdk.version
İsteğe bağlı, tekrar edebilir; yalnızca cihaz uyumluluk matrisi tarafından kullanılır. Sistem SDK sürümlerinde satıcı uygulamalarına göre gereksinimi bildirir. Eksikse, sistem görüntüsünde herhangi bir Sistem SDK gereksinimi yapılmaz.
,

Bu bölümde, çerçeve ve aygıt uyumluluk matrisleri ile uyumluluk matrisi şeması açıklanmaktadır. Eşleşme kuralları için bkz. Eşleşme Kuralları .

Çerçeve uyumluluk matrisi (FCM)

Çerçeve uyumluluk matrisi (FCM), üzerinde çalıştığı cihazdaki çerçevenin gereksinimlerini açıklar. Çerçeve uyumluluk matrisi, sistem uyumluluk matrisi, ürün uyumluluk matrisi ve system_ext uyumluluk matrisinden oluşur . FCM'nin gereksinimleri, cihaz bildirimi tarafından karşılanmalıdır (gereksinimler derleme zamanında, çalışma zamanında ve VTS'de uygulanır).

system_ext FCM ve ürün FCM'si, aygıta özgü FCM'nin tamamlayıcılarıdır (sistem bölümünde kuruludur).

  • Aygıt FCM'si, sistem bölümündeki modüllerin gereksinimlerini yansıtmalıdır.
  • system_ext FCM, system_ext bölümündeki modüllerin gereksinimlerini yansıtmalıdır.
  • Ürün FCM'si, ürün bölümündeki modüllerin gereksinimlerini yansıtmalıdır.

Tüm FCM'ler, bir OEM'nin sistem, ürün ve system_ext bölümlerindeki çerçevede yaptığı değişikliklerle uyumlu olmalıdır. Örneğin, ürün bölümüne yüklenen bir uygulama, bir HAL arabiriminin satıcı uzantısını kullanıyorsa, HAL arabirim gereksinimi ürün FCM'sinde bildirilmelidir.

Örnek sistem uyumluluğu matris dosyası:

<?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>

Daha fazla ayrıntı için bkz. FCM Yaşam Döngüsü .

Ürün uyumluluk matrisi

Ürün FCM'si, ürün bölümündeki bir çerçeve uyumluluğu matris dosyasıdır. VINTF nesnesi, ürün FCM'sini çalışma zamanında sistem ve system_ext bölümlerindeki FCM'lerle birleştirir.

Örnek ürün FCM dosyası:

<?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>

System_ext uyumluluk matrisi

system_ext FCM, system_ext bölümündeki bir çerçeve uyumluluğu matris dosyasıdır. VINTF nesnesi, system_ext FCM'yi çalışma zamanında sistem ve ürün bölümlerindeki FCM'lerle birleştirir. Örnek bir system_ext FCM dosyası için ürün uyumluluk matrisine bakın.

Cihaz uyumluluk matrisi (DCM)

Cihaz uyumluluk matrisi, cihazın çerçeveden beklediği bir dizi gerekliliği açıklar (başlangıçta ve OTA zamanında uygulanan gereklilikler).

Örnek DCM dosyası:

<?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>

Uyumluluk matrisi şeması

Bu bölümde, bu XML etiketlerinin anlamı açıklanmaktadır. Bazı "gerekli" etiketler, Android kaynak ağacındaki kaynak dosyada eksik olabilir ve derleme zamanında assemble_vintf tarafından yazılabilir. Cihazdaki ilgili dosyalarda "gerekli" etiketler bulunmalıdır.

?xml
İsteğe bağlı. Yalnızca XML ayrıştırıcısına bilgi sağlar.
compatibility-matrix.version
Gerekli. Bu uyumluluk matrisinin meta versiyonu. Uyumluluk matrisinde beklenen öğeleri açıklar. XML sürümüyle ilgisiz.
compatibility-matrix.type
Gerekli. Bu uyumluluk matrisinin türü:
  • "device" : Cihaz uyumluluk matrisi.
  • "framework" : Çerçeve uyumluluk matrisi.
manifest.level
Çerçeve uyumluluk matrisi için gereklidir. Android 12 ve sonraki sürümlerde, ürün ve system_ext bölümlerinde çerçeve uyumluluğu matris dosyalarına izin verilir. Bu dosyanın Çerçeve Uyumluluk Matrisi Sürümünü (FCM Sürümü) belirtir. Bunu cihaza özgü çerçeve uyumluluk matrisinde beyan etmeyin (örn. DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
İsteğe bağlı ve tekrar edebilir. Uyumluluk matrisinin (çerçeve veya aygıt) sahibi tarafından bulunması gereken tek bir HAL'yi (HIDL veya yerel) listeler. HAL girişleri bir <name> öğesi ile ayırt edilir; aynı ada sahip birkaç HAL girişi olabilir ("ve" koşulunu ima eder).
compatibility-matrix.hal.format
İsteğe bağlı. Değer şunlardan biri olabilir:
  • "hidl" : HIDL HAL'ler. Bu varsayılandır.
  • "aidl" : AIDL HAL'leri . Yalnızca uyumluluk matrisi meta sürümü 2.0'da geçerlidir.
  • "native" : yerel HAL'ler.
compatibility-matrix.hal.optional
Öznitelik isteğe bağlıdır ve varsayılan olarak false olur. Bu HAL'nin uyumluluk matrisinin (çerçeve veya aygıt) sahibi için isteğe bağlı olup olmadığını belirtir. Bir <hal> girişi isteğe bağlı olarak işaretlenirse, bu, sahibinin varsa bu HAL ile çalışabileceği, ancak mevcut olmasını gerektirmediği anlamına gelir.
compatibility-matrix.hal.name
Gerekli. Bu HAL'ın tam paket adı. Örnekler:
  • android.hardware.camera (HIDL veya AIDL HAL)
  • GLES (yerel HAL, yalnızca ad gerektirir)
compatibility-matrix.hal.version
Uyumluluk matrisinin (çerçeve veya aygıt) sahibinin hangi sürümleri beklediğini tanımlayan bir sürüm aralıkları listesi (bkz. HAL eşleşmeleri ).

HIDL ve yerel HAL'ler için, gerekli, kopyalar olmadan tekrar edebilir. Biçim aşağıdakilerden biridir:
  • MAJOR . MINOR_MIN - MINOR_MAX
  • MAJOR . MINOR ( MAJOR . MINOR - MINOR eşdeğerdir)

AIDL HAL'leri için, Android 11 ve önceki sürümleri çalıştıran cihazlarda bulunmamalıdır. Daha sonraki sürümleri çalıştıran cihazlarda isteğe bağlıdır. Belirtilmişse, format aşağıdakilerden biridir:
  • VERSION_MIN - VERSION_MAX
  • VERSION ( VERSION - VERSION eşdeğeri)
Belirtilmezse, değer varsayılan olarak 1 olur.
compatibility-matrix.hal.interface
İsteğe bağlı, tekrar edebilir. Bu HAL'ın gerekli arabirimlerinin bir listesi.
compatibility-matrix.hal.interface.name
Gerekli. Arayüzün adı.
compatibility-matrix.hal.interface.instance
İsteğe bağlı, tekrar edebilir. Bu arayüzün gerekli örneklerinin bir listesi.
compatibility-matrix.hal.interface.regex-instance
İsteğe bağlı, tekrar edebilir. Bu arabirimdeki gerekli örnek adı kalıplarının bir listesi. Genişletilmiş Normal İfade biçimini kullanın.
compatibility-matrix.kernel
İsteğe bağlı, tekrar edebilir. Çerçevenin her çekirdek sürümünde gerektirdiği çekirdek yapılandırmalarının bir listesini belirtin.
"ve" ilişkisini ima etmek için aynı <version> ile birden çok <kernel> bulunabilir. Her <kernel> , yalnızca <conditions> karşılandığında etkinleştirilen gereksinimlerin bir "parçasıdır".
compatibility-matrix.kernel.version
Gerekli. Çekirdek sürümü. Biçim VERSION . MAJOR_REVISION . MINOR_REVISION . Sürüm ve ana revizyon tam olarak eşleşmelidir. Küçük revizyon, çerçevenin beklediği çekirdeğin minimum LTS sürümünü tanımlar.
compatibility-matrix.kernel.condition
İsteğe bağlı. Her sürümün ilk <kernel> için mevcut olmamalıdır. Bir koşul listesi belirtir. Koşullar karşılandığında, bu <kernel> parçasında belirtilen gereksinimler etkinleştirilir.
compatibility-matrix.kernel.config
İsteğe bağlı, tekrar edebilir. Bu çekirdek sürümü için eşleşmesi gereken CONFIG öğelerini listeler. Her CONFIG öğesi bir anahtar/değer çiftidir; yapılandırma öğeleri anahtarla ayırt edilir.
compatibility-matrix.kernel.config.key
Gerekli. CONFIG öğesinin anahtar adı. CONFIG_ ile başlar.
compatibility-matrix.kernel.config.value
Gerekli. CONFIG öğesinin değeri. Biçim, türe göre değişir:
  • string Alıntılar atlanmıştır.
  • int . Ondalık ve onaltılık ( 0x veya 0X) değerler kabul edilir. 64 bitlik bir tamsayı olarak yorumlanır; taşmalar kesintiye neden olur. (Ayrıştırıcı -2 64 + 1 ile 2 64 - 1 arasındaki değerleri kabul eder, 65. bit kesilir; ayrıntılar için strtoull kılavuz sayfasına bakın .)
  • range Biçim [int]-[int] , örneğin 10-20 . Onaltılık değerler kabul edilir ve 0x veya 0X ile başlamalıdır. İki sınır, işaretsiz 64 bitlik bir tamsayı olmalıdır.
  • tristate Geçerli değerler y , m ve n .
compatibility-matrix.kernel.config.value.type
Gerekli. CONFIG öğesinin değerinin türü, aşağıdakilerden biri:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Gerekli. Sepolicy ile ilgili tüm girdileri içerir. Yalnızca çerçeve uyumluluk matrisi tarafından kullanılır.
compatibility-matrix.sepolicy.sepolicy-version
Gerekli, tekrarlayabilir. Sepolicy sürümündeki gereksinimi açıklar. manifest.sepolicy.version karşılık gelir. Bir öğenin her örneği, bir dizi sepolicy sürümünü tanımlar.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Gerekli. Çerçevenin birlikte çalıştığı policydb sürümünü bildirir.
compatibility-matrix.avb.vbmeta-version
İsteğe bağlı; yalnızca çerçeve uyumluluk matrisi tarafından kullanılır. system.img imzalamak için kullanılan AVB sürümünü bildirir. Android 10'da kullanımdan kaldırıldı.
compatibility-matrix.vendor-ndk
İsteğe bağlı; yalnızca cihaz uyumluluk matrisi tarafından kullanılır. VNDK satıcı anlık görüntüsünün gereksinimini bildirir. Eksik ise, sistem görüntüsü üzerinde herhangi bir VNDK gereksinimi yapılmaz.
compatibility-matrix.vendor-ndk.version
Gerekli. Satıcı görüntüsünün gerektirdiği bir VNDK sürümünü bildiren pozitif bir tamsayı.
compatibility-matrix.vendor-ndk.library
İsteğe bağlı, tekrar edebilir. Satıcı görüntüsünün gerektirdiği bir dizi VNDK kitaplığını bildirir. manifest.vendor-ndk.library ile aynı semantik.
compatibility-matrix.system-sdk.version
İsteğe bağlı, tekrar edebilir; yalnızca cihaz uyumluluk matrisi tarafından kullanılır. Sistem SDK sürümlerinde satıcı uygulamalarına göre gereksinimi bildirir. Eksikse, sistem görüntüsünde Sistem SDK gereksinimi yapılmaz.