Uyumluluk matrisleri ve manifestlerin iki çifti, çerçeve ve satıcı uygulamasının birlikte çalışabildiğini doğrulamak için uzlaştırılmalıdır. Bu doğrulama, çerçeve uyumluluk matrisi ile cihaz manifesti ve çerçeve manifesti ile cihaz uyumluluk matrisi eşleştiğinde başarılı olur.
Bu doğrulama; derleme zamanında, OTA güncelleme paketi oluşturma zamanında, başlatma zamanında ve VTS uyumluluk testlerinde yapılır.
Aşağıdaki bölümlerde, çeşitli bileşenler tarafından kullanılan eşleşme kuralları ayrıntılı olarak açıklanmaktadır.
Çerçeve uyumluluğu matrisi sürümü eşleşmeleri
Bir cihaz manifestini çerçeve uyumluluk matrisiyle eşleştirmek için manifest.target-level
tarafından belirtilen gönderim FCM sürümü, compatibility-matrix.level
tarafından belirtilen FCM sürümüne tam olarak eşit olmalıdır. Aksi takdirde eşleşme olmaz.
Çerçeve uyumluluğu matrisi libvintf
ile istendiğinde bu eşleşme her zaman başarılı olur. Bunun nedeni, libvintf
cihaz manifestosunu açar, gönderim FCM sürümünü alır ve çerçeve uyumluluğu matrisini bu gönderim FCM sürümünde (daha yüksek FCM sürümlerindeki uyumluluk matrislerinden bazı isteğe bağlı HAL'ler ile birlikte) döndürür.
HAL maçları
HAL eşleşme kuralı, bir manifest dosyasındaki hal
öğelerinin, ilgili uyumluluk matrisinin sahibi tarafından desteklendiği düşünülen sürümlerini tanımlar.
HIDL ve yerel HAL'ler
HIDL ve yerel HAL'ler için eşleşme kuralları şunlardır:
- Birden fazla
<hal>
öğesi tek bir VE ilişkisiyle değerlendirilir. <hal>
öğeleri, zorunlu olmadığını belirtmek için<hal optional="true">
içerebilir.- Aynı
<hal>
öğesi içindeki birden fazla<version>
öğesi VEYA ilişkisine sahiptir. İki veya daha fazla sürüm belirtilmişse yalnızca birinin uygulanması gerekir. (DRM modülü için başarılı HAL eşleşmesi başlıklı makaleye bakın.) - Aynı
<hal>
öğesindeki birden fazla<instance>
ve<regex-instance>
öğesi,<hal>
gerekli olduğunda tek bir VE ilişkisiyle değerlendirilir. (DRM modülü için başarılı HAL eşleşmesi başlıklı makaleye bakın.)
Örnek: Bir modül için başarılı HAL eşleşmesi
2.5 sürümündeki bir HAL için eşleşme kuralı şöyledir:
Matrix | Eşleşen manifest |
---|---|
2.5 |
2.5-2.∞. Uyumluluk matrisinde 2.5 , 2.5-5 ifadesinin kısaltmasıdır. |
2.5-7 |
2.5-2.∞. Aşağıdakileri gösterir:
2.5-7 ifadesi yer alan bir çerçeveyle uyumlu olmaya devam eder. |
Örnek: DRM modülü için başarılı HAL eşleşmesi
Çerçeve uyumluluk matrisinde, DRM HAL için aşağıdaki sürüm bilgileri belirtilir:
<hal> <name>android.hardware.drm <version>1.0</version> <version>3.1-2</version> <interface> <name>IDrmFactory</name> <instance>default</instance> <instance>specific</instance> </interface> </hal> <hal> <name>android.hardware.drm <version>2.0</version> <interface> <name>ICryptoFactory</name> <instance>default</instance> <regex-instance>[a-z]+/[0-9]+</regex-instance> </interface> </hal>
Bir satıcı, aşağıdaki örneklerden BİRİNİ uygulamalıdır:
android.hardware.drm@1.x::IDrmFactory/default // where x >= 0 android.hardware.drm@1.x::IDrmFactory/specific // where x >= 0
VEYA:
android.hardware.drm@3.y::IDrmFactory/default // where y >= 1 android.hardware.drm@3.y::IDrmFactory/specific // where y >= 1
AYRICA aşağıdaki tüm örnekleri uygulamalıdır:
android.hardware.drm@2.z::ICryptoFactory/default // where z >= 0 android.hardware.drm@2.z::ICryptoFactory/${INSTANCE} // where z >= 0 and ${INSTANCE} matches [a-z]+/[0-9]+ // e.g. legacy/0
AIDL Donanım Soyutlama Katmanları
Android ve sonraki sürümler, VINTF'deki AIDL HAL'leri için sürümleri destekler.
AIDL HAL'ler için eşleşme kuralları, HIDL ve yerel HAL'lerinkine benzer. Ancak ana sürümler yoktur ve HAL örneği başına tam olarak bir sürüm vardır (sürüm belirtilmemişse 1
):
- Birden fazla
<hal>
öğesi tek bir VE ilişkisiyle değerlendirilir. <hal>
öğeleri, zorunlu olmadığını belirtmek için<hal optional="true">
içerebilir.- Aynı
<hal>
içindeki birden çok<instance>
ve<regex-instance>
öğesi,<hal>
gerekli olduğunda tek bir VE ilişkisiyle değerlendirilir. (Birden fazla modül için başarılı HAL eşleşmesi başlıklı makaleye bakın.)
Örnek: Bir modül için başarılı HAL eşleşmesi
5. sürümdeki bir HAL için eşleşme kuralı şu şekildedir:
Matrix | Eşleşen manifest |
---|---|
5 |
5-∞. Uyumluluk matrisinde 5 , 5-5 kısaltmasıdır. |
5-7 |
5-∞. Aşağıdakileri gösterir:
5-7 ifadesini içeren bir çerçeveyle uyumlu kalır. |
Örnek: Birden fazla modül için başarılı HAL eşleşmesi
Çerçeve uyumluluğu matrisinde, titreşim ve kamera HAL'leri için aşağıdaki sürüm bilgileri belirtilir:
<hal> <name>android.hardware.vibrator <version>1-2</version> <interface> <name>IVibrator</name> <instance>default</instance> <instance>specific</instance> </interface> </hal> <hal> <name>android.hardware.camera <version>5</version> <interface> <name>ICamera</name> <instance>default</instance> <regex-instance>[a-z]+/[0-9]+</regex-instance> </interface> </hal>
Bir satıcı aşağıdaki tüm örnekleri uygulamalıdır:
android.hardware.vibrator.IVibrator/default // version >= 1 android.hardware.vibrator.IVibrator/specific // version >= 1 android.hardware.camera.ICamera/default // version >= 5 android.hardware.camera.ICamera/${INSTANCE} // with version >= 5, where ${INSTANCE} matches [a-z]+/[0-9]+ // e.g. legacy/0
Çekirdek eşleşmeleri
Çerçevenin uyumluluk matrisinin <kernel>
bölümünde, çerçevenin cihazdaki Linux çekirdeğiyle ilgili gereksinimleri açıklanır. Bu bilgiler, cihazın VINTF nesnesi tarafından bildirilen çekirdekle ilgili bilgilerle eşleştirilmelidir.
Çekirdek dallarını eşleştirme
Her çekirdek dalı soneki (örneğin, 5.4-r
), benzersiz bir çekirdek FCM sürümüyle (örneğin, 5) eşlenir. Eşleme, yayın harfleri (ör. R) ile FCM sürümleri (ör. 5) arasındaki eşlemeyle aynıdır.
Aşağıdakilerden biri doğruysa VTS testleri, cihazın çekirdek FCM sürümünü cihaz manifestinde (/vendor/etc/vintf/manifest.xml
) açıkça belirtmesini zorunlu kılar:
-
Çekirdek FCM sürümü, hedef FCM sürümünden farklıdır. Örneğin, yukarıda bahsedilen cihazın hedef FCM sürümü 4, çekirdek FCM sürümü ise 5'tir (çekirdek dalı soneki
r
). -
Çekirdek FCM sürümü 5'ten büyük veya 5'e eşit (çekirdek dalı soneki
r
).
VTS testleri, çekirdek FCM sürümü belirtilmişse çekirdek FCM sürümünün cihaz manifestosundaki hedef FCM sürümünden büyük veya ona eşit olmasını zorunlu kılar.
Örnek: Çekirdek dalını belirleme
Cihazın hedef FCM sürümü 4 (Android 10'da yayınlandı) ise ancak 4.19-r
dalından çekirdek çalıştırıyorsa cihaz manifestinde aşağıdakiler belirtilmelidir:
<manifest version="2.0" type="device" target-level="4"> <kernel target-level="5" /> </manifest>
VINTF nesnesi, FCM sürüm 5'te belirtilen 4.19-r
çekirdek dalındaki koşullara göre çekirdek uyumluluğunu kontrol eder. Bu şartlar, Android kaynak ağacındaki
kernel/configs/r/android-4.19
ile oluşturulur.
Örnek: GKI için çekirdek dalını belirleme
Cihazda Genel Çekirdek Görüntüsü (GKI) kullanılıyorsa ve /proc/version
çekirdek sürümü dizesi şu şekildeyse:
5.4.42-android12-0-00544-ged21d463f856
Ardından, VINTF nesnesi çekirdek sürümünden Android sürümünü alır ve çekirdek FCM sürümünü belirlemek için kullanır. Bu örnekte, android12
, çekirdek FCM sürümü 6 (Android 12'de yayınlandı) anlamına gelir.
Çekirdek sürüm dizesinin nasıl ayrıştırıldığıyla ilgili ayrıntılar için GKI sürüm oluşturma başlıklı makaleyi inceleyin.
Çekirdek sürümlerini eşleştirme
Bir matris, her biri şu biçimde farklı bir version
özelliğine sahip birden fazla <kernel>
bölümü içerebilir:
${ver}.${major_rev}.${kernel_minor_rev}
VINTF nesnesi, FCM'den yalnızca <kernel>
bölümünü dikkate alır. Bu bölüm, cihaz çekirdeğiyle aynı ${ver}
ve ${major_rev}
ile eşleşen FCM sürümüne sahip FCM'dir (yani version="${ver}.${major_rev}.${matrix_minor_rev}")
). Diğer bölümler yoksayılır. Ayrıca, çekirdekteki küçük düzeltme, uyumluluk matrisindeki (${kernel_minor_rev} >=
${matrix_minor_rev}
) bir değer olmalıdır. <kernel>
bölümü bu koşulları karşılamıyorsa eşleşme olmaz.
Örnek: Eşleştirme için şartları seçme
/system/etc/vintf
içindeki FCM'lerin aşağıdaki koşulları bildirdiği varsayımsal durumu göz önünde bulundurun (başlık ve altbilgi etiketleri çıkarılmıştır):
<!-- compatibility_matrix.3.xml --> <kernel version="4.4.107" level="3"/> <!-- See kernel/configs/p/android-4.4/ for 4.4-p requirements --> <kernel version="4.9.84" level="3"/> <!-- See kernel/configs/p/android-4.9/ for 4.9-p requirements --> <kernel version="4.14.42" level="3"/> <!-- See kernel/configs/p/android-4.14/ for 4.14-p requirements --> <!-- compatibility_matrix.4.xml --> <kernel version="4.9.165" level="4"/> <!-- See kernel/configs/q/android-4.9/ for 4.9-q requirements --> <kernel version="4.14.105" level="4"/> <!-- See kernel/configs/q/android-4.14/ for 4.14-q requirements --> <kernel version="4.19.42" level="4"/> <!-- See kernel/configs/q/android-4.19/ for 4.19-q requirements --> <!-- compatibility_matrix.5.xml --> <kernel version="4.14.180" level="5"/> <!-- See kernel/configs/r/android-4.14/ for 4.14-r requirements --> <kernel version="4.19.123" level="5"/> <!-- See kernel/configs/r/android-4.19/ for 4.19-r requirements --> <kernel version="5.4.41" level="5"/> <!-- See kernel/configs/r/android-5.4/ for 5.4-r requirements -->
Hedef FCM sürümü, çekirdek FCM sürümü ve çekirdek sürümü birlikte FCM'lerden çekirdek gereksinimlerini seçer:
Hedef FCM sürümü | Çekirdek FCM sürümü | Çekirdek sürümü | Şununla eşleşir: |
---|---|---|---|
3 (P) | Belirtilmedi | 4.4.106 | Eşleşme yok (küçük sürüm uyuşmazlığı) |
3 (P) | Belirtilmedi | 4.4.107 | 4.4-p |
3 (P) | Belirtilmedi | 4.19.42 | 4.19-q (tablodan sonraki nota bakın) |
3 (P) | Belirtilmedi | 5.4.41 | 5.4-r (tablodan sonraki nota bakın) |
3 (P) | 3 (P) | 4.4.107 | 4.4-p |
3 (P) | 3 (P) | 4.19.42 | Eşleşme yok (4.19-p çekirdek dalı yok) |
3 (P) | 4 (Q) | 4.19.42 | 4.19-q |
4 (Q) | Belirtilmedi | 4.4.107 | Eşleşme yok (4.4-q çekirdek dalı yok) |
4 (Q) | Belirtilmedi | 4.9.165 | 4.9-q |
4 (Q) | Belirtilmedi | 5.4.41 | 5.4-r (tablodan sonraki nota bakın) |
4 (Q) | 4 (Q) | 4.9.165 | 4.9-q |
4 (Q) | 4 (Q) | 5.4.41 | Eşleşme yok (5.4-q çekirdek dalı yok) |
4 (Q) | 5 (R) | 4.14.105 | 4.14-r |
4 (Q) | 5 (R) | 5.4.41 | 5.4-r |
5 (R) | Belirtilmedi | herhangi | VTS başarısız oluyor (hedef FCM sürümü 5 için çekirdek FCM sürümü belirtilmelidir) |
5 (R) | 4 (Q) | herhangi | VTS başarısız oluyor (çekirdek FCM sürümü, hedef FCM sürümünden düşük) |
5 (R) | 5 (R) | 4.14.180 | 4.14-r |
Çekirdek yapılandırmalarını eşleştirme
<kernel>
bölümü eşleşirse config
öğeleri /proc/config.gz
ile eşleştirilmeye çalışılarak işleme devam edilir. Uyumluluk matrisindeki her yapılandırma öğesi için yapılandırmanın mevcut olup olmadığını görmek üzere /proc/config.gz
aranır. Bir yapılandırma öğesi, eşleşen <kernel>
bölümünün uyumluluk matrisinde n
olarak ayarlandığında /proc/config.gz
içinde bulunmamalıdır. Son olarak, uyumluluk matrisinde yer almayan bir yapılandırma öğesi /proc/config.gz
içinde bulunabilir veya bulunmayabilir.
Örnek: Çekirdek yapılandırmalarını eşleştirme
<value type="string">bar</value>
eşleşme"bar"
. Uyumluluk matrisinde tırnak işaretleri yoksayılıyor ancak/proc/config.gz
içinde mevcut.<value type="int">4096</value>
,4096
,0x1000
veya0X1000
ile eşleşir.<value type="int">0x1000</value>
,4096
,0x1000
veya0X1000
ile eşleşir.<value type="int">0X1000</value>
,4096
,0x1000
veya0X1000
ile eşleşir.<value type="tristate">y</value>
eşleşmey
.<value type="tristate">m</value>
eşleşmem
.<value type="tristate">n</value>
, yapılandırma öğesinin/proc/config.gz
içinde OLMAMASI gerektiği anlamına gelir.<value type="range">1-0x3</value>
;1
,2
veya3
ya da onaltılık eşdeğeriyle eşleşir.
Örnek: Başarılı çekirdek eşleşmesi
FCM sürüm 1 ile uyumlu bir çerçeve matrisinde aşağıdaki çekirdek bilgileri bulunur:
<kernel version="4.14.42"> <config> <key>CONFIG_TRI</key> <value type="tristate">y</value> </config> <config> <key>CONFIG_NOEXIST</key> <value type="tristate">n</value> </config> <config> <key>CONFIG_DEC</key> <value type="int">4096</value> </config> <config> <key>CONFIG_HEX</key> <value type="int">0XDEAD</value> </config> <config> <key>CONFIG_STR</key> <value type="string">str</value> </config> <config> <key>CONFIG_EMPTY</key> <value type="string"></value> </config> </kernel>
Önce çekirdek dalı eşleştirilir. Çekirdek dalı, cihaz manifestosunda manifest.kernel.target-level
içinde belirtilir. Bu, ilki belirtilmemişse varsayılan olarak manifest.level
olur:
- Cihaz manifestindeki çekirdek dalı 1 ise işlem bir sonraki adıma geçer ve çekirdek sürümü kontrol edilir.
- Cihaz manifestindeki çekirdek dalı 2 ise matrisle eşleşme olmaz. VINTF nesneleri FCM sürüm 2'deki matristen çekirdek gereksinimlerini okur.
Ardından, çekirdek sürümü eşleştirilir. uname()
içindeki bir cihaz rapor veriyorsa:
- 4.9.84 (
<kernel version="4.9.x">
ile ayrı bir çekirdek bölümü olmadığı sürece matrisle eşleşmez, buradax <= 84
) - 4.14.41 (matrisle eşleşmiyor,
version
'dan küçük) - 4.14.42 (matrisle eşleşme)
- 4.14.43 (matrisle eşleşme)
- 4.1.22 (
<kernel version="4.1.x">
içeren ayrı bir çekirdek bölümü olmadığı sürece matrisle eşleşmez, buradax <= 22
)
Uygun <kernel>
bölümü seçildikten sonra, n
dışında bir değere sahip her <config>
öğesi için karşılık gelen giriş /proc/config.gz
içinde bulunmalıdır. n
değerine sahip her <config>
öğesi için karşılık gelen giriş /proc/config.gz
içinde bulunmamalıdır.
<value>
öğesinin içeriği, satır sonu karakterine veya #
öğesine kadar olan, eşittir işaretinden sonraki metinle (tırnak işaretleri dahil) tam olarak eşleşmeli ve baştaki ve sondaki boşluklar kesilmelidir.
Aşağıdaki çekirdek yapılandırması, başarılı bir eşleşmeye örnektir:
# comments don't matter CONFIG_TRI=y # CONFIG_NOEXIST shouldn't exist CONFIG_DEC = 4096 # trailing comments and whitespaces are fine CONFIG_HEX=57005 # 0XDEAD == 57005 CONFIG_STR="str" CONFIG_EMPTY="" # empty string must have quotes CONFIG_EXTRA="extra config items are fine too"
Aşağıdaki çekirdek yapılandırması, eşleşmenin başarısız olduğu bir örnektir:
CONFIG_TRI="y" # mismatch: quotes CONFIG_NOEXIST=y # mismatch: CONFIG_NOEXIST exists CONFIG_HEX=0x0 # mismatch; value doesn't match CONFIG_DEC="" # mismatch; type mismatch (expect int) CONFIG_EMPTY=1 # mismatch; expects "" # mismatch: CONFIG_STR is missing
SEPolicy eşleşmeleri
SEPolicy için aşağıdaki eşleşmeler gerekir:
<sepolicy-version>
, her ana sürüm için küçük sürümlerin kapalı bir aralığını tanımlar. Cihaz tarafından bildirilen SEPolicy sürümünün, çerçeveyle uyumlu olması için aşağıdaki aralıklardan birinde olması gerekir. Eşleşme kuralları, HAL sürümlerine benzer. SEPolicy sürümü, aralığın minimum sürümünden yüksek veya ona eşitse eşleşme olur. Maksimum sürüm yalnızca bilgilendirme amaçlıdır.<kernel-sepolicy-version>
(yani Policy DB sürümü), cihaz tarafından bildirilensecurity_policyvers()
değerinden küçük olmalıdır.
Örnek: Başarılı SEPolicy eşleşmesi
Çerçeve uyumluluğu matrisinde aşağıdaki SEPolicy bilgileri belirtilir:
<sepolicy> <kernel-sepolicy-version>30</kernel-sepolicy-version> <sepolicy-version>25.0</sepolicy-version> <sepolicy-version>26.0-3</sepolicy-version> </sepolicy>
Cihazda:
security_policyvers()
tarafından döndürülen değer 30'dan büyük veya 30'a eşit olmalıdır. Aksi takdirde eşleşme olmaz. Örneğin:- Bir cihaz 29 döndürürse eşleşme olmaz.
- Bir cihaz 31 değerini döndürürse eşleşme vardır.
- SEPolicy sürümü 25.0-∞ veya 26.0-∞ olmalıdır. Aksi takdirde eşleşme olmaz. (
26.0
tarihinden sonraki-3
tamamen bilgilendirme amaçlıdır.)
AVB sürümü eşleşmeleri
AVB sürümü, ANASÜRÜM.ALTSÜRÜM biçiminde bir ANASÜRÜM ve ALTSÜRÜM içerir (ör. 1.0, 2.1). Ayrıntılar için Sürüm Oluşturma ve Uyumluluk başlıklı makaleyi inceleyin. AVB sürümü aşağıdaki sistem özelliklerine sahiptir:
ro.boot.vbmeta.avb_version
, bootloader'dakilibavb
sürümüdür.ro.boot.avb_version
, Android OS'teki (init/fs_mgr
)libavb
sürümüdür.
Sistem özelliği yalnızca ilgili libavb
, AVB meta verilerini doğrulamak için kullanıldığında görünür (ve OK değerini döndürür). Doğrulama başarısız olduysa (veya hiç doğrulama yapılmadıysa) bu alan yoktur.
Uyumluluk eşleşmesinde aşağıdakiler karşılaştırılır:
- sysprop
ro.boot.vbmeta.avb_version
withavb.vbmeta-version
from framework compatibility matrix:ro.boot.vbmeta.avb_version.MAJOR == avb.vbmeta-version.MAJOR
ro.boot.vbmeta.avb_version.MINOR >= avb.vbmeta-version.MINOR
- sysprop
ro.boot.avb_version
withavb.vbmeta-version
from framework compatibility matrix:ro.boot.avb_version.MAJOR == avb.vbmeta-version.MAJOR
ro.boot.avb_version.MINOR >= avb.vbmeta-version.MINOR
Önyükleyici veya Android işletim sistemi, her biri yükseltme cihazları ve lansman cihazları için farklı bir MAJOR sürümüne sahip iki kopya libavb
kitaplık içerebilir. Bu durumda, aynı imzasız sistem görüntüsü paylaşılabilir ancak nihai imzalı sistem görüntüleri farklıdır (farklı avb.vbmeta-version
ile):

1.şekil AVB sürümü eşleşiyor (/system bölümü P, diğer tüm bölümler O).

Şekil 2. AVB sürümü eşleşiyor (tüm bölümler P).
Örnek: Başarılı AVB sürümü eşleşmesi
Çerçeve uyumluluğu matrisinde aşağıdaki AVB bilgileri yer alır:
<avb> <vbmeta-version>2.1</vbmeta-version> </avb>
Cihazda:
ro.boot.avb_version == 1.0 && ro.boot.vbmeta.avb_version == 2.1 mismatch
ro.boot.avb_version == 2.1 && ro.boot.vbmeta.avb_version == 3.0 mismatch
ro.boot.avb_version == 2.1 && ro.boot.vbmeta.avb_version == 2.3 match
ro.boot.avb_version == 2.3 && ro.boot.vbmeta.avb_version == 2.1 match
OTA sırasında AVB sürümünü eşleştirme
Android 9 veya önceki sürümlerle kullanıma sunulan cihazlarda Android 10'a güncelleme yapılırken çerçeve uyumluluk matrisindeki AVB sürümü şartları, cihazdaki mevcut AVB sürümüyle eşleştirilir. AVB sürümü, OTA sırasında büyük bir sürüm yükseltmesi geçirirse (ör. 0.0'dan 1.0'a), OTA'daki uyumluluk için VINTF kontrolü, OTA'dan sonraki uyumluluğu yansıtmaz.
OEM'ler, sorunu azaltmak için OTA paketine (compatibility.zip
) sahte bir AVB sürümü yerleştirerek kontrolü geçebilir. Bunu yapmak için:
- Aşağıdaki CL'leri Android 9 kaynak ağacına ekleyin:
- Cihaz için
BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE
tanımlayın. Değeri, OTA'dan önceki AVB sürümüne, yani cihazın piyasaya sürüldüğündeki AVB sürümüne eşit olmalıdır. - OTA paketini yeniden oluşturun.
Bu değişiklikler, aşağıdaki dosyalarda BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE
yerine otomatik olarak compatibility-matrix.avb.vbmeta-version
yerleştirir:
/system/compatibility_matrix.xml
(Android 9'da kullanılmaz)- OTA paketinde
compatibility.zip
içindesystem_matrix.xml
Bu değişiklikler, aşağıdakiler de dahil olmak üzere diğer çerçeve uyumluluğu matrislerini etkilemez:
/system/etc/vintf/compatibility_matrix.xml
. OTA'dan sonra, uyumluluk kontrolleri için /system/etc/vintf/compatibility_matrix.xml
içindeki yeni değer kullanılır.
VNDK sürümü eşleşiyor
Cihaz uyumluluğu matrisi, compatibility-matrix.vendor-ndk.version
içinde gerekli VNDK sürümünü belirtir. Cihaz uyumluluk matrisinde <vendor-ndk>
etiketi yoksa herhangi bir koşul uygulanmaz ve her zaman eşleşme olarak kabul edilir.
Cihaz uyumluluğu matrisinde <vendor-ndk>
etiketi varsa çerçeve manifestosunda çerçeve tarafından sağlanan VNDK satıcı anlık görüntüleri kümesinden eşleşen <vendor-ndk>
girişine sahip bir <version>
aranır. Böyle bir giriş yoksa eşleşme yoktur.
Böyle bir giriş varsa cihaz uyumluluk matrisinde listelenen kitaplıklar kümesi, çerçeve manifestinde belirtilen kitaplıklar kümesinin bir alt kümesi olmalıdır. Aksi takdirde giriş eşleşme olarak kabul edilmez.
- Özel bir durum olarak, cihaz uyumluluk matrisinde hiçbir kitaplık listelenmiyorsa boş bir küme herhangi bir kümenin alt kümesi olduğundan giriş her zaman eşleşme olarak kabul edilir.
Örnek: Başarılı VNDK sürümü eşleşmesi
Cihaz uyumluluğu matrisinde VNDK ile ilgili aşağıdaki şart belirtiliyorsa:
<!-- Example Device Compatibility Matrix --> <vendor-ndk> <version>27</version> <library>libjpeg.so</library> <library>libbase.so</library> </vendor-ndk>
Çerçeve manifestinde yalnızca sürüm 27'ye sahip giriş dikkate alınır.
<!-- Framework Manifest Example A --> <vendor-ndk> <version>27</version> <library>libjpeg.so</library> <library>libbase.so</library> <library>libfoo.so</library> </vendor-ndk>
VNDK sürümü 27, çerçeve manifest dosyasında olduğu ve {libjpeg.so, libbase.so, libfoo.so} ⊇ {libjpeg.so, libbase.so}
nedeniyle A örneği eşleşir.
<!-- Framework Manifest Example B --> <vendor-ndk> <version>26</version> <library>libjpeg.so</library> <library>libbase.so</library> </vendor-ndk> <vendor-ndk> <version>27</version> <library>libbase.so</library> </vendor-ndk>
B örneği eşleşmiyor. VNDK sürümü 27, çerçeve manifestinde yer alsa da libjpeg.so
, bu anlık görüntüdeki çerçeve tarafından desteklenmiyor. VNDK sürümü 26 yoksayılır.
Sistem SDK sürümü eşleşmeleri
Cihaz uyumluluk matrisi, compatibility-matrix.system-sdk.version
içinde gerekli sistem SDK sürümünü belirtir. Yalnızca küme, çerçeve manifest dosyasındaki manifest.system-sdk.version
içinde belirtildiği gibi sağlanan sistem SDK sürümlerinin bir alt kümesi ise eşleşme olur.
- Özel bir durumda, cihaz uyumluluk matrisinde herhangi bir sistem SDK'sı sürümü listelenmiyorsa boş küme herhangi bir kümenin alt kümesi olduğundan her zaman eşleşme olarak kabul edilir.
Örnek: Sistem SDK sürümüyle başarılı eşleşme
Cihaz uyumluluğu matrisinde System SDK ile ilgili aşağıdaki şart belirtiliyorsa:
<!-- Example Device Compatibility Matrix --> <system-sdk> <version>26</version> <version>27</version> </system-sdk>
Ardından, çerçeve eşleşmesi için sistem SDK'sı sürüm 26 ve 27'yi sağlamalıdır:
<!-- Framework Manifest Example A --> <system-sdk> <version>26</version> <version>27</version> </system-sdk>
A örneği eşleşiyor:
<!-- Framework Manifest Example B --> <system-sdk> <version>26</version> <version>27</version> <version>28</version> </system-sdk>
B örneği eşleşiyor:
<!-- Framework Manifest Example C --> <system-sdk> <version>26</version> </system-sdk>
Sistem SDK'sı sürüm 27 sağlanmadığı için C örneği eşleşmiyor.