Çerçeve ve satıcı uygulamasının birbiriyle çalışabileceğini doğrulamak için iki uyumluluk matrisi ve bildirimi çiftinin uzlaştırılması amaçlanmıştır. Bu doğrulama, çerçeve uyumluluk matrisi ile cihaz bildirimi arasındaki ve ayrıca çerçeve bildirimi ile cihaz uyumluluk matrisi arasındaki bir eşleşmede başarılı olur.
Bu doğrulama, derleme zamanında, OTA güncelleme paketi oluşturma zamanında, önyükleme zamanında ve VTS uyumluluk testlerinde yapılır.
Aşağıdaki bölümler, çeşitli bileşenler tarafından kullanılan eşleştirme kurallarının ayrıntılarını vermektedir.
Çerçeve uyumluluk matrisi sürümü eşleşmeleri
Bir cihaz bildirimini bir çerçeve uyumluluk matrisiyle eşleştirmek için manifest.target-level
tarafından belirtilen Shipping FCM sürümü, compatibility-matrix.level
tarafından belirtilen FCM sürümüne tam olarak eşit olmalıdır. Aksi halde eşleşme olmaz.
libvintf
ile çerçeve uyumluluk matrisi istendiğinde, bu eşleşme her zaman başarılıdır çünkü libvintf
aygıt bildirimini açar, Gönderi FCM Sürümünü alır ve bu Gönderi FCM Sürümündeki çerçeve uyumluluk matrisini döndürür (artı daha yüksek FCM'deki uyumluluk matrislerinden bazı isteğe bağlı HAL'ler) Sürümler).
HAL maçları
HAL eşleşme kuralı, bir bildirim dosyasındaki ilgili uyumluluk matrisinin sahibi tarafından desteklendiği düşünülen hal
öğelerinin sürümlerini tanımlar.
HIDL ve yerel HAL'ler
HIDL ve yerel HAL'ler için eşleşme kuralları aşağıdaki gibidir.
- Birden çok
<hal>
öğesi, tek bir AND ilişkisiyle değerlendirilir. -
<hal>
öğeleri, gerekli değil olarak işaretlemek için<hal optional="true">
içerebilir. - Aynı
<hal>
içindeki birden çok<version>
öğesi VEYA ilişkisine sahiptir. İki veya daha fazla belirtilirse, sürümlerden yalnızca birinin uygulanması gerekir. (Aşağıdaki DRM örneğine bakın.) - Aynı
<hal>
içindeki birden çok<instance>
ve<regex-instance>
öğesi,<hal>
gerektiğinde tek bir AND ilişkisiyle değerlendirilir. (bkz.Aşağıdaki DRM örneği.)
Ö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ı aşağıdaki gibidir:
Matris | Eşleşen Manifest |
---|---|
2.5 | 2.5-2.∞. Uyumluluk matrisinde 2.5 , 2.5-5 kısaltmasıdır. |
2.5-7 | 2.5-2.∞. Aşağıdakileri gösterir:
2.5-7 belirten bir çerçeve ile uyumlu kalır. |
Örnek: DRM modülü için başarılı HAL eşleşmesi
Çerçeve uyumluluk matrisi, DRM HAL için aşağıdaki sürüm bilgilerini belirtir:
<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 durumlardan BİRİNİ uygulamalıdır; herhangi biri
android.hardware.drm@1.x::IDrmFactory/default // where x >= 0 android.hardware.drm@1.x::IDrmFactory/specific // where x >= 0tutucu2 VEYA
android.hardware.drm@3.y::IDrmFactory/default // where y >= 1 android.hardware.drm@3.y::IDrmFactory/specific // where y >= 1
VE ayrıca şu örneklerin tümünü 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 HAL'leri
Android 11'den sonraki tüm Android sürümleri (Android 11 hariç), VINTF'deki AIDL HAL sürümlerini destekler. AIDL HAL'leri için eşleşme kuralları, ana sürümlerin olmaması ve HAL örneği başına tam olarak bir sürüm olması (sürüm belirtilmemişse 1
) olması dışında HIDL ve yerel HAL'lerinkilere benzer.
- Birden çok
<hal>
öğesi, tek bir AND ilişkisiyle değerlendirilir. -
<hal>
öğeleri, gerekli değil olarak işaretlemek için<hal optional="true">
içerebilir. - Aynı
<hal>
içindeki birden çok<instance>
ve<regex-instance>
öğesi,<hal>
gerektiğinde tek bir AND ilişkisiyle değerlendirilir. (bkz.Aşağıdaki vibratör örneği.)
Örnek: Bir modül için başarılı HAL eşleşmesi
Sürüm 5'teki bir HAL için eşleşme kuralı aşağıdaki gibidir:
Matris | 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 belirten bir çerçeve ile uyumlu kalır. |
Örnek: Birden çok modül için başarılı HAL eşleşmesi
Çerçeve uyumluluk matrisi, vibratör ve kamera HAL'leri için aşağıdaki sürüm bilgilerini belirtir:
<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ının tüm bu örnekleri uygulaması gerekir:
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çeve uyumluluk matrisinin <kernel>
bölümü, çerçevenin aygıttaki Linux çekirdeğinin gereksinimlerini açıklar. Bu bilgilerin, cihazın VINTF nesnesi tarafından raporlanan çekirdek hakkındaki bilgilerle eşleştirilmesi amaçlanmıştır.
Çekirdek dallarını eşleştir
Her bir çekirdek dalı soneki (örneğin, 5.4- r
), benzersiz bir çekirdek FCM sürümüne (örneğin, 5) eşlenir. Eşleme, sürüm harfleri (örneğin, R) ve FCM sürümleri (örneğin, 5) arasındaki eşleştirmeyle aynıdır.
VTS testleri, aşağıdakilerden biri doğruysa, aygıtın /vendor/etc/vintf/manifest.xml
aygıt bildiriminde çekirdek FCM sürümünü 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 aygıtın bir hedef FCM sürümü 4 vardır ve çekirdek FCM sürümü 5'tir (çekirdek dalı eki
r
). - Çekirdek FCM sürümü 5'ten büyük veya 5'e eşit (çekirdek dalı son eki
r
).
VTS testleri, çekirdek FCM sürümü belirtilirse, çekirdek FCM sürümünün aygıt bildirimindeki hedef FCM sürümünden büyük veya ona eşit olmasını zorunlu kılar.
Örnek: Çekirdek dalını belirleyin
Aygıtın hedef FCM sürüm 4'ü varsa (Android 10'da yayınlandı), ancak çekirdeği 4.19-r
dalından çalıştırıyorsa, aygıt bildiriminde 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 gereksinimlere karşı çekirdek uyumluluğunu kontrol eder. Bu gereksinimler, Android kaynak ağacında kernel/configs/r/android-4.19
oluşturulur.
Örnek: GKI için çekirdek dalını belirleyin
Aygıt, Genel Çekirdek Görüntüsü'nü (GKI) kullanıyorsa ve /proc/version
version'dan çekirdek yayın dizesi aşağıdaki gibidir:
5.4.42-android12-0-00544-ged21d463f856
Ardından, VINTF nesnesi, çekirdek sürümünden Android sürümünü alır ve bunu ç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 yayın dizesinin nasıl ayrıştırıldığına ilişkin ayrıntılar için bkz. GKI sürüm oluşturma.
Çekirdek sürümlerini eşleştirin
Bir matris, her biri şu biçimi kullanan farklı bir version
özniteliğine sahip birden çok <kernel>
bölümü içerebilir:
${ver}.${major_rev}.${kernel_minor_rev}
VINTF nesnesi, aygıt çekirdeğiyle aynı ${ver}
ve ${major_rev}
ile eşleşen FCM sürümüne sahip FCM'den yalnızca <kernel>
bölümünü dikkate alır (yani, version="${ver}.${major_rev}.${matrix_minor_rev}")
; diğer bölümler dikkate alınmaz. Ek olarak, çekirdekten gelen küçük revizyon, uyumluluk matrisinden bir değer olmalıdır ( ${kernel_minor_rev} >= ${matrix_minor_rev}
;). Hiçbir <kernel>
bölümü bu gereksinimleri karşılamıyorsa, eşleşmez.
Örnek: Eşleştirme için gereksinimleri seçin
/system/etc/vintf
içindeki FCM'lerin aşağıdaki gereksinimleri bildirdiği aşağıdaki varsayımsal durumu göz önünde bulundurun (üstbilgi ve altbilgi etiketleri atlanı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ü | Uyuşuyor |
---|---|---|---|
3 (P) | belirtilmemiş | 4.4.106 | Eşleşme yok (küçük sürüm uyuşmazlığı) |
3 (P) | belirtilmemiş | 4.4.107 | 4.4-p |
3 (P) | belirtilmemiş | 4.19.42 | 4.19-q (aşağıdaki nota bakın) |
3 (P) | belirtilmemiş | 5.4.41 | 5.4-r (aşağıdaki 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) | belirtilmemiş | 4.4.107 | Eşleşme yok ( 4.4-q çekirdek dalı yok) |
4 (Q) | belirtilmemiş | 4.9.165 | 4.9-q |
4 (Q) | belirtilmemiş | 5.4.41 | 5.4-r (aşağıdaki 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) | belirtilmemiş | hiç | VTS başarısız oluyor (Hedef FCM sürüm 5 için çekirdek FCM sürümünü belirtmelidir) |
5 (R) | 4 (Q) | hiç | VTS başarısız oluyor (çekirdek FCM sürümü < hedef FCM sürümü) |
5 (R) | 5 (R) | 4.14.180 | 4.14-r |
Çekirdek yapılandırmalarını eşleştirin
<kernel>
bölümü eşleşirse, config
öğelerini /proc/config.gz
ile eşleştirmeye çalışarak işlem devam eder. Uyumluluk matrisindeki her bir yapılandırma öğesi için, yapılandırmanın mevcut olup olmadığını görmek için /proc/config.gz
bakar. Bir yapılandırma öğesi, eşleşen <kernel>
bölümü için uyumluluk matrisinde n
olarak ayarlandığında, /proc/config.gz
olmaması gerekir. Son olarak, uyumluluk matrisinde olmayan bir yapılandırma öğesi /proc/config.gz
bulunabilir veya bulunmayabilir.
Örnek: Çekirdek yapılandırmalarını eşleştirin
-
<value type="string">bar</value>
,"bar"
ile eşleşir. Tırnaklar uyumluluk matrisinde atlanmıştır ancak/proc/config.gz
. -
<value type="int">4096</value>
,4096
veya0x1000
veya0X1000
. -
<value type="int">0x1000</value>
,4096
veya0x1000
veya0X1000
. -
<value type="int">0X1000</value>
4096
veya0x1000
veya0X1000
. -
<value type="tristate">y</value>
y
ile eşleşir. -
<value type="tristate">m</value>
m
ile eşleşir. -
<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
veya onaltılık eşdeğeriyle eşleşir.
Örnek: Başarılı çekirdek eşleşmesi
FCM sürüm 1 ile bir çerçeve uyumluluk matrisi aşağıdaki çekirdek bilgilerine sahiptir:
<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ı, manifest.kernel.target-level
içindeki aygıt bildiriminde belirtilir; bu, ilki belirtilmemişse varsayılan olarak manifest.level
olur. Aygıttaki çekirdek dalı görünürse:
- 1'dir, sonraki adıma geçer ve çekirdek sürümünü kontrol eder.
- 2, matrisle eşleşme yok. VINTF nesneleri, bunun yerine FCM sürüm 2'deki matristen çekirdek gereksinimlerini okur.
Ardından, çekirdek sürümü eşleştirilir. uname()
içindeki bir cihaz şunları bildirirse:
- 4.9.84 (
<kernel version="4.9.x">
ile ayrı bir çekirdek bölümü olmadığı sürece matrisle eşleşme olmaz, buradax <= 84
) - 4.14.41 (matrix ile eşleşme yok,
version
daha küçük) - 4.14.42 (matrisle eşleşir)
- 4.14.43 (matrisle eşleşir)
- 4.1.22 (
x <= 22
'de<kernel version="4.1.x">
ile ayrı bir çekirdek bölümü olmadığı sürece matrisle eşleşme olmaz)
Uygun <kernel>
bölümü seçildikten sonra, n
dışında değere sahip her <config>
öğesi için, /proc/config.gz
içinde karşılık gelen girişin bulunmasını bekleriz; n
değerine sahip her <config>
öğesi için, karşılık gelen girişin /proc/config.gz
içinde olmamasını bekleriz. <value>
içeriğinin, eşittir işaretinden sonra (tırnak işaretleri dahil), satırsonu karakterine veya #
'ye kadar, baştaki ve sondaki boşluklar kesilerek metinle tam olarak eşleşmesini bekleriz.
Aşağıdaki çekirdek yapılandırması başarılı bir eşleşme örneğidir:
# 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ı, başarısız bir eşleşme örneğidir:
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
SE politikası eşleşmeleri
SE politikası aşağıdaki eşleşmeleri gerektirir:
-
<sepolicy-version>
, her ana sürüm için kapalı bir alt sürüm yelpazesi tanımlar. Cihaz tarafından bildirilen sepolicy sürümü, çerçeve ile uyumlu olması için bu aralıklardan birine girmelidir. Maç kuralları HAL sürümlerine benzer; sepolicy sürümünün, aralığın minimum sürümüne eşit veya daha yüksek olması bir eşleşmedir. Maksimum sürüm tamamen bilgi amaçlıdır. -
<kernel-sepolicy-version>
yani policydb versiyonu. Cihaz tarafından bildirilensecurity_policyvers()
değerinden daha az olmalıdır.
Örnek: Başarılı SE politika eşleşmesi
Çerçeve uyumluluk matrisi aşağıdaki sepolicy bilgilerini belirtir:
<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 buna eşit olmalıdır. Aksi takdirde bu bir eşleşme değildir. Örneğin:- Bir cihaz 29 döndürürse, eşleşme değildir.
- Bir cihaz 31 döndürürse, bu bir eşleşmedir.
- SE Politikası sürümü 25.0-∞ veya 26.0-∞'den biri olmalıdır. Aksi takdirde bu bir eşleşme değildir. ("
26.0
"dan sonraki "-3
" tamamen bilgi amaçlıdır.)
AVB sürüm eşleşmeleri
AVB sürümü, MAJOR.MINOR biçiminde (örn. 1.0, 2.1) bir MAJOR sürümü ve MINOR sürümü içerir. Ayrıntılar için Sürüm Oluşturma ve Uyumluluk bölümüne bakın. AVB sürümü aşağıdaki sistem özelliklerine sahiptir:
-
ro.boot.vbmeta.avb_version
, önyükleyicidekilibavb
sürümüdür -
ro.boot.avb_version
, Android işletim sistemindekilibavb
sürümüdür (init/fs_mgr
)
Sistem özelliği, yalnızca ilgili libavb AVB meta verilerini doğrulamak için kullanıldığında görünür (ve Tamam döndürür). Bir doğrulama hatası oluştuysa (veya hiç doğrulama gerçekleşmediyse) yoktur.
Bir uyumluluk eşleşmesi aşağıdakileri karşılaştırır:
- çerçeve uyumluluk matrisinden
ro.boot.vbmeta.avb_version
avb.vbmeta-version
sysprop ro.boot.vbmeta.avb_version;-
ro.boot.vbmeta.avb_version.MAJOR == avb.vbmeta-version.MAJOR
-
ro.boot.vbmeta.avb_version.MINOR >= avb.vbmeta-version.MINOR
-
- çerçeve uyumluluk matrisinden
avb.vbmeta-version
ile syspropro.boot.avb_version
.-
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, yükseltme aygıtları ve başlatma aygıtları için her biri farklı bir MAJOR sürümüne sahip iki libavb
kitaplığı kopyası içerebilir. Bu durumda, aynı imzasız sistem görüntüsü paylaşılabilir ancak son imzalı sistem görüntüleri farklıdır (farklı avb.vbmeta-version
ile):

/system
P, diğer tüm bölümler O'dur).
Örnek: Başarılı AVB sürüm eşleşmesi
Çerçeve uyumluluk matrisi aşağıdaki AVB bilgilerini belirtir:
<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 mismatchyer tutucu17 l10n-yer
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 eşleşen AVB sürümü
Android 9 veya daha düşük sürümle başlatılan cihazlar için, Android 10'a güncelleme yapılırken çerçeve uyumluluk matrisindeki AVB sürüm gereksinimleri, cihazdaki mevcut AVB sürümüyle eşleştirilir. AVB sürümünün bir OTA sırasında ana sürüm yükseltmesi varsa (örneğin, 0.0'dan 1.0'a), VINTF OTA'daki uyumluluk denetimi, OTA'dan sonraki uyumluluğu yansıtmaz.
Sorunu azaltmak için bir OEM, denetimi geçmek için OTA paketine ( compatibility.zip
) sahte bir AVB sürümü yerleştirebilir. Böyle yaparak:
- Android 9 kaynak ağacına aşağıdaki CL'leri kesin olarak seçin:
- Cihaz için
BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE
tanımlayın. Değeri, OTA'dan önceki AVB versiyonuna, yani cihazın piyasaya sürüldüğü andaki AVB versiyonuna eşit olmalıdır. - OTA paketini yeniden oluşturun.
Bu değişiklikler, BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE
otomatik olarak compatibility-matrix.avb.vbmeta-version
olarak aşağıdaki dosyalara yerleştirir:
- cihazda
/system/compatibility_matrix.xml
(Android 9'da kullanılmaz) - OTA paketindeki
compatibility.zip
system_matrix.xml
Bu değişiklikler, /system/etc/vintf/compatibility_matrix.xml
dahil olmak üzere diğer çerçeve uyumluluk matrislerini etkilemez. OTA'dan sonra, bunun yerine uyumluluk kontrolleri için /system/etc/vintf/compatibility_matrix.xml
içindeki yeni değer kullanılır.
VNDK sürüm eşleşmeleri
Cihaz uyumluluk matrisi, gerekli VNDK sürümünü compatibility-matrix.vendor-ndk.version
içinde bildirir. Cihaz uyumluluk matrisinde bir <vendor-ndk>
etiketi yoksa herhangi bir gereksinim uygulanmaz ve bu nedenle her zaman bir eşleşme olarak kabul edilir.
Cihaz uyumluluk matrisinde bir <vendor-ndk>
etiketi varsa, çerçeve bildiriminde çerçeve tarafından sağlanan VNDK satıcı anlık görüntülerinden eşleşen bir <version>
içeren bir <vendor-ndk>
girişi aranır. Böyle bir giriş yoksa, eşleşme yoktur.
Böyle bir giriş varsa, cihaz uyumluluk matrisinde belirtilen kitaplıklar kümesi, çerçeve bildiriminde belirtilen kitaplıklar kümesinin bir alt kümesi olmalıdır; aksi takdirde, giriş bir eşleşme olarak kabul edilmez.
- Özel bir durum olarak, cihaz uyumluluk matrisinde hiçbir kitaplık numaralandırılmamışsa, boş küme herhangi bir kümenin alt kümesi olduğundan giriş her zaman bir eşleşme olarak kabul edilir.
Örnek: Başarılı VNDK sürüm eşleşmesi
Cihaz uyumluluk matrisi VNDK'da aşağıdaki gereksinimi belirtiyorsa:
<!-- Example Device Compatibility Matrix --> <vendor-ndk> <version>27</version> <library>libjpeg.so</library> <library>libbase.so</library> </vendor-ndk>
Çerçeve bildiriminde 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>
Örnek A bir eşleşmedir, çünkü VNDK 27 sürümü çerçeve bildirimindedir ve {libjpeg.so, libbase.so, libfoo.so} ⊇ {libjpeg.so, libbase.so}
.
<!-- 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>
Örnek B bir eşleşme değil. VNDK 27 sürümü çerçeve bildiriminde olsa da, libjpeg.so
bu anlık görüntüdeki çerçeve tarafından desteklenmez. 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 bir dizi gerekli Sistem SDK sürümünü bildirir. Yalnızca küme, çerçeve bildiriminde manifest.system-sdk.version
içinde bildirildiği gibi sağlanan Sistem SDK sürümlerinin bir alt kümesiyse bir eşleşme vardır.
- Özel bir durum olarak, cihaz uyumluluk matrisinde hiçbir Sistem SDK sürümü numaralandırılmamışsa, boş küme herhangi bir kümenin alt kümesi olduğundan, her zaman bir eşleşme olarak kabul edilir.
Örnek: Başarılı Sistem SDK sürümü eşleşmesi
Cihaz uyumluluk matrisi, Sistem SDK'sında aşağıdaki gereksinimi belirtiyorsa:
<!-- 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ının 26 ve 27 sürümünü sağlamalıdır.
<!-- Framework Manifest Example A --> <system-sdk> <version>26</version> <version>27</version> </system-sdk>
Örnek A bir eşleşmedir.
<!-- Framework Manifest Example B --> <system-sdk> <version>26</version> <version>27</version> <version>28</version> </system-sdk>
Örnek B bir eşleşmedir.
<!-- Framework Manifest Example C --> <system-sdk> <version>26</version> </system-sdk>
Örnek C bir eşleşme değil, çünkü Sistem SDK'sı 27 sürümü sağlanmadı.