İki uyumluluk matrisi ve manifesti, mutabık kalınarak anlaşmaya varılan birlikte çalışabileceğine nasıl karar verebileceğinizi anlatacağım. Bu doğrulama çerçeve uyumluluk matrisi ile cihaz manifest dosyası ve çerçeve manifesti ile cihaz arasında uyumluluk matrisini dikkate alın.
Bu doğrulama, derleme sırasında OTA güncellemesinde yapılır paket oluşturma süresi, başlatma sırasında ve VTS uyumluluk testlerinde
Aşağıdaki bölümlerde, çeşitli bileşenlerden oluşur.
Çerçeve uyumluluk matrisi sürüm eşleşmeleri
Bir cihaz manifestini çerçeve uyumluluk matrisi ile eşleştirmek için:
manifest.target-level
tarafından belirtilen Gönderim FCM sürümü
compatibility-matrix.level
. Aksi takdirde hiçbir eşleşme yoktur.
libvintf
ile çerçeve uyumluluk matrisi istendiğinde bu eşleşme
libvintf
cihaz manifestini açıp Kargo bilgilerini aldığı için her zaman başarılı olur
FCM Sürümü'nü temel alır ve ilgili Kargo FCM Sürümündeki çerçeve uyumluluk matrisini (artı
daha yüksek FCM Sürümlerindeki uyumluluk matrislerinden alınan isteğe bağlı HAL'ler).
HAL eşleşmeleri
HAL eşleşme kuralı,hal
sahibi tarafından desteklendiği kabul edilen manifest dosyalarını
uyumluluk matrisini dikkate alın.
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 ile değerlendirilir ilişkilidir. <hal>
öğelerinde, öğeleri aşağıdaki şekilde işaretlemek için<hal optional="true">
bulunabilir gerekmez.- Aynı içinde birden çok
<version>
öğesi<hal>
sahibi VEYA ilişkisine sahip olur. İki veya daha fazla değer belirtilirse yalnızca sürümlerden birinin uygulanması gerekir. (Aşağıdaki DRM örneğine bakın.) - Birden çok
<instance>
ve Aynı içinde<regex-instance>
öğe<hal>
, tek bir VE ilişkisiyle değerlendirilir. Bu durumda<hal>
gereklidir. (Aşağıdaki <ahref="#drm">DRM örneğine bakın.)</ahref="#drm">
Örnek: Bir modül için başarılı HAL eşleşmesi
Sürüm 2.5'teki 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 . |
2.5-7 |
2,5-2.∞. Şunları gösterir:
.
2.5-7 olarak tanımlanmıştır. |
Örnek: DRM modülü için başarılı HAL eşleşmesi
Çerçeve uyumluluk matrisi, aşağıdaki sürüm bilgilerini belirtir DRM HAL için:
<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 tedarikçi aşağıdaki örneklerden BİRİNİ uygulamalıdır; ikisinden biri
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
VE aşağıdaki örneklerin tümünü de 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'ler
Android 11'den sonraki tüm Android sürümleri (Android hariç)
11) VINTF'de AIDL HAL'lerin sürümlerini destekler.
AIDL HAL'ler için eşleşme kuralları, HIDL ve yerel HAL'lerin eşleşme kurallarına benzerdir; tek fark şudur:
ana sürümler yoktur ve HAL örneği başına tam olarak bir sürüm mevcuttur (1
sürümü belirtilmemiş).
- Birden çok
<hal>
öğesi tek bir AND ile değerlendirilir ilişkilidir. <hal>
öğelerinde, öğeleri aşağıdaki şekilde işaretlemek için<hal optional="true">
bulunabilir gerekmez.- Birden çok
<instance>
ve Aynı içinde<regex-instance>
öğe<hal>
, tek bir VE ilişkisiyle değerlendirilir. Bu durumda<hal>
gereklidir. (Aşağıdaki <ahref="#vibrator">titreşim örneğine bakın.)</ahref="#vibrator">
Ö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 . |
5-7 |
5-∞. Şunları gösterir:
.
5-7 olarak tanımlanmıştır. |
Örnek: Birden fazla modül için başarılı HAL eşleşmesi
Çerçeve uyumluluk matrisi, aşağıdaki sürüm bilgilerini belirtir (titreşim ve kamera HAL'leri için):
<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 tedarikçi aşağıdaki örneklerin tümünü 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çeve uyumluluk matrisinin <kernel>
bölümü
, cihazdaki Linux çekirdeği için çerçevenin gereksinimlerini açıklar. Bu
karşılaştırılmasının amaçlandığı
bilgi
cihazın VINTF nesnesi tarafından bildirilen çekirdek hakkında
Çekirdek dallarını eşleştir
Her çekirdek dalı soneki (örneğin, 5.4-r
) benzersiz bir
çekirdek FCM sürümü (örneğin, 5). Eşleme, sürüm harfleri arasındaki eşlemeyle aynıdır.
(örneğin, R) ve FCM sürümleri (örneğin, 5).
VTS testleri, cihazın
cihaz manifestini, /vendor/etc/vintf/manifest.xml
. aşağıdakilerden biri doğruysa:
-
Çekirdek FCM sürümü, hedef FCM sürümünden farklı. Örneğin,
yukarıda belirtilen cihazda hedef FCM sürüm 4 var ve çekirdek FCM sürümü 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ü belirtilirse çekirdek FCM sürümünün cihaz manifestindeki hedef FCM sürümünden daha büyük veya bu sürüme eşit olmalıdır.
Örnek: Çekirdek dalını belirleme
Cihazda FCM sürüm 4 (Android 10'da kullanıma sunulan) hedeflendiyse ancak
çekirdeği 4.19-r
dalından çalıştırıyorsa cihaz manifestinde aşağıdaki bilgiler belirtilmelidir:
<manifest version="2.0" type="device" target-level="4"> <kernel target-level="5" /> </manifest>
VINTF nesnesi, çekirdek uyumluluğunu 4.19-r
çekirdeğinin şartlarına göre kontrol eder
dalına gelecektir. Bu gereksinimler,
kernel/configs/r/android-4.19
bulabilirsiniz.
Örnek: GKI için çekirdek dalını belirleme
Cihaz, Genel Kernel Görüntüsü (GKI) ve
/proc/version
şudur:
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 belirlemek için
çekirdek FCM sürümü. Bu örnekte android12
, çekirdek FCM sürüm 6 anlamına gelir
(Android 12'de yayınlandı).
Çekirdek sürüm dizesinin nasıl ayrıştırıldığıyla ilgili ayrıntılar için GKI sürümleri.
Çekirdek sürümlerini eşleştirin
Bir matris, her biri aşağıdaki özelliklere sahip birden çok <kernel>
bölümü içerebilir:
Şu biçimi kullanan farklı bir version
özelliği:
${ver}.${major_rev}.${kernel_minor_rev}
VINTF nesnesi,<kernel>
Eşleşen FCM sürümüne sahip FCM, aynı sürümle
Cihaz çekirdeği olarak ${ver}
ve ${major_rev}
(ör.
version="${ver}.${major_rev}.${matrix_minor_rev}")
; diğer bölümler
yok sayılır. Ayrıca, çekirdekteki küçük düzeltme bir değer olmalıdır
yakınlık matrisinden (${kernel_minor_rev} >=
${matrix_minor_rev}
;). <kernel>
bölümü karşılanmıyorsa
bu şartlarda uyuşmazlık söz konusu.
Örnek: Eşleştirme koşullarını seçme
/system/etc/vintf
bölgesindeki FCM'lerin
aşağıdaki şartları yerine getirin (üstbilgi ve alt bilgi 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 çekirdeği seçer. gereklilikler:
Hedef FCM sürümü | Kernel FCM sürümü | Çekirdek sürümü | Şununla eşleştir: |
---|---|---|---|
3 (K) | belirtilmedi | 4.4.106 | Eşleşme yok (alt sürüm uyuşmazlığı) |
3 (K) | belirtilmedi | 4.4.107 | 4.4-p |
3 (K) | belirtilmedi | 4.19.42 | 4.19-q (aşağıdaki nota bakın) |
3 (K) | belirtilmedi | 5.4.41 | 5.4-r (aşağıdaki nota bakın) |
3 (K) | 3 (K) | 4.4.107 | 4.4-p |
3 (K) | 3 (K) | 4.19.42 | Eşleşme yok (4.19-p çekirdek dalı) |
3 (K) | 4 (Ç) | 4.19.42 | 4.19-q |
4 (Ç) | belirtilmedi | 4.4.107 | Eşleşme yok (4.4-q çekirdek dalı) |
4 (Ç) | belirtilmedi | 4.9.165 | 4.9-q |
4 (Ç) | belirtilmedi | 5.4.41 | 5.4-r (aşağıdaki nota bakın) |
4 (Ç) | 4 (Ç) | 4.9.165 | 4.9-q |
4 (Ç) | 4 (Ç) | 5.4.41 | Eşleşme yok (5.4-q çekirdek dalı) |
4 (Ç) | 5 (Sağ) | 4.14.105 | 4.14-r |
4 (Ç) | 5 (Sağ) | 5.4.41 | 5.4-r |
5 (Sağ) | belirtilmedi | herhangi | VTS başarısız (Hedef FCM sürüm 5 için çekirdek FCM sürümü belirtilmelidir) |
5 (Sağ) | 4 (Ç) | herhangi | VTS başarısız oldu (çekirdek FCM sürümü < hedef FCM sürümü) |
5 (Sağ) | 5 (Sağ) | 4.14.180 | 4.14-r |
Çekirdek yapılandırmalarını eşleştirme
<kernel>
bölümü eşleşirse işlem devam eder.
config
öğelerini şununla eşleştirmeye çalışarak:
/proc/config.gz
. Uyumluluktaki her yapılandırma öğesi için
yapılandırmanın doğru olup olmadığını görmek için /proc/config.gz
devam eder. Bir yapılandırma öğesi uyumlulukta n
olarak ayarlandığında
eşleşen <kernel>
bölümü için matris, mevcut olmamalıdır
başlangıç fiyatı: /proc/config.gz
. Son olarak,
uyumluluk matrisi, /proc/config.gz
içinde mevcut olabilir veya olmayabilir.
Örnek: Çekirdek yapılandırmalarını eşleştirme
<value type="string">bar</value>
eşleşme"bar"
. Alıntılar uyumluluk matrisinde atlanır ancak mevcut/proc/config.gz
içinde.<value type="int">4096</value>
eşleşme4096
veya0x1000
ya da0X1000
.<value type="int">0x1000</value>
eşleşme4096
veya0x1000
ya da0X1000
.<value type="int">0X1000</value>
eşleşme4096
veya0x1000
ya da0X1000
.<value type="tristate">y</value>
eşleşmey
.<value type="tristate">m</value>
eşleşmem
.<value type="tristate">n</value>
, yapılandırma anlamına gelir öğe/proc/config.gz
içinde OLMAMALIDIR.<value type="range">1-0x3</value>
eşleşme1
,2
veya3
ya da onaltılık eşdeğeri.
Örnek: Başarılı çekirdek eşleşmesi
FCM sürüm 1 ile çerçeve uyumluluk matrisi aşağıdaki çekirdek bilgilerini içerir:
<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 manifest dosyasında belirtilmiştir.
manifest.kernel.target-level
içinde varsayılan olarak manifest.level
değerine ayarlanır.
değer belirtilmemişse. Cihaz manifestindeki çekirdek dalı ise:
- değeri 1 ise sonraki adıma geçer ve çekirdek sürümünü kontrol eder.
- 2 ise matrisle eşleşmez. VINTF nesneleri, matristen çekirdek gereksinimlerini okur: FCM sürüm 2'yi kullanın.
Ardından, çekirdek sürümü eşleştirilir. uname()
içindeki bir cihaz
raporlar:
- 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şmez,
version
değerinden küçük) - 4.14.42 (matrisle eşleştir)
- 4.14.43 (matrisle eşleştir)
- 4.1.22 (ayrı bir çekirdek bölümü olmadığı sürece matrisle eşleşmez.
x <= 22
;<kernel version="4.1.x">
ile)
Uygun <kernel>
bölümü seçildikten sonra,
değeri n
dışında her <config>
öğesi için
ilgili girişin /proc/config.gz
üzerinde mevcut olmasını bekleyecektir;
n
değerine sahip her <config>
öğe için
ilgili giriş /proc/config.gz
içinde bulunmayacaktır. Biz
<value>
içeriğinin, sonraki metinle tam olarak eşleşmesini bekle
en fazla yeni satır karakterine kadar eşittir işareti (tırnak işaretleri dahil)
#
(baştaki ve sondaki boşluklar kısaltıldı).
Aşağıdaki çekirdek yapılandırması, başarılı bir eşleme ö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şiyor
SE politikası için aşağıdaki eşleşmeler gereklidir:
<sepolicy-version>
, kapalı bir minör aralığını tanımlar her ana sürüm için geçerli. Cihaz tarafından bildirilen sepolicy sürümü çerçeveyle uyumlu olması için bu aralıklardan birinde olması gerekir. Eşleşme kuralları HAL sürümlerine benzerdir; sepolicy sürümü de aralığın minimum sürümüne eşit veya daha yüksek. Maksimum sürüm: yalnızca bilgilendirme amaçlıdır.<kernel-sepolicy-version>
(ör. policydb sürümü). Zorunluluk Cihaz tarafından bildirilensecurity_policyvers()
değerinden düşük 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 daha büyük olmalıdır veya eşittir. Aksi takdirde eşleşme olmaz. Örnek:- Bir cihaz 29 değerini döndürürse bu eşleşme değildir.
- Bir cihaz 31 değerini döndürürse bu bir eşleşmedir.
- SE politikası sürümü 25.0-∞ veya 26.0-∞ değerlerinden biri olmalıdır. Aksi takdirde
eşleşmesini sağlar. ("
26.0
" ifadesinden sonraki "-3
" değeri bilgi verme amaçlıdır.)
AVB sürümü eşleşiyor
AVB sürümü bir MAJOR sürümü ve MINOR sürümünü şu biçimde içerir: MAJOR.MINOR olarak (ör. 1.0, 2.1). Ayrıntılı bilgi için Sürüm oluşturma ve Uyumluluk. AVB sürümü aşağıdaki sistem özelliklerine sahiptir:
ro.boot.vbmeta.avb_version
,libavb
sürümüdür bootloader'daro.boot.avb_version
, şuradalibavb
versiyonudur: Android OS (init/fs_mgr
)
Sistem özelliği, yalnızca karşılık gelen libavb kullanıldığında görünür kullanarak (ve "Tamam" sonucunu döndürür). Doğrulama başarısız olursa eksik (veya hiç doğrulama gerçekleşmedi).
Uyumluluk eşleşmesi aşağıdakileri karşılaştırır:
- sysprop
ro.boot.vbmeta.avb_version
Çerçeve uyumluluk matrisindenavb.vbmeta-version
;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
Çerçeve uyumluluk matrisindenavb.vbmeta-version
.ro.boot.avb_version.MAJOR == avb.vbmeta-version.MAJOR
ro.boot.avb_version.MINOR >= avb.vbmeta-version.MINOR
Bootloader veya Android OS, libavb
uygulamasının iki kopyasını içerebilir.
cihazları yeni sürüme geçirmek ve başlatmak için her biri farklı MAJOR sürümüne sahip kitaplıklar.
cihazlar. Bu durumda, aynı imzasız sistem görüntüsü paylaşılabilir ancak
nihai imzalı sistem görüntüleri farklıdır (
avb.vbmeta-version
):
Şekil 1. AVB sürümü eşleşiyor (/sistem P, diğer tüm bölümler O'dur).
Şekil 2. AVB sürümü eşleşiyor (tüm bölümler P'dir).
Ö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 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ştir
Android 9 veya önceki sürümlerle başlatılan cihazlarda Android 10, AVB Çerçeve uyumluluk matrisindeki sürüm gereksinimleri mevcut AVB ile eşleştirilir sürümü yüklü olmalıdır. OTA sırasında AVB sürümünün ana sürüm yükseltmesi varsa (örneğin, 0,0'dan 1,0'a) karşılaştırıldığında, OTA'daki VINTF uyumluluğu kontrolü, oluşturur.
Bir OEM, sorunu azaltmak için OTA paketine sahte bir AVB sürümü yerleştirebilir.
(compatibility.zip
) tuşuna basın. Bunu yapmak için:
- Android 9 kaynak ağacına aşağıdaki CL'leri satın alın:
- Cihaz için
BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE
tanımlayın. Değeri OTA'dan önceki AVB sürümüne, yani OTA'dan önceki AVB sürümüne eşit olmalıdır. kullanıma sunuldu. - OTA paketini yeniden derleyin.
Bu değişiklikler otomatik olarak
BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE
:
Aşağıdaki dosyalarda compatibility-matrix.avb.vbmeta-version
:
/system/compatibility_matrix.xml
. Cihazdaki (Android 9'da kullanılmaz)- OTA paketinde
compatibility.zip
içindesystem_matrix.xml
Bu değişiklikler, şunlar dahil diğer çerçeve uyumluluk matrislerini etkilemez:
/system/etc/vintf/compatibility_matrix.xml
OTA'dan sonra,
Bunun yerine, uyumluluk kontrolleri için /system/etc/vintf/compatibility_matrix.xml
kullanılır.
VNDK sürümü eşleşiyor
Cihaz uyumluluk matrisi, gerekli VNDK sürümünü
compatibility-matrix.vendor-ndk.version
Cihaz
uyumluluk matrisinde <vendor-ndk>
etiketi yok; hayır
bir eşleşme olarak değerlendirilir.
Cihaz uyumluluk matrisinde <vendor-ndk>
varsa
etiketi, eşleşen bir <vendor-ndk>
girişi
<version>
, VNDK tedarikçi firma anlık görüntüleri grubundan yapıldı
(ör. çerçeve manifest'indeki çerçeve tarafından sağlanır) Böyle bir giriş yoksa
hiçbir eşleşme yoktur.
Böyle bir giriş varsa cihazda numaralandırılmış kitaplık grubu uyumluluk matrisi, çerçeve manifestini; Aksi takdirde giriş, eşleşme olarak kabul edilmez.
- Özel bir durum olarak, cihazda hiçbir kitaplık belirtilmemişse giriş her zaman eşleşme olarak kabul edilir, çünkü boş herhangi bir kümenin alt kümesidir.
Örnek: Başarılı VNDK sürümü eşleşmesi
Cihaz uyumluluk matrisi, VNDK'da aşağıdaki şartı belirtiyorsa:
<!-- Example Device Compatibility Matrix --> <vendor-ndk> <version>27</version> <library>libjpeg.so</library> <library>libbase.so</library> </vendor-ndk>
Çerçeve manifestinde, yalnızca 27 sürümüne 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 manifestinde yer aldığından A örneği bir eşleşmedir.
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>
B örneği eşleşme değildir. VNDK sürüm 27 çerçevede olsa da
manifesto dosyası libjpeg.so
, şu çerçeve tarafından desteklenmez:
anlık görüntü. VNDK sürüm 26 yoksayılır.
Sistem SDK sürümü eşleşiyor
Cihaz uyumluluk matrisi, gerekli bir dizi gerekli Sistem SDK'sını tanımlar
compatibility-matrix.system-sdk.version
dilindedir. Bir
yalnızca set, bildirilen sistem SDK'sı sürümlerinin bir alt kümesiyse eşleştir
manifest.system-sdk.version
ile değiştirebilirsiniz.
- Özel bir durum olarak, cihazda herhangi bir Sistem SDK'sı sürümü belirtilmemişse her zaman eşleşme kabul edilir, çünkü boş herhangi bir kümenin alt kümesidir.
Örnek: Başarılı Sistem SDK sürümü eşleşmesi
Cihaz uyumluluk matrisi, Sistem'de aşağıdaki gereksinimi belirtiyorsa SDK:
<!-- Example Device Compatibility Matrix --> <system-sdk> <version>26</version> <version>27</version> </system-sdk>
Ardından, çerçevenin eşleşmesi için Sistem SDK'sı 26 ve 27 sürümlerini sağlaması gerekir.
<!-- Framework Manifest Example A --> <system-sdk> <version>26</version> <version>27</version> </system-sdk>
A örneği bir eşleşmedir.
<!-- Framework Manifest Example B --> <system-sdk> <version>26</version> <version>27</version> <version>28</version> </system-sdk>
B örneği bir eşleşmedir.
<!-- Framework Manifest Example C --> <system-sdk> <version>26</version> </system-sdk>
Sistem SDK 27 sürümü sağlanmadığı için C örneği eşleşmez.