W tej sekcji opisano strukturę i macierze kompatybilności urządzeń oraz schemat macierzy kompatybilności . Aby zapoznać się z regułami dopasowania, zobacz Reguły dopasowywania .
Macierz zgodności ram (FCM)
Macierz zgodności platformy (FCM) opisuje wymagania platformy na urządzeniu, na którym działa. Macierz zgodności platformy składa się z macierzy zgodności systemu, macierzy zgodności produktu i macierzy zgodności system_ext . Wymagania FCM muszą być spełnione w manifeście urządzenia (wymagania egzekwowane w czasie kompilacji, w czasie wykonywania i w VTS).
System_ext FCM i produkt FCM są uzupełnieniem FCM specyficznego dla urządzenia (zainstalowanego na partycji systemowej).
- Urządzenie FCM powinno odzwierciedlać wymagania modułów znajdujących się w partycji systemowej .
- FCM system_ext powinien odzwierciedlać wymagania modułów w partycji system_ext.
- Produkt FCM powinien odzwierciedlać wymagania poszczególnych modułów w podziale produktu .
Wszystkie FCM powinny być zgodne z modyfikacjami OEM wprowadzonymi do struktury w partycjach systemowych, produktowych i system_ext. Na przykład, jeśli aplikacja zainstalowana na partycji produktu korzysta z rozszerzenia dostawcy interfejsu HAL, wymagania dotyczące interfejsu HAL należy zadeklarować w pliku FCM produktu.
Przykładowy plik macierzy zgodności systemu:
<?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>
Aby uzyskać więcej informacji, zobacz Cykl życia FCM .
Matryca kompatybilności produktów
Produkt FCM to plik macierzy zgodności platformy na partycji produktu. Obiekt VINTF łączy FCM produktu z FCM w partycjach systemowych i system_ext w czasie wykonywania.
Przykładowy plik FCM produktu:
<?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>
Macierz zgodności System_ext
System_ext FCM to plik macierzy zgodności frameworka na partycji system_ext. Obiekt VINTF łączy FCM system_ext z FCM w partycjach systemowych i produktu w czasie wykonywania. Zobacz tabelę zgodności produktów , aby zapoznać się z przykładowym plikiem FCM system_ext.
Macierz zgodności urządzeń (DCM)
Macierz kompatybilności urządzeń opisuje zestaw wymagań, jakich urządzenie oczekuje od platformy (wymagania egzekwowane w momencie uruchomienia i w czasie OTA).
Przykładowy plik DCM:
<?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>
Schemat macierzy zgodności
W tej sekcji opisano znaczenie tych znaczników XML. W pliku źródłowym w drzewie źródeł Androida może brakować niektórych „wymaganych” tagów i są one zapisywane przez assemble_vintf
w czasie kompilacji. „Wymagane” tagi muszą znajdować się w odpowiednich plikach na urządzeniu.
-
?xml
- Opcjonalny. Dostarcza jedynie informacji do parsera XML.
-
compatibility-matrix.version
- Wymagany. Meta-wersja tej macierzy zgodności. Opisuje elementy oczekiwane w macierzy zgodności. Niezwiązane z wersją XML.
-
compatibility-matrix.type
- Wymagany. Typ tej matrycy zgodności:
-
"device"
: macierz kompatybilności urządzeń. -
"framework"
: macierz zgodności frameworka.
-
-
manifest.level
- Wymagane dla macierzy zgodności platformy. W Androidzie 12 i nowszych, dozwolone w ramach plików macierzy zgodności w partycjach produktu i system_ext. Określa wersję macierzy zgodności platformy (wersja FCM) tego pliku. Nie deklaruj tego w macierzy zgodności platformy specyficznej dla urządzenia (tj.
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE
). -
compatibility-matrix.hal
- Opcjonalne i można je powtórzyć. Wyświetla pojedynczą warstwę HAL (HIDL lub natywną), która jest wymagana przez właściciela macierzy zgodności (frameworka lub urządzenia). Wpisy HAL wyróżniają się elementem
<name>
; może istnieć kilka wpisów HAL o tej samej nazwie (co oznacza warunek „i”). -
compatibility-matrix.hal.format
- Opcjonalny. Wartość może być jedną z:
-
"hidl"
: HIDL HAL. To jest ustawienie domyślne. -
"aidl"
: AIDL HAL . Dotyczy tylko meta-wersji macierzy zgodności 2.0. -
"native"
: natywne warstwy HAL.
-
-
compatibility-matrix.hal.optional
- Atrybut jest opcjonalny i domyślnie ma wartość false. Określa, czy ta warstwa HAL jest opcjonalna dla właściciela macierzy kompatybilności (struktury lub urządzenia). Jeśli wpis
<hal>
jest oznaczony jako opcjonalny, oznacza to, że właściciel może pracować z tą warstwą HAL, jeśli jest obecna, ale nie wymaga jej obecności. -
compatibility-matrix.hal.name
- Wymagany. Pełna nazwa pakietu tej warstwy HAL. Przykłady:
-
android.hardware.camera
(HIDL lub AIDL HAL) -
GLES
(natywny HAL, wymaga tylko nazwy)
-
-
compatibility-matrix.hal.version
- Lista zakresów wersji (zobacz Dopasowania HAL ), która definiuje, jakich wersji oczekuje właściciel macierzy kompatybilności (framework lub urządzenie).
W przypadku HIDL i natywnych HAL wymagane jest powtarzanie bez duplikatów. Format jest jednym z następujących:-
MAJOR . MINOR_MIN - MINOR_MAX
-
MAJOR . MINOR
(odpowiednikMAJOR . MINOR - MINOR
)
W przypadku AIDL HAL nie może być obecny na urządzeniach z Androidem 11 i starszym. Opcjonalnie na urządzeniach z nowszymi wersjami. Jeśli określono, format jest jednym z następujących:-
VERSION_MIN - VERSION_MAX
-
VERSION
(odpowiednikVERSION - VERSION
)
1
. -
-
compatibility-matrix.hal.interface
- Opcjonalnie, można powtórzyć. Lista wymaganych interfejsów tej warstwy HAL.
-
compatibility-matrix.hal.interface.name
- Wymagany. Nazwa interfejsu.
-
compatibility-matrix.hal.interface.instance
- Opcjonalnie, można powtórzyć. Lista wymaganych instancji tego interfejsu.
-
compatibility-matrix.hal.interface.regex-instance
- Opcjonalnie, można powtórzyć. Lista wymaganych wzorców nazw instancji w tym interfejsie. Użyj formatu rozszerzonego wyrażenia regularnego .
-
compatibility-matrix.kernel
- Opcjonalnie, można powtórzyć. Określ listę konfiguracji jądra wymaganych przez platformę w każdej wersji jądra.
Może istnieć wiele<kernel>
z tą samą<version>
, co sugeruje relację „i”. Każde<kernel>
jest „fragmentem” wymagań, które są włączane tylko wtedy, gdy spełnione są<conditions>
. -
compatibility-matrix.kernel.version
- Wymagany. Wersja jądra. Format to
VERSION . MAJOR_REVISION . MINOR_REVISION
. Wersja i główna wersja muszą dokładnie pasować. Drobna wersja definiuje minimalną wersję jądra LTS, jakiej oczekuje framework. -
compatibility-matrix.kernel.condition
- Opcjonalny. Nie może istnieć dla pierwszego
<kernel>
każdej wersji. Określa listę warunków. Gdy warunki zostaną spełnione, wymagania określone w tym fragmencie<kernel>
zostaną włączone. -
compatibility-matrix.kernel.config
- Opcjonalnie, można powtórzyć. Wyświetla listę elementów
CONFIG
, które muszą być dopasowane dla tej wersji jądra. Każdy elementCONFIG
jest parą klucz-wartość; elementy konfiguracji są rozróżniane według klucza. -
compatibility-matrix.kernel.config.key
- Wymagany. Nazwa klucza elementu
CONFIG
. Zaczyna się odCONFIG_
. -
compatibility-matrix.kernel.config.value
- Wymagany. Wartość pozycji
CONFIG
. Format zależy od typu:-
string
. Cytaty są pomijane. -
int
. Akceptowane są wartości dziesiętne i szesnastkowe (musi zaczynać się od0x
lub0X)
. Interpretowane jako 64-bitowa liczba całkowita; przepełnienia powodują obcięcie. (Parser akceptuje wartości od -2 64 + 1 do 2 64 - 1, 65-ty bit jest obcięty; szczegółowe informacje można znaleźć na stronie podręcznika strtoull .) -
range
. Format to[int]-[int]
, np.10-20
. Akceptowane są wartości szesnastkowe, które muszą zaczynać się od0x
lub0X
. Dwie granice muszą być 64-bitową liczbą całkowitą bez znaku. -
tristate
. Poprawne wartości toy
,m
in
.
-
-
compatibility-matrix.kernel.config.value.type
- Wymagany. Typ wartości pozycji
CONFIG
, jedna z:-
string
-
int
-
range
-
tristate
-
-
compatibility-matrix.sepolicy
- Wymagany. Zawiera wszystkie wpisy związane z sepolicy. Używany tylko przez macierz zgodności platformy.
-
compatibility-matrix.sepolicy.sepolicy-version
- Wymagane, można powtórzyć. Opisuje wymagania dotyczące wersji sepolicy. Odpowiada
manifest.sepolicy.version
. Każde wystąpienie elementu definiuje zakres wersji sepolicy. -
compatibility-matrix.sepolicy.kernel-sepolicy-version
- Wymagany. Deklaruje wersję
policydb
, z którą współpracuje framework. -
compatibility-matrix.avb.vbmeta-version
- Opcjonalny; używany tylko przez macierz zgodności platformy. Deklaruje wersję AVB używaną do podpisywania pliku
system.img
. Przestarzałe w Androidzie 10. -
compatibility-matrix.vendor-ndk
- Opcjonalny; używany tylko przez matrycę kompatybilności urządzenia. Deklaruje wymaganie migawki dostawcy VNDK. Jeśli go nie ma, w obrazie systemu nie ma wymagań dotyczących VNDK.
-
compatibility-matrix.vendor-ndk.version
- Wymagany. Dodatnia liczba całkowita deklarująca wersję VNDK wymaganą przez obraz dostawcy.
-
compatibility-matrix.vendor-ndk.library
- Opcjonalnie, można powtórzyć. Deklaruje zestaw bibliotek VNDK wymaganych przez obraz dostawcy. Taka sama semantyka jak
manifest.vendor-ndk.library
. -
compatibility-matrix.system-sdk.version
- Opcjonalnie, można powtórzyć; używany tylko przez matrycę kompatybilności urządzenia. Deklaruje wymagania aplikacji dostawców w wersjach System SDK. Jeśli go brakuje, na obrazie systemu nie ma wymagań dotyczących zestawu SDK systemu.