Uyumluluk matrisleri

Bu bölümde çerçeve, cihaz uyumluluk matrisleri ve uyumluluk matrisi şeması açıklanmaktadır. Eşleşme kuralları için Eşleşme Kuralları başlıklı makaleyi inceleyin.

Çerçeve uyumluluk matrisi (FCM)

Çerçeve uyumluluk matrisi (FCM), çerçevenin çalıştığı cihazdaki koşullarını açıklar. Çerçeve uyumluluk matrisi, sistem uyumluluk matrisi, ürün uyumluluk matrisi ve system_ext uyumluluk matrisinden oluşur. FCM'nin şartları, cihaz manifesti tarafından karşılanmalıdır (derleme zamanında, çalışma zamanında ve VTS'de uygulanan şartlar).

system_ext FCM ve ürün FCM, cihaza özgü FCM'nin (sistem bölümüne yüklenir) tamamlayıcılarıdır.

  • Cihaz FCM'si, sistem bölümündeki modüllerin şartlarını yansıtmalıdır.
  • system_ext FCM, system_ext bölümündeki modüllere göre gereksinimleri yansıtmalıdır.
  • Ürün FCM'si, ürün bölümündeki modüllere göre gereksinimleri yansıtmalıdır.

Tüm FCM'ler, 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 HAL arayüzünün bir tedarikçi uzantısını kullanıyorsa HAL arayüzü koşulu ürün FCM'sinde belirtilmelidir.

Örnek sistem uyumluluk matrisi 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 bilgi için FCM yaşam döngüsü başlıklı makaleyi inceleyin.

Ürün uyumluluk matrisi

Ürün FCM'si, ürün bölümündeki bir çerçeve uyumluluk matrisi 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 uyumluluk matrisi dosyasıdır. VINTF nesnesi, system_ext FCM'yi çalışma zamanında sistemdeki 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 uyumluluğu matrisi (DCM)

Cihaz uyumluluk matrisi, cihazın çerçeveden beklediği bir dizi koşulu (lansman ve OTA zamanında uygulanan koşullar) açıklar.

Ö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ı "zorunlu" etiketler, Android kaynak ağacındaki kaynak dosyada eksik olabilir ve derleme sırasında assemble_vintf tarafından yazılabilir. "Zorunlu" etiketleri cihazdaki ilgili dosyalarda bulunmalıdır.

?xml
İsteğe bağlı. Yalnızca XML ayrıştırıcısına bilgi sağlar.
compatibility-matrix.version
Zorunlu. Bu uyumluluk matrisinin meta sürümü. Uyumluluk matrisinde beklenen öğeleri açıklar. XML sürümüyle alakasız.
compatibility-matrix.type
Zorunlu. Bu uyumluluk matrisinin türü:
  • "device": Cihaz uyumluluğu 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ümlerindeki framework uyumluluk matrisi dosyalarında 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 (ör. DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE) belirtmeyin.
compatibility-matrix.hal
İsteğe bağlıdır ve tekrarlanabilir. Uyumluluk matrisinin (çerçeve veya cihaz) sahibi tarafından bulunması gereken tek bir HAL'i (HIDL veya yerel) listeler. HAL girişleri bir <name> öğesiyle ayırt edilir; aynı ada sahip birden fazla HAL girişi olabilir ("ve" koşulunu ifade eder).
compatibility-matrix.hal.format
İsteğe bağlı. Değer şunlardan biri olabilir:
  • "hidl": HIDL HAL'leri. Bu, varsayılan seçenektir.
  • "aidl": AIDL HAL'ler. Yalnızca uyumluluk matrisi meta sürümü 2.0'da geçerlidir.
  • "native": yerel HAL'ler.
compatibility-matrix.hal.optional (Android 15 veya önceki sürümler)
Özelliği isteğe bağlıdır ve varsayılan olarak false değerine ayarlanır. Bu HAL'in, uyumluluk matrisinin (çerçeve veya cihaz) sahibi için isteğe bağlı olup olmadığını belirtir. Bir <hal> girişi isteğe bağlı olarak işaretlenmişse sahibin, varsa bu HAL ile çalışabileceği ancak bu HAL'nin mevcut olması gerekmediği anlamına gelir.
Uyarı: Bu özelliğin desteği Android 15'ten sonra sonlandırılmıştır ve artık herhangi bir etkisi yoktur. Yüklenmesi gereken HAL'ler varsa bu şart testlerde zorunlu kılınmalıdır.
compatibility-matrix.hal.name
Zorunlu. Bu HAL'in tam paket adı. Örnekler:
  • android.hardware.camera (HIDL veya AIDL HAL)
  • GLES (yerel HAL, yalnızca ad gerekir)
compatibility-matrix.hal.version
Uyumluluk matrisinin sahibinin (çerçeve veya cihaz) hangi sürümleri beklediğini tanımlayan sürüm aralıkları listesi (HAL eşleşmelerine bakın).

HIDL ve yerel HAL'ler için zorunludur, yinelenmeden tekrarlanabilir. Biçim aşağıdakilerden biri olmalıdır:
  • MAJOR.MINOR_MIN-MINOR_MAX
  • MAJOR.MINOR (MAJOR.MINOR-MINOR değerine eşdeğerdir)

AIDL HAL'ler için Android 11 ve önceki sürümleri çalıştıran cihazlarda bulunmamalıdır. Daha yeni sürümlerin yüklü olduğu cihazlarda isteğe bağlıdır. Belirtiliyse biçim aşağıdakilerden biridir:
  • VERSION_MIN-VERSION_MAX
  • VERSION (VERSION-VERSION değerine eşdeğerdir)
Belirtilmediği takdirde değer varsayılan olarak 1 olur.
compatibility-matrix.hal.interface
İsteğe bağlı, tekrarlanabilir. Bu HAL'in gerekli arayüzlerinin listesi.
compatibility-matrix.hal.interface.name
Zorunlu. Arayüzün adı.
compatibility-matrix.hal.interface.instance
İsteğe bağlı, tekrarlanabilir. Bu arayüzün gerekli örneklerinin listesi.
compatibility-matrix.hal.interface.regex-instance
İsteğe bağlı, tekrarlanabilir. Bu arayüzdeki zorunlu örnek adı kalıplarının listesi. Genişletilmiş Normal İfade biçimini kullanın.
compatibility-matrix.kernel
İsteğe bağlı, tekrarlanabilir. Çerçevenin her çekirdek sürümünde ihtiyaç duyduğu çekirdek yapılandırmalarının listesini belirtin.
"Ve" ilişkisini belirtmek için aynı <version> değerine sahip birden fazla <kernel> bulunabilir. Her <kernel>, yalnızca <conditions> karşılandığında etkinleştirilen koşulların bir "parçasıdır".
compatibility-matrix.kernel.version
Zorunlu. Çekirdek sürümü. Biçim VERSION.MAJOR_REVISION.MINOR_REVISION şeklindedir. Sürüm ve büyük düzeltme tam olarak eşleşmelidir. Küçük düzeltme, ç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> sürümünde bulunmamalıdır. Koşulların listesini belirtir. Koşullar karşılandığında bu <kernel> fragmanında belirtilen şartlar etkinleştirilir.
compatibility-matrix.kernel.config
İsteğe bağlı, tekrarlanabilir. Bu çekirdek sürümü için eşleştirilmesi gereken CONFIG öğelerini listeler. Her CONFIG öğesi bir anahtar/değer çiftidir; yapılandırma öğeleri anahtara göre ayırt edilir.
compatibility-matrix.kernel.config.key
Zorunlu. CONFIG öğesinin anahtar adı. CONFIG_ ile başlar.
compatibility-matrix.kernel.config.value
Zorunlu. CONFIG öğesinin değeri. Biçim, türe bağlıdır:
  • string. Tırnak işaretleri atlanır.
  • int. Ondalık ve on altılık (0x veya 0X) ile başlamalıdır) değerler kabul edilir. 64 bitlik bir tam sayı olarak yorumlanır. Aşırı dolum, kesmeyle sonuçlanır. (Ayrıştırıcı, -264 + 1 ile 264 - 1 arasındaki değerleri kabul eder. 65. bit kısaltılır. Ayrıntılar için strtoull man sayfasına bakın.)
  • range. Biçim [int]-[int]'dir (ör. 10-20). On altılık değerler kabul edilir ve 0x veya 0X ile başlamalıdır. İki sınır, imzasız 64 bit tam sayı olmalıdır.
  • tristate. Geçerli değerler y, m ve n'tır.
compatibility-matrix.kernel.config.value.type
Zorunlu. CONFIG öğesinin değerinin türü. Aşağıdakilerden biri olmalıdır:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Zorunlu. sepolicy ile ilgili tüm girişleri içerir. Yalnızca çerçeve uyumluluk matrisi tarafından kullanılır.
compatibility-matrix.sepolicy.sepolicy-version
Zorunlu, tekrarlanabilir. sepolicy sürümüyle ilgili koşulu açıklar. manifest.sepolicy.version değerine karşılık gelir. Bir öğenin her örneği, bir dizi güvenlik politikası sürümünü tanımlar.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Zorunlu. Çerçevenin çalıştığı policydb sürümünü belirtir.
compatibility-matrix.avb.vbmeta-version
İsteğe bağlıdır; yalnızca çerçeve uyumluluk matrisi tarafından kullanılır. system.img'yi imzalamak için kullanılan AVB sürümünü belirtir. Android 10'da desteği sonlandırılmıştır.
compatibility-matrix.vendor-ndk
İsteğe bağlıdır; yalnızca cihaz uyumluluğu matrisi tarafından kullanılır. VNDK tedarikçisi anlık görüntüsünün gerekliliğini belirtir. Eksikse sistem resminde VNDK şartı uygulanmaz.
compatibility-matrix.vendor-ndk.version
Zorunlu. Tedarikçi firma resmi tarafından gerekli olan VNDK sürümünü belirten pozitif bir tam sayı.
compatibility-matrix.vendor-ndk.library
İsteğe bağlı, tekrarlanabilir. Tedarikçi firma görüntüsünün gerektirdiği bir dizi VNDK kitaplığını tanımlar. manifest.vendor-ndk.library ile aynı anlambilim.
compatibility-matrix.system-sdk.version
İsteğe bağlı, tekrarlanabilir; yalnızca cihaz uyumluluğu matrisi tarafından kullanılır. Sistem SDK'sı sürümlerinde tedarikçi firma uygulamalarının şartını belirtir. Bu dosya yoksa sistem resmi için sistem SDK'sı gerekli değildir.