Cykl życia w FCM

Wersja platformy Androida ma wiele macierzy zgodności platform (FCM) – po jednej na każdą docelową wersję FCM z możliwością uaktualnienia, która określa, co platforma może stosować wymagania dotyczące docelowej wersji FCM. W ramach FCM cyklu życia usługi, Android wycofuje i usuwa HAL HIDL, a następnie zmienia pliki FCM, odzwierciedlają stan wersji HAL.

Aby włączyć OTA dostępne tylko w ramach platformy we własnych ekosystemach, partnerzy, którzy rozszerzają dostawców powinny także wycofywać i usuwać HAL HIDL za pomocą .

Terminologia

Tablica zgodności FCM
Plik XML określający ramowe wymagania dotyczące dostawcy, który spełnia wymagania implementacji. Macierz zgodności ma różne wersje, a następnie nową wersję jest zablokowany dla każdej wersji platformy. Każda wersja platformy zawiera wielu menedżerów FCM.
Wersje FCM na platformie (SF)
Zestaw wszystkich wersji FCM w danej wersji platformy. Struktura może działać z dowolnym dostawcą, który spełnia warunki jednego z tych FCM.
Wersja FCM (F)
Najwyższa wersja spośród wszystkich FCM w danej wersji platformy.
Docelowa wersja FCM (V)
Docelowa wersja FCM (z SF) zadeklarowana bezpośrednio na urządzeniu z plikiem manifestu, który jest satysfakcjonujący dla dostawcy. Implementacja dostawcy musi wygenerowanych w odniesieniu do opublikowanej wersji FCM, chociaż nowsze wersje HAL mogą być deklarowane w Manifest urządzenia
Wersja HAL
Wersja HAL ma format foo@x.y, gdzie foo to nazwa HAL, a x.y to konkretną wersję; np. nfc@1.0, keymaster@3.0 (prefiks główny, np. android.hardware, jest pomijany w całym dokumencie).
Plik manifestu urządzenia
pliki XML określające, które wersje HAL interfejsu dostawcy są dostępne na urządzeniu w tym dostawcę i obrazy ODM. Zawartość pliku manifestu urządzenia to: ograniczona przez docelową wersję FCM urządzenia, ale może wyświetlić listę HAL, które są nowsze w stosunku do FC odpowiadającego klauzule V.
Listy HAL urządzeń
HAL wymienione (dostarczone) w manifeście urządzenia (wymaganej lub opcjonalnej) w tabeli zgodności platformy (FCM).
Matryca zgodności urządzeń (DCM)
Plik XML określający wymagania dostawcy dotyczące zgodnych ram implementacji. Każde urządzenie zawiera jeden DCM.
Plik manifestu platformy
Plik XML określający, które wersje HAL dostawcy będą korzystać z platformy po stronie platformy w tym system, system_ext i obrazy produktu. Listy HAL w Plik manifestu platformy jest dynamicznie wyłączany zgodnie z docelowym FCM urządzenia wersji.
HAL platformy
HAL wymienione w pliku manifestu platformy i jako wymagane lub opcjonalne w macierzy zgodności urządzeń (DCM).

Cykl życia FCM w bazie kodu

Ten dokument w skrócie opisuje cykl życia FCM. Aby wyświetlić obsługiwanych plikach manifestu, zapoznaj się z artykułem hardware/interfaces/compatibility_matrix.<FCM>.xml gdzie można znaleźć FCM, system/libvintf/include/vintf/Level.h

Urządzenie wysyła odpowiednią wersję Androida wartość w FCM większą lub równa równoważnemu poziomowi. Na przykład plik system dostawy urządzeń z Androidem 11 zwykle używa FCM na poziomie 5, ale FCM na poziomie 6 lub wyższym, który ma różne wymagania dodatkowe określonych w macierzych zgodności. Obsługiwane poziomy:

Menedżer Społeczności Wersja Androida
4 Android 10/Q
5 Android 11 lub R
6 Android 12/S
7 Android 13/T
8 Android 14/U
202404 Android 15 lub nowszy

Po wycofaniu poziomu FCM na Androidzie będzie on nadal obsługiwany na dotychczasowych urządzeniach.

Programowanie w nowej wersji FCM

Android zwiększa wersję FCM dla każdej wersji platformy (np. Androida 8 i 8.1). W trakcie opracowywania nowa wersja compatibility_matrix.F.xml to został utworzony, a istniejący compatibility_matrix.f.xml (gdzie f < F) ma wartość dłuższa zmiana.

Aby zacząć tworzyć aplikacje w nowej wersji FCM F:

  1. Skopiuj najnowszą wersję compatibility_matrix.<F-1>.xml do compatibility_matrix.F.xml
  2. Zaktualizuj atrybut level w pliku do F.
  3. Dodaj odpowiednie reguły kompilacji, aby zainstalować tę macierz zgodności w urządzenia.

Wprowadzenie nowej wersji HAL

W trakcie programowania i wprowadzanie na Androida nowego kodu HAL (Wi-Fi, NFC itp.) w bieżącej wersji FCM (F), dodaj HAL do pliku compatibility_matrix.F.xml z te ustawienia optional:

  • optional="false", jeśli urządzenia wysyłane z marką V = F muszą zostać uruchomione z użyciem tej HAL,
  • optional="true", jeśli urządzenia wysyłane z marką V = F mogą zostać uruchomione bez tej HAL.

Na przykład w Androidzie 8.1 wprowadzono cas@1.0 jako opcjonalny interfejs HAL. Urządzenia uruchamianych na Androidzie 8.1 nie są wymagane do wdrożenia tej HAL, więc ten wpis został dodany do adresu compatibility_matrix.F.xml (który kiedyś był compatibility_matrix.current.xml tymczasowo podczas tworzenia wersji):

<hal format="hidl" optional="true">
    <name>android.hardware.cas</name>
    <version>1.0</version>
    <interface>
        <name>IMediaCasService</name>
        <instance>default</instance>
    </interface>
</hal>

Uaktualnij HAL (wersja nieważna)

W trakcie programowania, gdy HAL zostanie uaktualniony do wersji podrzędnej z x.z do x.(z+1) w bieżącej wersji FCM F, jeśli ta wersja:

  • Wymagane na urządzeniach uruchamianych za pomocą kodu V = F, compatibility_matrix.F.xml musi zawierać x.(z+1) i optional="false".
  • Niewymagane na urządzeniach uruchamianych z pakietem V = F. Pole compatibility_matrix.F.xml musi skopiować wartość x.y-z i opcje z compatibility_matrix.<F-1>.xml i zmień wersję na x.w-(z+1) (gdzie w >= y).

Na przykład w Androidzie 8.1 wprowadzono broadcastradio@1.1 jako wersję podrzędną do wersji HAL 1.0. Starsza wersja, broadcastradio@1.0, jest opcjonalna w tych usługach: urządzeń z Androidem 8.0, a nowsza wersja broadcastradio@1.1 jest opcjonalny na urządzeniach z Androidem 8.1. W compatibility_matrix.1.xml:

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

Ten wpis został skopiowany do folderu compatibility_matrix.F.xml i zmodyfikowany w następujący sposób:

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0-1</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

Uaktualnienie HAL (duże)

W trakcie programowania, gdy HAL ma uaktualnioną wersję główną w bieżącym FCM Wersja F, nowa wersja główna x.0 została dodana do compatibility_matrix.F.xml z tymi ustawieniami optional:

  • optional="false" tylko w wersji x.0, jeśli urządzenia są wysyłane z V = F musi się uruchamiać za pomocą parametru x.0.
  • optional="false", ale wraz ze starszymi wersjami głównymi w tym samym regionie <hal> jeśli urządzenia wysyłane z pakietem V = F muszą uruchamiać się za pomocą tej platformy HAL, ale mogą ze starszą wersją główną.
  • optional="true", jeśli urządzenia wysyłane z firmy V = F nie muszą być uruchamiane HAL.

Na przykład w Androidzie 9 health@2.0 jako uaktualnienie HAL do wersji głównej 1.0 i wycofanie HAL 1.0. Stare (health@1.0) jest opcjonalna na urządzeniach z Androidem 8.0 Android 8.1 Urządzenia z Androidem 9 muszą udostępnić nową wersję 2.0. Załóżmy na przykład, że: compatibility_matrix.legacy.xml, compatibility_matrix.1.xml i compatibility_matrix.2.xml zawierają ten wpis:

<hal format="hidl" optional="true">
    <name>android.hardware.health</name>
    <version>1.0</version>;
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

Skopiuj ten wpis do folderu compatibility_matrix.F.xml i zmodyfikuj jako następujące:

<hal format="hidl" optional="false">
    <name>android.hardware.health</name>
    <version>2.0</version>
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

Ograniczenia:

  • Ponieważ HAL 2.0 jest w środowisku compatibility_matrix.3.xml z optional="false", urządzenia z Androidem 9 musi być wysyłane z kodem HAL 2.0.
  • Ponieważ HAL 1.0 nie znajduje się w języku compatibility_matrix.3.xml, na urządzeniach z Androidem 9 nie mogą HAL 1.0 (ponieważ ta wersja HAL jest uznawana za wycofaną).
  • Ponieważ plik HAL 1.0 znajduje się w legacy/1/2.xml (starsze wersje FCM, które z Androidem 9) jako opcjonalną HAL, Platforma Androida 9 może nadal działać z kodem HAL 1.0 (który nie jest uważany za usuniętą wersję HAL).

Nowe wersje FCM

Proces publikowania wersji FCM na partycji systemowej odbywa się wyłącznie przez Google w ramach wersji AOSP i obejmuje te czynności:

  1. Sprawdź, czy compatibility_matrix.F.xml ma atrybut level="F".
  2. Upewnij się, że wszystkie urządzenia są kompilowane i uruchamiane.
  3. Aktualizowanie testów VTS aby urządzenia wprowadzane na rynek z najnowszą platformą (oparta na na poziomie interfejsu Shipping API) mają docelową wersję FCM V >= F.
  4. Opublikuj plik w AOSP.

Przykład: testy VTS. urządzeń z Androidem, 9 ma docelową wersję FCM >= 3.

Dodatkowo FCM produktu i systemu system_ext mogą zawierać listę wymagań dotyczących każdego wersji FCM danej platformy. Udostępnienie wersji FCM dotyczących produktu i systemu system_ext jest wykonywane przez właściciela tych obrazów. Wersja FCM numery na poziomie produktu i partycji system_ext muszą być zgodne z tymi w tabeli partycji systemu. Podobnie jak w przypadku wersji FCM na partycji systemowej, macierz zgodności w FCM w wersji F w produkcie i partycjach system_ext odzwierciedlają wymagania dotyczące urządzenia z docelową wersją FCM w wersji F.

Wycofanie wersji HAL

Decyzja o wycofaniu wersji HAL należy do dewelopera (w przypadku AOSP HAL firma Google podejmie decyzję). Może się tak zdarzyć, gdy wersja HAL wyższa (zarówno główny) zostanie opublikowany.

Wycofanie HAL urządzenia

Wycofywanie HAL foo@x.y w FCM w wersji F oznacza, że Na urządzeniach z włączoną docelową wersją FCM w wersji V = F lub nowszej nie można zaimplementuj foo w wersji x.y lub w dowolnej wersji starszej niż x.y. Wycofany Wersja HAL jest nadal obsługiwana przez platformę do uaktualniania urządzeń.

Po opublikowaniu FCM w wersji F brana jest pod uwagę wersja HAL foo@x.y wycofane, jeśli konkretna wersja HAL nie jest wyraźnie określona w najnowszej wersji FCM dla docelowej wersji FCM V = F. W przypadku urządzeń wprowadzonych na rynek z V = F jedną z tych opcji: następujące warunki są spełnione:

  • Platforma wymaga wyższej wersji (głównej lub podrzędnej).
  • Platforma nie wymaga już HAL.

Na przykład w Androidzie 9 wprowadzono health@2.0 jako uaktualnienie HAL 1.0. Użytkownik health@1.0 został usunięty z: compatibility_matrix.3.xml, ale występuje w compatibility_matrix.legacy.xml, compatibility_matrix.1.xml oraz Compatibility_matrix.2.xml. Z tego powodu usługa health@1.0 jest uznawana za wycofaną.

Wycofanie platformy HAL

Wycofanie interfejsu HAL foo@x.y danej platformy w FCM w wersji F oznacza, że Na urządzeniach z włączoną docelową wersją FCM w wersji V = F lub nowszej nie można spodziewaj się, że platforma zapewni foo w wersji x.y lub w dowolnej starszej wersji niż x.y. Wycofana wersja HAL jest nadal udostępniana przez platformę uaktualnianie urządzeń.

Po opublikowaniu wersji F FCM uwzględniana jest wersja HAL foo@x.y wycofane, jeśli plik manifestu platformy określa max-level="F - 1" za foo@x.y. Urządzenia wprowadzane na rynek w interfejsie V = F platforma nie udostępnia interfejsu HAL foo@x.y. Urządzenie tablica zgodności na urządzeniach uruchamianych z użyciem V = F nie może zawierać platformy HAL z max-level < V.

Na przykład w Androidzie 12 schedulerservice@1.0 to wycofane. Atrybut max-level ma wartość 5. Jest to wprowadzona wersja FCM. na Androidzie 11. Zobacz Platforma Androida 12 pliku manifestu.

Wycofanie obsługi docelowych wersji FCM

Gdy liczba aktywnych urządzeń określonej docelowej wersji FCM V spadnie poniżej określonej wartości docelowa wersja FCM jest usuwana z zestawu F parametru nowej platformy. Aby to zrobić:

  1. Usuwam dyrektywę compatibility_matrix.V.xml z reguł kompilacji (aby nie była zainstalowany w obrazie systemu) oraz usunąć kod zaimplementowany lub zależy od usuniętych funkcji.

  2. Usuwanie z platformy HAL ram z wartością max-level mniejszą lub równą V platformy manifestu i usuń kod implementujący usunięte platformy HAL.

Urządzenia z docelową wersją FCM inną niż SF w przypadku danej platformy nie można uaktualnić do tej wersji.

Stan wersji HAL

W poniższych sekcjach opisano możliwe stany (w kolejności chronologicznej) wersji HAL.

Niewydane

Listy HAL urządzeń, jeśli wersja HAL nie należy do żadnej publicznej i jest zablokowana jest uważana za nieopublikowaną i prawdopodobnie w trakcie opracowywania. Dotyczy to też wersji HAL, które występują tylko w języku compatibility_matrix.F.xml. Przykłady:

  • Podczas tworzenia Androida 9 health@2.0 HAL został uznany za nieopublikowany i znajdował się tylko w compatibility_matrix.3.xml
  • HAL teleportation@1.0 nie znajduje się w żadnej z opublikowanych macierzy zgodności. jest uważany za nieopublikowaną wersję HAL.

W przypadku platform HAL, jeśli wersja HAL znajduje się tylko w pliku manifestu platformy. jest uważana za nieopublikowaną.

Zwolniony i aktualny

Listy HAL urządzeń, jeśli wersja HAL jest publiczna i zablokowana jest uwalniana. Na przykład po tym, jak FCM w wersji 3 zostanie zablokowany i opublikowany zgodnie z AOSP wersja HAL health@2.0 jest uznawana za opublikowaną i aktualną wersję HAL.

Jeśli wersja HAL znajduje się w publicznej i zablokowanej macierzy zgodności, w której występuje parametr najwyższa wersja FCM jest aktualna (czyli nie została wycofana). Dla: na przykład istniejące wersje HAL (takie jak nfc@1.0 wprowadzone w compatibility_matrix.legacy.xml). które nadal istnieją w compatibility_matrix.3.xml są również uznawane za i obecne wersje HAL.

W przypadku platform HAL, jeśli wersja HAL znajduje się w pliku manifestu platformy. ostatnio wydanej gałęzi bez atrybutu max-level lub (rzadko) max-level jest równa wersji FCM wydanej w tej gałęzi lub wyższa, jest uważany za opublikowaną i bieżącą wersję HAL. Na przykład parametr Opublikowano displayservice HAL i jest on już dostępny w wersji na Androida 12, zgodnie z Platforma Androida 12 pliku manifestu.

Wersja opublikowana, ale wycofana

W przypadku list HAL urządzeń wersja HAL jest wycofana tylko wtedy, gdy spełnione są wszystkie poniższe warunki są spełnione:

  • Została opublikowana.
  • Nie należy do publicznej, zablokowanej macierzy zgodności, która ma najwyższą Wersja FCM.
  • Znajduje się w publicznej, zablokowanej macierzy zgodności, obsługuje.

Przykłady:

Dlatego wersja power@1.0 jest aktualna, ale NIE została wycofana w Androidzie 9.

W przypadku platform HAL, jeśli wersja HAL znajduje się w pliku manifestu najnowszej wersji platformy opublikowana gałąź z atrybutem max-level niższym niż wersja w FCM w tej gałęzi jest uważana za opublikowaną, ale wycofaną wersję HAL. Dla: przykładowy kod HAL schedulerservice został udostępniony, ale wycofany Androida 12, zgodnie z wymaganiami Plik manifestu platformy Androida 12.

Usunięto

W przypadku list HAL urządzeń wersja HAL jest usuwana tylko wtedy, gdy: są prawdziwe:

  • Została wcześniej wydana.
  • Nie znajduje się w żadnej publicznej, zablokowanej macierzy zgodności, w której platforma obsługuje.

Macierze zgodności, które są publiczne, zablokowane, ale nie obsługiwane przez są przechowywane w bazie kodu, aby zdefiniować zestaw wersji HAL, Testy VTS można zapisywać, aby mieć pewność, że usunięte listy HAL nie znajdują się na nowych urządzeniach.

W przypadku platform HAL wersja HAL jest usuwana tylko wtedy, gdy spotkało:

  • Została wcześniej wydana.
  • Nie ma go w żadnym pliku manifestu platformy w najnowszej opublikowanej gałęzi.

Starsze wersje FCM

Starsza wersja docelowej wersji FCM to specjalna wartość w przypadku wszystkich urządzeń innych niż wysokie. starsza wersja FCM, compatibility_matrix.legacy.xml, zawiera listę wymagań platformy na starszych urządzeniach (tj. tych, które zostały wprowadzone na rynek przed Androidem 8.0).

Jeśli ten plik istnieje w FCM w wersji F, możesz uaktualniono do wersji F, o ile plik manifestu urządzenia jest zgodny z tym plikiem. To proces usuwania przebiega w ten sam sposób co w przypadku innych docelowych wersji FCM. (usunięte, gdy liczba aktywnych urządzeń sprzed 8.0 spadnie poniżej określonej wartości ).

Udostępnione wersje FCM

Listę opublikowanych wersji FCM znajdziesz na stronie hardware/interfaces/compatibility_matrices

Aby sprawdzić wersję FCM wydaną wraz z konkretną wersją Androida, zobacz Level.h