Bu bölümde çerçeve ve cihaz uyumluluk matrisleri ve uyumluluk matrisi şeması açıklanmaktadır. Eşleşme kuralları için Eşleştirme Kuralları'na bakın.
Çerçeve uyumluluk matrisi (FCM)
Çerçeve uyumluluk matrisi (FCM), çerçevenin üzerinde çalıştığı cihazdaki 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 (derleme zamanında, çalışma zamanında ve VTS'de uygulanan gereksinimler) tarafından karşılanmalıdır.
System_ext FCM ve ürün FCM'si, cihaza özgü FCM'nin (sistem bölümünde yüklü) tamamlayıcılarıdır.
- Cihaz 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üllere göre gereksinimleri yansıtmalıdır.
FCM'lerin tümü, OEM'in 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ünde yüklü bir uygulama HAL arayüzünün satıcı uzantısını kullanıyorsa, HAL arayüzü gereksinimi ürün FCM'sinde bildirilmelidir.
Ö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 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 uyumluluk matrisi dosyasıdır. VINTF nesnesi, ürün FCM'sini sistemdeki FCM'lerle ve çalışma zamanında system_ext bölümleriyle 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 uyumluluk matrisi (DCM)
Cihaz uyumluluk matrisi, cihazın çerçeveden beklediği bir dizi gereksinimi açıklar (lansman sırasında ve OTA zamanında uygulanan gereksinimler).
Ö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. Android kaynak ağacındaki kaynak dosyada bazı "gerekli" etiketler eksik olabilir ve derleme sırası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 sürümü. Uyumluluk matrisinde beklenen öğeleri açıklar. XML sürümüyle ilgisi yok.
-
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 üzeri sürümlerde, ürün ve system_ext bölümlerindeki çerçeve uyumluluk matrisi dosyalarında izin verilir. Bu dosyanın Çerçeve Uyumluluk Matrisi Sürümünü (FCM Sürümü) belirtir. Bunu cihaza özel çerçeve uyumluluk matrisinde (yani
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE
) beyan etmeyin. -
compatibility-matrix.hal
- İsteğe bağlı ve tekrarlanabilir. Uyumluluk matrisinin (çerçeve veya cihaz) sahibi tarafından bulunması gereken tek bir HAL'yi (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 belirtir). -
compatibility-matrix.hal.format
- İsteğe bağlı. Değer aşağıdakilerden biri olabilir:
-
"hidl"
: HIDL HAL'ler. Bu varsayılandır. -
"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
- Öznitelik isteğe bağlıdır ve varsayılan olarak false olur. Bu HAL'ın 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şaretlenmişse, bu, sahibinin bu HAL ile (varsa) çalışabileceği ancak mevcut olmasını gerektirmediği anlamına gelir. -
compatibility-matrix.hal.name
- Gerekli. Bu HAL'in tam paket adı. Örnekler:
-
android.hardware.camera
(HIDL veya AIDL HAL) -
GLES
(yerel HAL, yalnızca isim gerektirir)
-
-
compatibility-matrix.hal.version
- Uyumluluk matrisinin (çerçeve veya cihaz) sahibinin hangi sürümleri beklediğini tanımlayan sürüm aralıklarının bir listesi (bkz. HAL eşleşmeleri ).
HIDL ve yerel HAL'ler için gerekliyse kopyalar olmadan tekrarlanabilir. Biçim aşağıdakilerden biridir:-
MAJOR . MINOR_MIN - MINOR_MAX
-
MAJOR . MINOR
(MAJOR . MINOR - MINOR
eşdeğerdir)
AIDL HAL'ler 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
ile eşdeğerdir)
1
olur. -
-
compatibility-matrix.hal.interface
- İsteğe bağlı, tekrarlanabilir. Bu HAL'in gerekli arayüzlerinin listesi.
-
compatibility-matrix.hal.interface.name
- Gerekli. 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üzde gerekli ö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 gerektirdiği çekirdek yapılandırmalarının bir listesini belirtin.
Aynı<version>
sahip birden fazla<kernel>
, "ve" ilişkisini ima etmek için mevcut olabilir. 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. Koşulların bir listesini belirtir. Koşullar karşılandığında bu<kernel>
parçasında belirtilen gereksinimler etkinleştirilir. -
compatibility-matrix.kernel.config
- İsteğe bağlı, tekrarlanabilir. Bu çekirdek sürümü için eşleşmesi gereken
CONFIG
öğelerini listeler. HerCONFIG
öğ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. Format türe bağlıdır:-
string
. Alıntılar çıkarılmıştır. -
int
. Ondalık ve onaltılık (0x
veya0X)
değerler kabul edilir. 64 bitlik bir tam sayı 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
. Format şu şekildedir[int]-[int]
, örneğin10-20
. Onaltılı değerler kabul edilir ve0x
veya0X
ile başlamalıdır. İki sınır işaretsiz 64 bitlik bir tamsayı olmalıdır. -
tristate
Geçerli değerlery
,m
ven
.
-
-
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 girişleri içerir. Yalnızca çerçeve uyumluluk matrisi tarafından kullanılır.
-
compatibility-matrix.sepolicy.sepolicy-version
- Gerekli, tekrarlanabilir. Sepolicy sürümündeki gereksinimi açıklar.
manifest.sepolicy.version
dosyasına karşılık gelir. Bir öğenin her örneği, bir dizi sepolicy versiyonunu tanımlar. -
compatibility-matrix.sepolicy.kernel-sepolicy-version
- Gerekli. Çerçevenin birlikte çalıştığı
policydb
veritabanı 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 gerekliliğini bildirir. Eksikse sistem görüntüsü üzerinde VNDK gereksinimi yapılmaz.
-
compatibility-matrix.vendor-ndk.version
- Gerekli. Satıcı görüntüsünün gerektirdiği VNDK sürümünü bildiren pozitif bir tam sayı.
-
compatibility-matrix.vendor-ndk.library
- İsteğe bağlı, tekrarlanabilir. Satıcı görüntüsünün gerektirdiği bir dizi VNDK kitaplığını bildirir.
manifest.vendor-ndk.library
ile aynı anlambilim. -
compatibility-matrix.system-sdk.version
- İsteğe bağlı olarak tekrarlanabilir; yalnızca cihaz uyumluluk matrisi tarafından kullanılır. Sistem SDK sürümlerindeki satıcı uygulamalarının gereksinimini bildirir. Eksikse sistem görüntüsü üzerinde Sistem SDK gereksinimi yapılmaz.