Macierze zgodności

W tej sekcji opisano systemy zgodności platformy i urządzeń schemat macierzy zgodności. Dla: reguł dopasowania, patrz sekcja Dopasowywanie Zasady.

Macierz zgodności platformy (FCM)

Tablica zgodności platformy (FCM) opisuje wymagania na urządzeniu, na którym działa. Tablica zgodności platformy składa się z systemu tablica zgodności, tabelę zgodności usług, oraz tabeli zgodności system_ext. Wymagania FCM muszą być spełnione w pliku manifestu urządzenia (wymagania) są egzekwowane w momencie kompilacji, w czasie działania i w VTS).

FCM system_ext i FCM produktu to uzupełnienie FCM dla konkretnego urządzenia (zainstalowanego) na partycji systemowej).

  • FCM urządzenia powinno odzwierciedlać wymagania modułów w partycji systemu.
  • Parametr system_ext FCM powinien odzwierciedlać wymagania modułów w partycji system_ext.
  • FCM produktu powinien odzwierciedlać wymagania zawarte w modułach w partycja produktu.

Wszystkie FCM powinny być zgodne z modyfikacjami producenta OEM w strukturze systemu, produktu, i partycji system_ext. Jeśli na przykład aplikacja zainstalowana na partycji produktu korzysta z rozszerzenia dostawcy interfejsu HAL, wymaganie dotyczące interfejsu HAL należy zadeklarować w 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>

Więcej informacji: FCM. Cykl życia.

Tabela zgodności produktów

FCM produktu to plik macierzy zgodności platformy w usłudze partycji danych. Obiekt VINTF łączy usługę FCM produktu z elementami FCM w systemie i w systemie system_ext partycji w czasie działania.

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>

Tablica zgodności System_ext

Parametr system_ext FCM to plik macierzy zgodności platformy w elemencie system_ext partycji danych. Obiekt VINTF łączy system FCM system_ext z FCM w systemie i produkcie partycji w czasie działania. Zobacz tabelę zgodności usług dla przykładowego pliku system_ext FCM.

Tablica zgodności urządzeń (DCM)

Tablica zgodności urządzenia opisuje zestaw wymagań, które musi spełniać urządzenie których oczekuje w ramach platformy (wymagania są egzekwowane w momencie wprowadzenia na rynek i w czasie aktualizacji 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 tagów XML. Niektóre „wymagane” tagi może brakować w pliku źródłowym w drzewie źródłowym Androida i być zapisane przez assemble_vintf w momencie kompilacji. „Wymagane” tagi muszą znajdować się w odpowiednich plikach w urządzenia.

?xml
Opcjonalne. Podaje on tylko informacje dla parsera XML.
compatibility-matrix.version
Wymagane. Metawersja tej macierzy zgodności. Opisuje elementy które nie są oczekiwane w tablicy zgodności. Brak związku z wersją XML.
compatibility-matrix.type
Wymagane. Typ tej macierzy zgodności:
  • "device": tablica zgodności urządzeń.
  • "framework": tablica zgodności platformy.
manifest.level
Wymagane dla macierzy zgodności platformy. Na Androidzie 12 i nowszych jest dozwolony w plikach macierzy zgodności platformy w partycjach product_ext i system_ext. Określa wersję macierzy zgodności platformy (wersja FCM) tego pliku. Nie deklaruj w tabeli zgodności platformy dla określonych urządzeń (np. DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE).
compatibility-matrix.hal
Opcjonalny i powtarzalny. Zawiera pojedynczy HAL (HIDL lub natywny), który jest wymagane przez właściciela macierzy zgodności (platformy lub urządzenia) obecnie. Wpisy HAL różnią się elementem <name>; może istnieć kilka wpisów HAL o tej samej nazwie (oznacza warunek „and”).
compatibility-matrix.hal.format
Opcjonalne. Możliwe wartości:
  • "hidl": wartości HAL HIDL. Jest to ustawienie domyślne.
  • "aidl": HAL AIDL. Dotyczy tylko metawersji 2.0 macierzy zgodności.
  • "native": natywne identyfikatory HAL.
compatibility-matrix.hal.optional
Atrybut jest opcjonalny i jego domyślna wartość to fałsz. Określa, czy ta wartość HAL jest (opcjonalnie) właścicielowi macierzy zgodności (platformy lub urządzenia). Jeśli Wpis <hal> jest oznaczony jako opcjonalny, co oznacza, że właściciel może obsługuje HAL, jeśli istnieje, ale nie wymaga jego obecności.
compatibility-matrix.hal.name
Wymagane. Pełna nazwa pakietu tej HAL. Przykłady:
  • android.hardware.camera (HIDL lub AIDL HAL)
  • GLES (natywna HAL, wymaga tylko nazwy)
compatibility-matrix.hal.version
Listę zakresów wersji (patrz: Dopasowania HAL) określający, do których wersji matryca zgodności (platforma lub urządzenia)).

W przypadku HIDL i natywnych HAL wymagane, mogą się powtarzać bez duplikatów. Format jest jeden z tych:
  • MAJOR.MINOR_MIN-MINOR_MAX
  • MAJOR.MINOR (odpowiednik MAJOR.MINOR-MINOR).
.
Listy HAL AIDL nie mogą znajdować się na urządzeniach z Androidem 11 i mniej. Opcjonalny na urządzeniach w późniejszych wersjach. Jeśli określisz format, będzie on miał jeden z tych formatów:
  • VERSION_MIN-VERSION_MAX
  • VERSION (odpowiednik VERSION-VERSION).
. Jeśli nie określono inaczej, domyślna wartość to 1.
compatibility-matrix.hal.interface
Opcjonalnie, można powtórzyć. Lista wymaganych interfejsów tej HAL.
compatibility-matrix.hal.interface.name
Wymagane. 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 na tej za pomocą prostego interfejsu online. Używaj Rozszerzony w formacie wyrażenia regularnego.
compatibility-matrix.kernel
Opcjonalnie, można powtórzyć. Określ listę konfiguracji jądra, którą platforma są wymagane w przypadku każdej wersji jądra systemu operacyjnego.
Jeśli kilka wartości <kernel> z takim samym atrybutem <version> może sugerująby „i” relacji. Każdy element <kernel> jest „fragmentem” wymagań, które są włączone tylko wtedy, gdy <conditions> mają wartość
compatibility-matrix.kernel.version
Wymagane. Wersja jądra systemu. Obecny format: VERSION.MAJOR_REVISION.MINOR_REVISION Wersja i wersja główna muszą być dokładnie takie same. Mała wersja definiuje z minimalną wersją LTS jądra, której oczekuje platforma.
compatibility-matrix.kernel.condition
Opcjonalne. Nie może istnieć dla pierwszych <kernel> wartości każdej wersji. Określa listę warunków. Po spełnieniu warunków wymagania określone we fragmencie <kernel> są włączone.
compatibility-matrix.kernel.config
Opcjonalnie, można powtórzyć. Zawiera listę CONFIG elementów, które muszą być pasujące do tej wersji jądra. Każdy element CONFIG jest parą klucz-wartość parowanie; a elementy konfiguracji różnią się kluczem.
compatibility-matrix.kernel.config.key
Wymagane. Nazwa klucza elementu CONFIG. Zaczyna się od CONFIG_
compatibility-matrix.kernel.config.value
Wymagane. Wartość elementu CONFIG. Format zależy od typu:
  • string Cudzysłowy są pomijane.
  • int Ułamki dziesiętne i szesnastkowe (muszą rozpoczynać się od 0x lub 0X). interpretowana jako 64-bitowa liczba całkowita; powoduje obcięcie danych. (Analizator akceptuje wartości od -264 + 1 do 264 – 1, 65 bit jest obcięty; , aby uzyskać szczegółowe informacje, Strtoull stronie man).
  • range Format to [int]-[int], np. 10-20 Wartości szesnastkowe są akceptowane i muszą rozpoczynać się od 0x lub 0X. Dwie granice muszą być nieoznaczone 64-bitową liczba całkowita.
  • tristate Prawidłowe wartości to y, m i n
compatibility-matrix.kernel.config.value.type
Wymagane. Typ wartości elementu CONFIG. Możliwe wartości:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Wymagane. Zawiera wszystkie wpisy związane z sepolicy. Używana tylko przez
compatibility-matrix.sepolicy.sepolicy-version
Wymagane, można powtarzać. Opisuje wymagania dotyczące wersji sepolicy. Odpowiada manifest.sepolicy.version. Każde wystąpienie określa zakres wersji sepolicy.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Wymagane. Deklaruje, w jakiej wersji policydb działa platforma
compatibility-matrix.avb.vbmeta-version
Opcjonalnie; używane tylko przez macierz zgodności platformy. Deklaruje AVB, wersji używanej do podpisywania system.img. Wycofane na Androidzie 10
compatibility-matrix.vendor-ndk
Opcjonalnie; używana tylko przez tablicę zgodności urządzeń. Deklaruje wymagania zrzutu dostawcy VNDK. Jeśli go nie ma, nie jest określony żaden wymóg dotyczący VNDK w obrazie systemu.
compatibility-matrix.vendor-ndk.version
Wymagane. Dodatnia liczba całkowita deklarująca wersję VNDK wymaganą przez i obraz dostawcy.
compatibility-matrix.vendor-ndk.library
Opcjonalnie, można powtórzyć. Deklaruje zestaw bibliotek VNDK wymaganych przez zdjęcia dostawcy. Ta sama semantyka co w polu manifest.vendor-ndk.library.
compatibility-matrix.system-sdk.version
Opcjonalny, można powtórzyć; używana tylko przez tablicę zgodności urządzeń. Deklaracje wymagania aplikacji dostawcy w przypadku wersji pakietu systemowego pakietu SDK. W razie braku systemowy pakiet SDK jest określone w obrazie systemu.