Matryce zgodności

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

W tej sekcji opisano macierze zgodności ram i urządzeń oraz schemat macierzy zgodności . Aby zapoznać się z regułami dopasowywania, zobacz Reguły dopasowywania .

Macierz zgodności ram (FCM)

Macierz zgodności ram (FCM) opisuje wymagania struktury 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 przez manifest urządzenia (wymagania wymuszane w czasie kompilacji, w czasie wykonywania i w VTS).

FCM system_ext i FCM produktu są uzupełnieniem FCM specyficznego dla urządzenia (zainstalowanego na partycji systemowej).

  • Urządzenie FCM powinno odzwierciedlać wymagania modułów w partycji systemowej .
  • System_ext FCM powinien odzwierciedlać wymagania modułów w partycji system_ext.
  • FCM produktu powinien odzwierciedlać wymagania według modułów w podziale na produkty .

Wszystkie FCM powinny być zgodne z modyfikacjami OEM wprowadzonymi do struktury w partycjach system, product i system_ext. Na przykład, jeśli aplikacja zainstalowana w partycji produktu używa rozszerzenia dostawcy interfejsu HAL, wymagania interfejsu HAL należy zadeklarować w FCM produktu.

Przykładowy plik macierzy kompatybilnoś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 .

Macierz kompatybilności produktów

Produkt FCM to plik macierzy kompatybilności struktury w partycji produktu. Obiekt VINTF łączy produkt FCM z FCM w partycjach system 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 kompatybilności struktury w partycji system_ext. Obiekt VINTF łączy system_ext FCM z FCM w partycjach systemowych i produktowych w czasie wykonywania. Zobacz macierz zgodności produktów, aby zobaczyć przykładowy plik system_ext FCM.

Macierz zgodności urządzeń (DCM)

Macierz zgodności urządzeń opisuje zestaw wymagań, których urządzenie oczekuje od struktury (wymagania wymuszane podczas uruchamiania i czasu 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ódłowym systemu Android może brakować niektórych „wymaganych” tagów, które są zapisywane przez assemble_vintf w czasie kompilacji. Tagi „Wymagane” muszą znajdować się w odpowiednich plikach na urządzeniu.

?xml
Opcjonalny. Dostarcza tylko informacji do parsera XML.
compatibility-matrix.version
Wymagany. Meta-wersja tej macierzy zgodności. Opisuje elementy oczekiwane w macierzy zgodności. Niepowiązany z wersją XML.
compatibility-matrix.type
Wymagany. Typ tej macierzy zgodności:
  • "device" : macierz zgodności urządzeń.
  • "framework" : macierz zgodności struktury.
manifest.level
Wymagane dla macierzy zgodności struktury. W systemie Android 12 i nowszych dozwolone w plikach macierzy kompatybilności struktury w partycjach product i system_ext. Określa wersję Framework Compatibility Matrix (wersja FCM) tego pliku. Nie deklaruj tego w macierzy kompatybilności struktury specyficznej dla urządzenia (tj. DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
Opcjonalne i można powtórzyć. Wyświetla pojedynczą warstwę HAL (HIDL lub natywną), której obecność jest wymagana przez właściciela macierzy zgodności (struktury lub urządzenia). Wpisy HAL są rozróżniane przez element <name> ; może istnieć kilka wpisów HAL o tej samej nazwie (implikuje warunek „i”).
compatibility-matrix.hal.format
Opcjonalny. Wartość może być jedną z:
  • "hidl" : HIDL HAL. To jest ustawienie domyślne.
  • "aidl" : AIDL HAL . Obowiązuje tylko w meta-wersji 2.0 macierzy kompatybilności.
  • "native" : natywne warstwy HAL.
compatibility-matrix.hal.optional
Atrybut jest opcjonalny i domyślnie ustawiony na false. Określa, czy ta warstwa HAL jest opcjonalna dla właściciela macierzy zgodnoś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 (natywna HAL, wymaga tylko nazwy)
compatibility-matrix.hal.version
Lista zakresów wersji (zobacz dopasowania HAL ), która określa, jakich wersji oczekuje właściciel macierzy zgodności (struktury lub urządzenia).

Wymagane dla HIDL i rodzimych warstw HAL, mogą się powtarzać bez duplikatów. Format jest jednym z następujących:
  • MAJOR . MINOR_MIN - MINOR_MAX
  • MAJOR . MINOR (odpowiednik MAJOR . MINOR - MINOR )

W przypadku AIDL HAL nie może być obecny na urządzeniach z systemem Android 11 lub starszym. Opcjonalne na urządzeniach z nowszymi wersjami. Jeśli określono, format jest jednym z następujących:
  • VERSION_MIN - VERSION_MAX
  • VERSION (odpowiednik VERSION - VERSION )
Jeśli nie zostanie określony, wartość domyślna to 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 rozszerzonego formatu wyrażeń regularnych .
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> , aby sugerować relację „i”. Każde <kernel> jest „fragmentem” wymagań, które są włączone tylko wtedy, gdy spełnione są <conditions> .
compatibility-matrix.kernel.version
Wymagany. Wersja jądra. Format to VERSION . MAJOR_REVISION . MINOR_REVISION . Wersja i wersja główna muszą dokładnie pasować. Drobna wersja definiuje minimalną wersję LTS jądra oczekiwaną przez platformę.
compatibility-matrix.kernel.condition
Opcjonalny. Nie może istnieć dla pierwszego <kernel> każdej wersji. Określa listę warunków. Gdy warunki są spełnione, wymagania określone w tym fragmencie <kernel> są włączone.
compatibility-matrix.kernel.config
Opcjonalnie, można powtórzyć. Wyświetla elementy CONFIG , które muszą być dopasowane dla tej wersji jądra. Każdy element CONFIG jest parą klucz-wartość; elementy konfiguracji są rozróżniane według klucza.
compatibility-matrix.kernel.config.key
Wymagany. Nazwa klucza pozycji CONFIG . Zaczyna się od CONFIG_ .
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 (muszą zaczynać się od 0x lub 0X) . Interpretowane jako 64-bitowa liczba całkowita; przepełnienia skutkują obcięciem. (Parser akceptuje wartości od -2 64 + 1 do 2 64 - 1, 65-ty bit jest obcinany; szczegółowe informacje można znaleźć na stronie podręcznika strtoull .)
  • range . Format to [int]-[int] , np. 10-20 . Wartości szesnastkowe są akceptowane i muszą zaczynać się od 0x lub 0X . Dwie granice muszą być 64-bitową liczbą całkowitą bez znaku.
  • tristate . Prawidłowe wartości to y , m i n .
compatibility-matrix.kernel.config.value.type
Wymagany. Typ wartości pozycji CONFIG , jeden z:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Wymagany. Zawiera wszystkie wpisy związane z sepolicy. Używany tylko przez macierz zgodności struktury.
compatibility-matrix.sepolicy.sepolicy-version
Wymagane, można powtórzyć. Opisuje wymagania dotyczące wersji sepolicy. Odpowiada manifest.sepolicy.version . Każda instancja elementu definiuje zakres wersji sepolicy.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Wymagany. Deklaruje wersję policydb , z którą współpracuje struktura.
compatibility-matrix.avb.vbmeta-version
Opcjonalny; używany tylko przez macierz kompatybilności struktury. Deklaruje wersję AVB używaną do podpisywania system.img . Przestarzałe w Androidzie 10.
compatibility-matrix.vendor-ndk
Opcjonalny; używany tylko przez macierz kompatybilności urządzeń. Deklaruje wymaganie migawki dostawcy VNDK. Jeśli go nie ma, obraz systemu nie wymaga VNDK.
compatibility-matrix.vendor-ndk.version
Wymagany. Dodatnia liczba całkowita, która deklaruje 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 macierz kompatybilności urządzeń. Deklaruje wymagania aplikacji dostawców w wersjach zestawu SDK systemu. Jeśli go nie ma, obraz systemu nie wymaga żadnego zestawu SDK systemu.
,

W tej sekcji opisano macierze zgodności ram i urządzeń oraz schemat macierzy zgodności . Aby zapoznać się z regułami dopasowywania, zobacz Reguły dopasowywania .

Macierz zgodności ram (FCM)

Macierz zgodności ram (FCM) opisuje wymagania struktury 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 przez manifest urządzenia (wymagania wymuszane w czasie kompilacji, w czasie wykonywania i w VTS).

FCM system_ext i FCM produktu są uzupełnieniem FCM specyficznego dla urządzenia (zainstalowanego na partycji systemowej).

  • Urządzenie FCM powinno odzwierciedlać wymagania modułów w partycji systemowej .
  • System_ext FCM powinien odzwierciedlać wymagania modułów w partycji system_ext.
  • FCM produktu powinien odzwierciedlać wymagania według modułów w podziale na produkty .

Wszystkie FCM powinny być zgodne z modyfikacjami OEM wprowadzonymi do struktury w partycjach system, product i system_ext. Na przykład, jeśli aplikacja zainstalowana w partycji produktu używa rozszerzenia dostawcy interfejsu HAL, wymagania interfejsu HAL należy zadeklarować w FCM produktu.

Przykładowy plik macierzy kompatybilnoś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 .

Macierz kompatybilności produktów

Produkt FCM to plik macierzy kompatybilności struktury w partycji produktu. Obiekt VINTF łączy produkt FCM z FCM w partycjach system 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 kompatybilności struktury w partycji system_ext. Obiekt VINTF łączy system_ext FCM z FCM w partycjach systemowych i produktowych w czasie wykonywania. Zobacz macierz zgodności produktów, aby zobaczyć przykładowy plik system_ext FCM.

Macierz zgodności urządzeń (DCM)

Macierz zgodności urządzeń opisuje zestaw wymagań, których urządzenie oczekuje od struktury (wymagania wymuszane podczas uruchamiania i czasu 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ódłowym systemu Android może brakować niektórych „wymaganych” tagów, które są zapisywane przez assemble_vintf w czasie kompilacji. Tagi „Wymagane” muszą znajdować się w odpowiednich plikach na urządzeniu.

?xml
Opcjonalny. Dostarcza tylko informacji do parsera XML.
compatibility-matrix.version
Wymagany. Meta-wersja tej macierzy zgodności. Opisuje elementy oczekiwane w macierzy zgodności. Niepowiązany z wersją XML.
compatibility-matrix.type
Wymagany. Typ tej macierzy zgodności:
  • "device" : macierz zgodności urządzeń.
  • "framework" : macierz zgodności struktury.
manifest.level
Wymagane dla macierzy zgodności platformy. W systemie Android 12 i nowszych dozwolone w plikach macierzy kompatybilności struktury w partycjach product i system_ext. Określa wersję Framework Compatibility Matrix (wersja FCM) tego pliku. Nie deklaruj tego w macierzy kompatybilności struktury specyficznej dla urządzenia (tj. DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
Opcjonalne i można powtórzyć. Wyświetla pojedynczą warstwę HAL (HIDL lub natywną), której obecność jest wymagana przez właściciela macierzy zgodności (struktury lub urządzenia). Wpisy HAL są rozróżniane przez element <name> ; może istnieć kilka wpisów HAL o tej samej nazwie (implikuje warunek „i”).
compatibility-matrix.hal.format
Opcjonalny. Wartość może być jedną z:
  • "hidl" : HIDL HAL. To jest ustawienie domyślne.
  • "aidl" : AIDL HAL . Obowiązuje tylko w meta-wersji 2.0 macierzy kompatybilności.
  • "native" : natywne warstwy HAL.
compatibility-matrix.hal.optional
Atrybut jest opcjonalny i domyślnie ustawiony na false. Określa, czy ta warstwa HAL jest opcjonalna dla właściciela macierzy zgodnoś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 (natywna HAL, wymaga tylko nazwy)
compatibility-matrix.hal.version
Lista zakresów wersji (zobacz dopasowania HAL ), która określa, jakich wersji oczekuje właściciel macierzy zgodności (struktury lub urządzenia).

Wymagane dla HIDL i rodzimych warstw HAL, mogą się powtarzać bez duplikatów. Format jest jednym z następujących:
  • MAJOR . MINOR_MIN - MINOR_MAX
  • MAJOR . MINOR (odpowiednik MAJOR . MINOR - MINOR )

W przypadku AIDL HAL nie może być obecny na urządzeniach z systemem Android 11 lub starszym. Opcjonalne na urządzeniach z nowszymi wersjami. Jeśli określono, format jest jednym z następujących:
  • VERSION_MIN - VERSION_MAX
  • VERSION (odpowiednik VERSION - VERSION )
Jeśli nie zostanie określony, wartość domyślna to 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 rozszerzonego formatu wyrażeń regularnych .
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> , aby sugerować relację „i”. Każde <kernel> jest „fragmentem” wymagań, które są włączone tylko wtedy, gdy spełnione są <conditions> .
compatibility-matrix.kernel.version
Wymagany. Wersja jądra. Format to VERSION . MAJOR_REVISION . MINOR_REVISION . Wersja i wersja główna muszą dokładnie pasować. Drobna wersja definiuje minimalną wersję LTS jądra oczekiwaną przez platformę.
compatibility-matrix.kernel.condition
Opcjonalny. Nie może istnieć dla pierwszego <kernel> każdej wersji. Określa listę warunków. Gdy warunki są spełnione, wymagania określone w tym fragmencie <kernel> są włączone.
compatibility-matrix.kernel.config
Opcjonalnie, można powtórzyć. Wyświetla elementy CONFIG , które muszą być dopasowane dla tej wersji jądra. Każdy element CONFIG jest parą klucz-wartość; elementy konfiguracji są rozróżniane według klucza.
compatibility-matrix.kernel.config.key
Wymagany. Nazwa klucza pozycji CONFIG . Zaczyna się od CONFIG_ .
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 (muszą zaczynać się od 0x lub 0X) . Interpretowane jako 64-bitowa liczba całkowita; przepełnienia skutkują obcięciem. (Parser akceptuje wartości od -2 64 + 1 do 2 64 - 1, 65-ty bit jest obcinany; szczegółowe informacje można znaleźć na stronie podręcznika strtoull .)
  • range . Format to [int]-[int] , np. 10-20 . Wartości szesnastkowe są akceptowane i muszą zaczynać się od 0x lub 0X . Dwie granice muszą być 64-bitową liczbą całkowitą bez znaku.
  • tristate . Prawidłowe wartości to y , m i n .
compatibility-matrix.kernel.config.value.type
Wymagany. Typ wartości pozycji CONFIG , jeden z:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Wymagany. Zawiera wszystkie wpisy związane z sepolicy. Używany tylko przez macierz zgodności struktury.
compatibility-matrix.sepolicy.sepolicy-version
Wymagane, można powtórzyć. Opisuje wymagania dotyczące wersji sepolicy. Odpowiada manifest.sepolicy.version . Każda instancja elementu definiuje zakres wersji sepolicy.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Wymagany. Deklaruje wersję policydb , z którą współpracuje platforma.
compatibility-matrix.avb.vbmeta-version
Opcjonalny; używany tylko przez macierz kompatybilności struktury. Deklaruje wersję AVB używaną do podpisywania system.img . Przestarzałe w Androidzie 10.
compatibility-matrix.vendor-ndk
Opcjonalny; używany tylko przez macierz kompatybilności urządzeń. Deklaruje wymaganie migawki dostawcy VNDK. Jeśli go nie ma, obraz systemu nie wymaga VNDK.
compatibility-matrix.vendor-ndk.version
Wymagany. Dodatnia liczba całkowita, która deklaruje 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 macierz kompatybilności urządzeń. Deklaruje wymagania aplikacji dostawców w wersjach zestawu SDK systemu. Jeśli go nie ma, obraz systemu nie wymaga żadnego zestawu SDK systemu.
,

W tej sekcji opisano macierze zgodności ram i urządzeń oraz schemat macierzy zgodności . Aby zapoznać się z regułami dopasowywania, zobacz Reguły dopasowywania .

Macierz zgodności ram (FCM)

Macierz zgodności ram (FCM) opisuje wymagania struktury 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 przez manifest urządzenia (wymagania wymuszane w czasie kompilacji, w czasie wykonywania i w VTS).

FCM system_ext i FCM produktu są uzupełnieniem FCM specyficznego dla urządzenia (zainstalowanego na partycji systemowej).

  • Urządzenie FCM powinno odzwierciedlać wymagania modułów w partycji systemowej .
  • System_ext FCM powinien odzwierciedlać wymagania modułów w partycji system_ext.
  • FCM produktu powinien odzwierciedlać wymagania według modułów w podziale na produkty .

Wszystkie FCM powinny być zgodne z modyfikacjami OEM wprowadzonymi do struktury w partycjach system, product i system_ext. Na przykład, jeśli aplikacja zainstalowana w partycji produktu używa rozszerzenia dostawcy interfejsu HAL, wymagania interfejsu HAL należy zadeklarować w FCM produktu.

Przykładowy plik macierzy kompatybilnoś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 .

Macierz kompatybilności produktów

Produkt FCM to plik macierzy kompatybilności struktury w partycji produktu. Obiekt VINTF łączy produkt FCM z FCM w partycjach system 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 kompatybilności struktury w partycji system_ext. Obiekt VINTF łączy system_ext FCM z FCM w partycjach systemowych i produktowych w czasie wykonywania. Zobacz macierz zgodności produktów, aby zobaczyć przykładowy plik system_ext FCM.

Macierz zgodności urządzeń (DCM)

Macierz zgodności urządzeń opisuje zestaw wymagań, których urządzenie oczekuje od struktury (wymagania wymuszane podczas uruchamiania i czasu 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ódłowym systemu Android może brakować niektórych „wymaganych” tagów, które są zapisywane przez assemble_vintf w czasie kompilacji. Tagi „Wymagane” muszą znajdować się w odpowiednich plikach na urządzeniu.

?xml
Opcjonalny. Dostarcza tylko informacji do parsera XML.
compatibility-matrix.version
Wymagany. Meta-wersja tej macierzy zgodności. Opisuje elementy oczekiwane w macierzy zgodności. Niepowiązany z wersją XML.
compatibility-matrix.type
Wymagany. Typ tej macierzy zgodności:
  • "device" : macierz zgodności urządzeń.
  • "framework" : macierz zgodności struktury.
manifest.level
Wymagane dla macierzy zgodności struktury. W systemie Android 12 i nowszych dozwolone w plikach macierzy kompatybilności struktury w partycjach product i system_ext. Określa wersję Framework Compatibility Matrix (wersja FCM) tego pliku. Nie deklaruj tego w macierzy kompatybilności struktury specyficznej dla urządzenia (tj. DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
Opcjonalne i można powtórzyć. Wyświetla pojedynczą warstwę HAL (HIDL lub natywną), której obecność jest wymagana przez właściciela macierzy zgodności (struktury lub urządzenia). Wpisy HAL są rozróżniane przez element <name> ; może istnieć kilka wpisów HAL o tej samej nazwie (implikuje warunek „i”).
compatibility-matrix.hal.format
Opcjonalny. Wartość może być jedną z:
  • "hidl" : HIDL HAL. To jest ustawienie domyślne.
  • "aidl" : AIDL HAL . Obowiązuje tylko w meta-wersji 2.0 macierzy kompatybilności.
  • "native" : natywne warstwy HAL.
compatibility-matrix.hal.optional
Atrybut jest opcjonalny i domyślnie ustawiony na false. Określa, czy ta warstwa HAL jest opcjonalna dla właściciela macierzy zgodnoś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 (natywna HAL, wymaga tylko nazwy)
compatibility-matrix.hal.version
Lista zakresów wersji (zobacz dopasowania HAL ), która określa, jakich wersji oczekuje właściciel macierzy zgodności (struktury lub urządzenia).

Wymagane dla HIDL i rodzimych warstw HAL, mogą się powtarzać bez duplikatów. Format jest jednym z następujących:
  • MAJOR . MINOR_MIN - MINOR_MAX
  • MAJOR . MINOR (odpowiednik MAJOR . MINOR - MINOR )

W przypadku AIDL HAL nie może być obecny na urządzeniach z systemem Android 11 lub starszym. Opcjonalne na urządzeniach z nowszymi wersjami. Jeśli określono, format jest jednym z następujących:
  • VERSION_MIN - VERSION_MAX
  • VERSION (odpowiednik VERSION - VERSION )
Jeśli nie zostanie określony, wartość domyślna to 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 rozszerzonego formatu wyrażeń regularnych .
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> , aby sugerować relację „i”. Każde <kernel> jest „fragmentem” wymagań, które są włączone tylko wtedy, gdy spełnione są <conditions> .
compatibility-matrix.kernel.version
Wymagany. Wersja jądra. Format to VERSION . MAJOR_REVISION . MINOR_REVISION . Wersja i wersja główna muszą dokładnie pasować. Drobna wersja definiuje minimalną wersję LTS jądra oczekiwaną przez platformę.
compatibility-matrix.kernel.condition
Opcjonalny. Nie może istnieć dla pierwszego <kernel> każdej wersji. Określa listę warunków. Gdy warunki są spełnione, wymagania określone w tym fragmencie <kernel> są włączone.
compatibility-matrix.kernel.config
Opcjonalnie, można powtórzyć. Wyświetla elementy CONFIG , które muszą być dopasowane dla tej wersji jądra. Każdy element CONFIG jest parą klucz-wartość; elementy konfiguracji są rozróżniane według klucza.
compatibility-matrix.kernel.config.key
Wymagany. Nazwa klucza pozycji CONFIG . Zaczyna się od CONFIG_ .
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 (muszą zaczynać się od 0x lub 0X) . Interpretowane jako 64-bitowa liczba całkowita; przepełnienia skutkują obcięciem. (Parser akceptuje wartości od -2 64 + 1 do 2 64 - 1, 65-ty bit jest obcinany; szczegółowe informacje można znaleźć na stronie podręcznika strtoull .)
  • range . Format to [int]-[int] , np. 10-20 . Wartości szesnastkowe są akceptowane i muszą zaczynać się od 0x lub 0X . Dwie granice muszą być 64-bitową liczbą całkowitą bez znaku.
  • tristate . Prawidłowe wartości to y , m i n .
compatibility-matrix.kernel.config.value.type
Wymagany. Typ wartości pozycji CONFIG , jeden z:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Wymagany. Zawiera wszystkie wpisy związane z sepolicy. Używany tylko przez macierz zgodności struktury.
compatibility-matrix.sepolicy.sepolicy-version
Wymagane, można powtórzyć. Opisuje wymagania dotyczące wersji sepolicy. Odpowiada manifest.sepolicy.version . Każda instancja elementu definiuje zakres wersji sepolicy.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Wymagany. Deklaruje wersję policydb , z którą współpracuje platforma.
compatibility-matrix.avb.vbmeta-version
Opcjonalny; używany tylko przez macierz kompatybilności struktury. Deklaruje wersję AVB używaną do podpisywania system.img . Przestarzałe w Androidzie 10.
compatibility-matrix.vendor-ndk
Opcjonalny; używany tylko przez macierz kompatybilności urządzeń. Deklaruje wymaganie migawki dostawcy VNDK. Jeśli go nie ma, obraz systemu nie wymaga VNDK.
compatibility-matrix.vendor-ndk.version
Wymagany. Dodatnia liczba całkowita, która deklaruje 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 macierz kompatybilności urządzeń. Deklaruje wymagania aplikacji dostawców w wersjach zestawu SDK systemu. Jeśli go nie ma, obraz systemu nie wymaga żadnego zestawu SDK systemu.