Dwie pary macierzy zgodności i plików manifestu powinny uzgodniony w celu zweryfikowania, platformy i implementacji dostawców mogą ze sobą współpracować. Ta weryfikacja uda się dopasować macierz zgodności platformy w pliku manifestu urządzenia oraz między plikiem manifestu platformy a urządzeniem. macierz zgodności.
Ta weryfikacja jest przeprowadzana w czasie kompilacji, podczas aktualizacji OTA. podczas generowania pakietu, podczas uruchamiania i w testach zgodności VTS.
W poniższych sekcjach znajdziesz szczegółowe informacje o regułach dopasowania używanych przez różne komponenty.
Zgodność wersji macierzy zgodności platformy
Aby dopasować plik manifestu urządzenia do macierzy zgodności platformy,
wersję FCM związaną z dostawą określoną przez: manifest.target-level
musi być dokładnie taka sama jak wersja FCM określona przez
compatibility-matrix.level
Inaczej nie ma dopasowania.
Gdy za pomocą interfejsu libvintf
wysyła żądanie macierzy zgodności platformy, to dopasowanie jest
zawsze się udało, ponieważ libvintf
otwiera plik manifestu urządzenia i pobiera informacje o dostawie
FCM i zwraca macierz zgodności platformy z daną wersją FCM dostawy (plus niektóre
opcjonalne HAL z tabel zgodności w wyższych wersjach FCM).
Mecze HAL
Reguła dopasowania HAL określa wersje elementów hal
w
plik manifestu, który jest uznawany za obsługiwany przez właściciela odpowiedniego
macierz zgodności.
HIDL i natywne HAL
Poniżej znajdziesz reguły dopasowania HIDL i natywnych HAL.
- Wiele elementów
<hal>
jest ocenianych za pomocą jednego operatora ORAZ. relacji. - Elementy
<hal>
mogą mieć atrybut<hal optional="true">
umożliwiający oznaczenie ich jako nie jest wymagane. - Wiele elementów
<version>
w obrębie tego samego<hal>
mają LUB. Jeśli określono więcej niż 2 wartości, Trzeba wdrożyć jedną z wersji. (zobacz przykład DRM poniżej). - Wiele elementów
<instance>
i<regex-instance>
elementów w obrębie tego samego Wartości<hal>
są oceniane w ramach pojedynczej relacji ORAZ, gdy funkcja Pole<hal>
jest wymagane. (Zobacz <ahref="#drm">przykład DRM poniżej.)</ahref="#drm">
Przykład: udane dopasowanie HAL do modułu
W przypadku HAL w wersji 2.5 reguła dopasowania wygląda tak:
Matrix | Odpowiedni plik manifestu |
---|---|
2.5 |
2,5–2°∞. W tabeli zgodności 2.5 to skrót od
2.5-5 |
2.5-7 |
2,5–2°∞. Wskazuje:
2.5-7 w tabeli zgodności. |
Przykład: udane dopasowanie HAL dla modułu DRM
Tablica zgodności platformy zawiera te informacje o wersji w przypadku DRM HAL:
<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>
Dostawca musi wdrożyć JEDEN z tych przypadków: albo
android.hardware.drm@1.x::IDrmFactory/default // where x >= 0 android.hardware.drm@1.x::IDrmFactory/specific // where x >= 0LUB
android.hardware.drm@3.y::IDrmFactory/default // where y >= 1 android.hardware.drm@3.y::IDrmFactory/specific // where y >= 1
ORAZ musi też zaimplementować wszystkie poniższe wystąpienia:
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
Listy HAL AIDL
Wszystkie wersje Androida nowsze niż 11 (z wyjątkiem Androida)
11) obsługuje wersje HAL AIDL w VINTF.
Reguły dopasowania HAL AIDL są podobne do reguł HIDL i natywnych HAL, z tym że
nie ma wersji głównych i istnieje dokładnie 1 wersja na instancję HAL (1
, jeśli
wersja jest nieokreślona).
- Wiele elementów
<hal>
jest ocenianych za pomocą jednego operatora ORAZ. relacji. - Elementy
<hal>
mogą mieć atrybut<hal optional="true">
umożliwiający oznaczenie ich jako nie jest wymagane. - Wiele elementów
<instance>
i<regex-instance>
elementów w obrębie tego samego Wartości<hal>
są oceniane w ramach pojedynczej relacji ORAZ, gdy funkcja Pole<hal>
jest wymagane. (Zobacz <ahref="#vibrator">przykład wibratora poniżej).</ahref="#vibrator">
Przykład: udane dopasowanie HAL do modułu
W przypadku HAL w wersji 5 reguła dopasowania wygląda tak:
Matrix | Odpowiedni plik manifestu |
---|---|
5 |
5-∞. W tabeli zgodności 5 to skrót od
5-5 |
5-7 |
5-∞. Wskazuje:
5-7 w tabeli zgodności. |
Przykład: udane dopasowanie HAL wielu modułów
Tablica zgodności platformy zawiera te informacje o wersji w przypadku kluczy HAL do wibracji i aparatu:
<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>
Dostawca musi zaimplementować wszystkie te instancje:
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
Mecze jądra
Sekcja <kernel>
macierzy zgodności platformy
opisuje wymagania platformy dotyczące jądra systemu Linux na urządzeniu. Ten
które mają być dopasowane do
informacje
na temat jądra zgłaszanego przez obiekt VINTF urządzenia.
Dopasuj gałęzie jądra
Każdy sufiks gałęzi jądra (np. 5.4-r
) jest mapowany na unikalny identyfikator
wersję FCM jądra (np. 5). Mapowanie jest takie samo jak mapowanie między literami wydania.
(np. 5) i wersji FCM (np. 5).
Testy VTS wymuszają, aby urządzenie jawnie określało wersję FCM jądra w
Plik manifestu urządzenia /vendor/etc/vintf/manifest.xml
, jeśli spełniony jest jeden z tych warunków:
-
Wersja FCM jądra różni się od docelowej wersji FCM. Na przykład parametr
wspomniane urządzenie ma docelową wersję FCM w wersji 4, a jej wersję FCM w jej jądrze to 5 (jądro
sufiks gałęzi
r
). -
Wersja FCM jądra jest większa lub równa 5 (sufiks gałęzi jądra
r
).
Testy VTS wymuszają, że jeśli określona jest wersja FCM jądra, wersja FCM jądra to jest równa docelowej wersji FCM w pliku manifestu urządzenia lub jej równa.
Przykład: określanie gałęzi jądra
Jeśli urządzenie ma docelowy FCM w wersji 4 (opublikowanej w Androidzie 10), ale
uruchamia jądro z gałęzi 4.19-r
, plik manifestu urządzenia powinien zawierać te informacje:
<manifest version="2.0" type="device" target-level="4"> <kernel target-level="5" /> </manifest>
Obiekt VINTF sprawdza zgodność jądra pod kątem wymagań jądra 4.19-r
gałąź określona w FCM w wersji 5. Wymagania te opierają się na:
kernel/configs/r/android-4.19
w drzewie źródłowym Androida.
Przykład: określanie gałęzi jądra dla GKI
Jeśli urządzenie korzysta z ogólnego obrazu jądra (GKI) i ciągu tekstowego jądra z
/proc/version
wygląda tak:
5.4.42-android12-0-00544-ged21d463f856
Następnie obiekt VINTF pobiera wersję Androida z wersji jądra i używa jej do określenia,
wersję FCM jądra systemu operacyjnego. W tym przykładzie android12
oznacza FCM w wersji 6 jądra
(opublikowane w Androidzie 12).
Szczegółowe informacje o tym, jak jest analizowany ciąg znaków wersji jądra, znajdziesz w sekcji Obsługa wersji GKI.
Dopasuj wersje jądra
Macierz może zawierać wiele sekcji <kernel>
, z których każda zawiera
inny atrybut version
w formacie:
${ver}.${major_rev}.${kernel_minor_rev}
Obiekt VINTF uwzględnia tylko sekcję <kernel>
z
FCM z pasującą wersją FCM z taką samą
${ver}
i ${major_rev}
jako jądro urządzenia (tzn.
version="${ver}.${major_rev}.${matrix_minor_rev}")
; inne sekcje
są ignorowane. Dodatkowo minimalna wersja z jądra musi być wartością
z tablicy zgodności (${kernel_minor_rev} >=
${matrix_minor_rev}
;). Jeśli żadna sekcja <kernel>
nie spełnia warunków
do tych wymagań, to nie zostaną spełnione.
Przykład: wybierz wymagania dotyczące dopasowania
Rozważmy ten hipotetyczny przypadek, w którym usługi FCM w regionie /system/etc/vintf
deklarują
następujące wymagania (tagi nagłówka i stopki są pomijane):
<!-- 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 -->
Jądro są wybierane przez docelowe wersje FCM, FCM jądra i wersje jądra. wymagania określone przez FCM:
Docelowa wersja FCM | Wersja FCM jądra | Wersja jądra | Dopasuj do |
---|---|---|---|
3 (K) | nie określono | 4.4.106 | Brak dopasowania (drobna niezgodność wersji) |
3 (K) | nie określono | 4.4.107 | 4.4-p |
3 (K) | nie określono | 4.19.42 | 4.19-q (zobacz uwagę poniżej) |
3 (K) | nie określono | 5.4.41 | 5.4-r (zobacz uwagę poniżej) |
3 (K) | 3 (K) | 4.4.107 | 4.4-p |
3 (K) | 3 (K) | 4.19.42 | Brak dopasowania (brak gałęzi jądra 4.19-p ) |
3 (K) | 4 (K) | 4.19.42 | 4.19-q |
4 (K) | nie określono | 4.4.107 | Brak dopasowania (brak gałęzi jądra 4.4-q ) |
4 (K) | nie określono | 4.9.165 | 4.9-q |
4 (K) | nie określono | 5.4.41 | 5.4-r (zobacz uwagę poniżej) |
4 (K) | 4 (K) | 4.9.165 | 4.9-q |
4 (K) | 4 (K) | 5.4.41 | Brak dopasowania (brak gałęzi jądra 5.4-q ) |
4 (K) | 5 (R) | 4.14.105 | 4.14-r |
4 (K) | 5 (R) | 5.4.41 | 5.4-r |
5 (R) | nie określono | każdy | Błąd VTS (należy określić wersję FCM jądra dla docelowej wersji FCM w wersji 5) |
5 (R) | 4 (K) | każdy | Błąd VTS (wersja FCM jądra < docelowa wersja FCM) |
5 (R) | 5 (R) | 4.14.180 | 4.14-r |
Dopasuj konfiguracje jądra
Jeśli sekcja <kernel>
zgadza się, proces będzie kontynuowany.
próbując dopasować config
elementy do
/proc/config.gz
Dla każdego elementu konfiguracji w zgodności
macierz, sprawdza, czy konfiguracja to /proc/config.gz
obecnie. Gdy element konfiguracji ma w zgodności wartość n
dla pasującej sekcji <kernel>
, musi jej brakować
od /proc/config.gz
. Element konfiguracji, którego nie ma w parametrze
/proc/config.gz
może nie występować w tabeli zgodności.
Przykład: dopasowywanie konfiguracji jądra
- Dopasowania:
<value type="string">bar</value>
"bar"
Cudzysłowy są pomijane w macierzy zgodności, ale występują w usłudze/proc/config.gz
. - Dopasowania:
<value type="int">4096</value>
4096
,0x1000
lub0X1000
. - Dopasowania:
<value type="int">0x1000</value>
4096
,0x1000
lub0X1000
. - Dopasowania:
<value type="int">0X1000</value>
4096
,0x1000
lub0X1000
. - Dopasowania:
<value type="tristate">y</value>
y
- Dopasowania:
<value type="tristate">m</value>
m
<value type="tristate">n</value>
oznacza konfigurację element NIE może istnieć w lokalizacji/proc/config.gz
.- Dopasowania:
<value type="range">1-0x3</value>
1
,2
lub3
lub odpowiednik szesnastkowy.
Przykład: udane dopasowanie jądra
Macierz zgodności platformy z FCM w wersji 1 zawiera te informacje o jądrze:
<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>
Gałąź jądra jest dopasowywana jako pierwsza. Gałąź jądra jest określona w pliku manifestu urządzenia
w polu manifest.kernel.target-level
, który przyjmuje wartość domyślną manifest.level
jeśli nie określono pierwszego terminu. Jeśli gałąź jądra w pliku manifestu urządzenia:
- wynosi 1, przechodzi do następnego kroku i sprawdza wersję jądra.
- to 2, brak dopasowania do macierzy. Obiekty VINTF odczytują wymagania jądra z macierzy FCM w wersji 2.
Wtedy dopasowywana jest wersja jądra. Jeśli urządzenie w budynku uname()
raportów:
- 4.9.84 (brak dopasowania do macierzy, chyba że istnieje oddzielna sekcja jądra z funkcją
<kernel version="4.9.x">
, gdziex <= 84
) - 4.14.41 (brak dopasowania do macierzy, mniejsza niż
version
) - 4.14.42 (dopasowanie do macierzy)
- 4.14.43 (dopasowanie do macierzy)
- 4.1.22 (brak dopasowania do macierzy, chyba że istnieje oddzielna sekcja jądra)
z wartością
<kernel version="4.1.x">
, gdziex <= 22
)
Po wybraniu odpowiedniej sekcji <kernel>
w przypadku
każdy element <config>
o wartości innej niż n
,
oczekuje, że odpowiedni wpis będzie znajdować się w /proc/config.gz
;
dla każdego elementu <config>
o wartości n
oczekujemy
odpowiadający wpisowi, który nie ma być w /proc/config.gz
. Śr
oczekiwanie, że treść ciągu <value>
będzie dokładnie odpowiadać tekstowi po
znaku równości (wraz z cudzysłowami) do znaku nowego wiersza lub
#
z obciętym odstępem na początku i na końcu ciągu.
Oto przykład udanego dopasowania jądra:
# 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"
Taka konfiguracja jądra jest przykładem nieudanego dopasowania:
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
Pasujące zasady SE
Zasada SE wymaga tych dopasowań:
<sepolicy-version>
określa zamknięty zakres osób niepełnoletnich dla każdej wersji głównej. Wersja sepolicy zgłoszona przez urządzenie musi mieścić się w jednym z tych zakresów, aby był zgodny z platformą. Dopasowanie są podobne do wersji HAL, pasuje, jeśli wersja sepolicy to wyższą lub równą minimalnej wersji w danym zakresie. Maksymalna wersja to czysto informacyjna.<kernel-sepolicy-version>
, czyli wersja bazy danych policydb. Musi być mniejsza niż wartośćsecurity_policyvers()
zgłoszona przez urządzenie.
Przykład: udane dopasowanie zasad SE
Tablica zgodności platformy zawiera te informacje o sepolicy:
<sepolicy> <kernel-sepolicy-version>30</kernel-sepolicy-version> <sepolicy-version>25.0</sepolicy-version> <sepolicy-version>26.0-3</sepolicy-version> </sepolicy>
Na urządzeniu:
- Wartość zwracana przez funkcję
security_policyvers()
musi być większa nie więcej niż 30. W przeciwnym razie się nie uda. Na przykład:- Jeśli urządzenie zwraca kod 29, nie oznacza to dopasowania.
- Jeśli urządzenie zwróci kod 31, oznacza to dopasowanie.
- Wersja zasady SE musi mieć format 25.0-∞ lub 26.0-∞. W przeciwnym razie nie jest
dopasowania. („
-3
” po „26.0
” to całkowita wartość tylko informacyjną).
Pasujące wersje AVB
Wersja AVB zawiera wersję MAJOR i wersję MINOR w formacie jako GŁÓWNA.POMOCNA (np. 1,0 i 2,1). Więcej informacji: Kontrola wersji i zgodność. Wersja AVB ma te właściwości systemowe:
ro.boot.vbmeta.avb_version
to wersjalibavb
w programie rozruchowymro.boot.avb_version
to wersjalibavb
w: System operacyjny Android (init/fs_mgr
)
Właściwość systemowa pojawia się tylko wtedy, gdy użyto odpowiedniej biblioteki libavb w celu zweryfikowania metadanych AVB (i zwraca wartość OK). Pole nie występuje, jeśli weryfikacja się nie powiodła (lub w ogóle nie przeprowadzono weryfikacji).
Zgodność obejmuje takie elementy:
- sysprop
ro.boot.vbmeta.avb_version
zavb.vbmeta-version
z tabeli zgodności platformy;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
zavb.vbmeta-version
z tabeli zgodności platformy.ro.boot.avb_version.MAJOR == avb.vbmeta-version.MAJOR
ro.boot.avb_version.MINOR >= avb.vbmeta-version.MINOR
Program rozruchowy lub system operacyjny Android może zawierać dwie kopie pliku libavb
i bibliotekami. Każda z nich ma inną wersję MAJOR na potrzeby uaktualniania urządzeń
urządzenia. W takim przypadku można udostępnić ten sam niepodpisany obraz systemu, ale
ostateczne podpisane obrazy systemu są różne (różnią się
avb.vbmeta-version
):
Rysunek 1. Zgodność wersji AVB (/system to P, wszystkie pozostałe partycje są oznaczone jako O).
Rysunek 2. Zgodność wersji AVB (wszystkie partycje to P).
Przykład: udane dopasowanie wersji AVB
Macierz zgodności platformy zawiera te informacje o AVB:
<avb> <vbmeta-version>2.1</vbmeta-version> </avb>
Na urządzeniu:
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
Dopasowanie wersji AVB podczas OTA
Na urządzeniach z Androidem 9 lub starszym po aktualizacji do Android 10, AVB wymagania wersji w macierzy zgodności platformy są dopasowywane do bieżącego AVB w wersji zapisanej na urządzeniu. Jeśli wersja AVB została uaktualniona podczas aktualizacji OTA (na przykład od 0.0 do 1.0), weryfikacja zgodności VINTF w OTA nie odzwierciedla jej po OTA.
Aby rozwiązać ten problem, producent OEM może umieścić fałszywą wersję AVB w pakiecie OTA.
(compatibility.zip
), aby przejść weryfikację. Aby to zrobić:
- Wybierz te listy CL do drzewa źródłowego Androida 9:
- Określ
BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE
dla urządzenia. Jego wartość wersja AVB musi być równa wersji AVB przed OTA. Oznacza to, że wersja AVB urządzenia była który został już wprowadzony. - Utwórz ponownie pakiet OTA.
Zmiany te są automatycznie wprowadzane
BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE
jako
compatibility-matrix.avb.vbmeta-version
w tych plikach:
/system/compatibility_matrix.xml
(nieużywane w Androidzie 9) na urządzeniusystem_matrix.xml
wcompatibility.zip
w pakiecie OTA
Te zmiany nie mają wpływu na inne macierzy zgodności z platformami, w tym
/system/etc/vintf/compatibility_matrix.xml
Po zakończeniu aktualizacji OTA nowa wartość w argumencie
Zamiast tego do sprawdzania zgodności używany jest interfejs /system/etc/vintf/compatibility_matrix.xml
.
Zgodność wersji VNDK
Tablica zgodności urządzeń deklaruje wymaganą wersję VNDK w
compatibility-matrix.vendor-ndk.version
Jeśli urządzenie
tablica zgodności nie zawiera tagu <vendor-ndk>
, nie
i dlatego są zawsze uważane za dopasowanie.
Jeśli tablica zgodności urządzeń zawiera atrybut <vendor-ndk>
tag, wpis <vendor-ndk>
z pasującym
Domena <version>
została wyszukana na podstawie zestawu zrzutów dostawcy VNDK
które udostępnia platforma w pliku manifestu platformy. Jeśli taki wpis nie zostanie
nie ma żadnego dopasowania.
Jeśli taki wpis istnieje, zestaw bibliotek wyliczonych w urządzeniu tablica zgodności musi być podzbiorem zbiorów bibliotek określonych w plik manifestu platformy; w przeciwnym razie wpis nie zostanie uznany za pasujący.
- Szczególny przypadek: jeśli urządzenie nie wymieniono żadnych bibliotek macierz zgodności, wpis jest zawsze uważany za dopasowanie, ponieważ jest pusty jest podzbiorem dowolnego zbioru.
Przykład: udane dopasowanie wersji VNDK
Jeśli tablica zgodności urządzeń zawiera to wymaganie dotyczące VNDK:
<!-- Example Device Compatibility Matrix --> <vendor-ndk> <version>27</version> <library>libjpeg.so</library> <library>libbase.so</library> </vendor-ndk>
W pliku manifestu platformy uwzględniany jest tylko wpis w wersji 27.
<!-- Framework Manifest Example A --> <vendor-ndk> <version>27</version> <library>libjpeg.so</library> <library>libbase.so</library> <library>libfoo.so</library> </vendor-ndk>
Przykład A pasuje, ponieważ VNDK w wersji 27 znajduje się w pliku manifestu platformy,
i {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>
Przykład B nie pasuje. Mimo że VNDK w wersji 27 jest już dostępny
pliku manifestu, libjpeg.so
nie jest obsługiwany przez platformę w tym
zdjęcia. VNDK w wersji 26 jest ignorowane.
Jednakowe wersje pakietu SDK systemu
Tablica zgodności urządzeń deklaruje zestaw wymaganego systemowego pakietu SDK
wersję w systemie compatibility-matrix.system-sdk.version
. Jest
pasuje tylko wtedy, gdy zbiór jest podzbiorem przesłanych wersji systemowych pakietów SDK zgodnie z zadeklarowaniem
w manifest.system-sdk.version
w pliku manifestu platformy.
- Szczególny przypadek: jeśli na urządzeniu nie zostały wymienione żadne wersje systemowego pakietu SDK macierz zgodności, zawsze jest uznawana za dopasowanie, ponieważ jest pusta jest podzbiorem dowolnego zbioru.
Przykład: udane dopasowanie wersji pakietu systemowego pakietu SDK
Jeśli tablica zgodności urządzeń zawiera to wymaganie dotyczące systemu Pakiet SDK:
<!-- Example Device Compatibility Matrix --> <system-sdk> <version>26</version> <version>27</version> </system-sdk>
Następnie platforma musi udostępniać systemowy pakiet SDK w wersji 26 i 27.
<!-- Framework Manifest Example A --> <system-sdk> <version>26</version> <version>27</version> </system-sdk>
Przykład A pasuje.
<!-- Framework Manifest Example B --> <system-sdk> <version>26</version> <version>27</version> <version>28</version> </system-sdk>
Przykład B pasuje.
<!-- Framework Manifest Example C --> <system-sdk> <version>26</version> </system-sdk>
Przykład C nie pasuje, ponieważ nie podano systemowego pakietu SDK w wersji 27.