Cykl życia FCM

Wersja platformy Android ma wiele matryc zgodności ram (FCM), po jednej dla każdej możliwej do uaktualnienia wersji docelowej FCM, które definiują, czego może używać platforma i wymagania dotyczące docelowej wersji FCM. W ramach cyklu życia FCM system Android wycofuje i usuwa warstwy HAL HIDL, a następnie modyfikuje pliki FCM, aby odzwierciedlić stan wersji HAL .

Aby umożliwić platformy OTA oparte wyłącznie na frameworku we własnych ekosystemach, partnerzy rozszerzający interfejsy dostawców powinni również wycofać i usunąć warstwy HIDL HAL przy użyciu tych samych metod.

Terminologia

Macierz zgodności ram (FCM)
Plik XML określający wymagania ramowe dotyczące zgodnych wdrożeń dostawców. Macierz kompatybilności jest wersjonowana, a dla każdej wersji frameworka zostaje zamrożona nowa wersja. Każde wydanie frameworka zawiera wiele FCM.
Wersje platformy FCM ( SF )
Zestaw wszystkich wersji FCM w wydaniu frameworkowym. Struktura może współpracować z dowolną implementacją dostawcy, która spełnia jeden z tych FCM.
Wersja FCM (F)
Najwyższa wersja spośród wszystkich FCM w wydaniu frameworkowym.
Docelowa wersja FCM (V)
Docelowa wersja FCM (z SF ), zadeklarowana jawnie w manifeście urządzenia, która jest zgodna z implementacją dostawcy. Implementacja dostawcy musi zostać wygenerowana na podstawie opublikowanego FCM, chociaż może deklarować nowsze wersje HAL w swoim manifeście urządzenia.
Wersja HAL
Wersja HAL ma format foo@xy , gdzie foo to nazwa HAL, a xy to konkretna wersja; np. nfc@1.0 , keymaster@3.0 (przedrostek root, np. android.hardware , jest w tym dokumencie pomijany).
Manifest urządzenia
Pliki XML określające, które wersje HAL są udostępniane przez interfejs dostawcy po stronie urządzenia, w tym obrazy dostawcy i ODM. Zawartość manifestu urządzenia jest ograniczona przez wersję urządzenia Target FCM, ale może zawierać listę warstw HAL, które są ściśle nowsze w stosunku do FC odpowiadającego V.
Urządzenia HAL
Warstwy HAL wymienione (dostarczone) w manifeście urządzenia i wymienione (wymagane lub opcjonalne) w macierzy zgodności platformy (FCM).
Tabela zgodności urządzeń (DCM)
Plik XML określający wymagania dostawcy dotyczące zgodnych implementacji frameworka. Każde urządzenie zawiera jeden DCM.
Manifest ramowy
Plik XML określający, które wersje HAL udostępnia strona frameworka interfejsu dostawcy, w tym system, system_ext i obrazy produktów. Warstwy HAL w manifeście struktury są dynamicznie wyłączane zgodnie z wersją Target FCM urządzenia.
Ramowe warstwy HAL
Warstwy HAL wymienione w manifeście platformy oraz jako wymagane lub opcjonalne w macierzy zgodności urządzeń (DCM).

Cykl życia FCM w bazie kodu

W tym dokumencie opisano w skrócie cykl życia FCM. Aby zobaczyć aktualnie obsługiwane manifesty, zobacz hardware/interfaces/compatibility_matrix.<FCM>.xml , gdzie FCM można znaleźć w system/libvintf/include/vintf/Level.h .

Począwszy od Androida 14, obsługiwane poziomy to:

FCM Wersja Androida
4 Androida 10/Q
5 Androida 11/R
6 Androida 12/S
7 Androida 13/T
8 Androida 14/U

Opracowanie w nowej wersji FCM

Android zwiększa wersję FCM dla każdej wersji platformy (takiej jak Android 8, 8.1 itp.). Podczas programowania tworzony jest nowy plik compatibility_matrix.F.xml , a istniejący compatibility_matrix.f.xml (gdzie f < F ) nie jest już zmieniany.

Aby rozpocząć programowanie w nowej wersji FCM F :

  1. Skopiuj najnowszy plik 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ę matrycę zgodności na urządzeniu.

Przedstawiamy nowy HAL

Podczas opracowywania, wprowadzając nową warstwę HAL (Wi-Fi, NFC itp.) do systemu Android w bieżącej wersji FCM F , dodaj warstwę HAL do compatibility_matrix.F.xml z następującymi optional ustawieniami:

  • optional="false" , jeśli urządzenia dostarczane z V = F muszą uruchamiać się z tą warstwą HAL,
  • optional="true" , jeśli urządzenia dostarczane z V = F mogą być uruchamiane bez tej warstwy HAL.

Na przykład w systemie Android 8.1 wprowadzono cas@1.0 jako opcjonalną warstwę HAL. Urządzenia uruchamiane z systemem Android 8.1 nie muszą implementować tej warstwy HAL, dlatego do pliku compatibility_matrix.F.xml (który podczas opracowywania tej wersji tymczasowo nosił nazwę compatibility_matrix.current.xml ):

<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 (drobny)

Podczas opracowywania, gdy warstwa HAL ma aktualizację wersji pomocniczej z xz do x.(z+1) w bieżącej wersji F FCM, jeśli ta wersja to:

  • Wymagany na urządzeniach uruchamianych z V = F , plik compatibility_matrix.F.xml musi zawierać stan x.(z+1) i optional="false" .
  • Niewymagane na urządzeniach uruchamianych z V = F , plik compatibility_matrix.F.xml musi skopiować xy-z i opcjonalność z compatibility_matrix.<F-1>.xml i zmienić wersję na xw-(z+1) (gdzie w >= y ).

Na przykład w systemie Android 8.1 wprowadzono broadcastradio@1.1 jako niewielką aktualizację wersji 1.0 HAL. Starsza wersja, broadcastradio@1.0 , jest opcjonalna dla urządzeń z systemem Android 8.0, natomiast nowsza wersja, broadcastradio@1.1 , jest opcjonalna dla urządzeń z systemem Android 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 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>

Uaktualnij HAL (główny)

Podczas opracowywania, gdy warstwa HAL ma aktualizację do wersji głównej w bieżącej wersji FCM F , nowa wersja główna x.0 jest dodawana do compatibility_matrix.F.xml z następującymi optional ustawieniami:

  • optional="false" tylko z wersją x.0 , jeśli urządzenia dostarczane z V = F muszą zostać uruchomione z x.0 .
  • optional="false" , ale wraz ze starszymi wersjami głównymi w tym samym znaczniku <hal> , jeśli urządzenia dostarczane z V = F muszą uruchamiać się z tą warstwą HAL, ale mogą być uruchamiane ze starszą wersją główną.
  • optional="true" , jeśli urządzenia dostarczane z V = F nie muszą uruchamiać warstwy HAL.

Na przykład w systemie Android 9 wprowadzono health@2.0 jako aktualizację wersji głównej warstwy HAL 1.0 i wycofuje warstwę HAL 1.0. Starsza wersja, health@1.0 , jest opcjonalna dla urządzeń z systemem Android 8.0 i Android 8.1. Urządzenia uruchamiane z systemem Android 9 nie mogą udostępniać przestarzałej warstwy HAL 1.0 i zamiast tego muszą udostępniać nową wersję 2.0. I compatibility_matrix.legacy.xml , compatibility_matrix.1.xml i compatibility_matrix.2.xml :

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

Ten wpis jest kopiowany do compatibility_matrix.F.xml i modyfikowany w następujący sposób:

<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ż warstwa HAL 2.0 znajduje się w compatibility_matrix.3.xml z optional="false" , urządzenia uruchamiane z systemem Android 9 muszą być dostarczane z warstwą HAL 2.0.`
  • Ponieważ warstwy HAL w wersji 1.0 nie ma w compatibility_matrix.3.xml , urządzenia uruchamiane z systemem Android 9 nie mogą udostępniać warstwy HAL w wersji 1.0 (ponieważ ta warstwa HAL jest uważana za przestarzałą).
  • Ponieważ warstwa HAL 1.0 jest obecna w starszych wersjach/1/2.xml (starszych wersjach FCM, z którymi może współpracować system Android 9) jako opcjonalna warstwa HAL, platforma Android 9 może nadal współpracować z warstwą HAL 1.0 (która nie jest uważana za usuniętą wersję HAL ).

Nowe wersje FCM

Proces udostępniania wersji FCM na partycji systemowej jest wykonywany wyłącznie przez firmę Google w ramach wydania AOSP i obejmuje następujące kroki:

  1. Upewnij się, że compatibility_matrix.F.xml ma atrybut level="F" .
  2. Upewnij się, że wszystkie urządzenia zostały zbudowane i uruchomione.
  3. Zaktualizuj testy VTS , aby upewnić się, że urządzenia uruchamiane z najnowszym frameworkiem (w oparciu o poziom Shipping API) mają docelową wersję FCM V >= F .
  4. Opublikuj plik w AOSP.

Na przykład testy VTS zapewniają, że urządzenia uruchamiane z systemem Android 9 mają docelową wersję FCM >= 3.

Ponadto produkty FCM i system_ext mogą również zawierać listę wymagań dla każdej wersji FCM platformy. Wydaniem wersji FCM na partycjach produktu i system_ext dokonuje odpowiednio właściciel tych obrazów. Numery wersji FCM na partycjach produktu i system_ext muszą być zgodne z numerami na partycji systemowej. Podobnie jak w przypadku wersji FCM na partycji systemowej, macierz kompatybilności w wersji F FCM w partycjach produktu i system_ext odzwierciedla wymagania urządzenia z docelową wersją FCM F.

Wycofanie wersji HAL

Wycofanie wersji HAL jest decyzją programisty (tzn. w przypadku AOSP HAL decyzję podejmuje Google). Może się to zdarzyć, gdy zostanie wydana wyższa wersja HAL (mniejsza lub większa).

Przestarzałe urządzenie HAL

Kiedy dane urządzenie HAL foo@xy jest przestarzałe w wersji FCM F , oznacza to, że żadne urządzenie uruchamiane z wersją Target FCM V = F lub nowszą nie może implementować foo w wersji xy ani żadnej wersji starszej niż xy . Przestarzała wersja HAL jest nadal obsługiwana przez platformę aktualizacji urządzeń.

Po wydaniu wersji F FCM wersja HAL foo@xy jest uważana za przestarzałą, 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ń uruchamianych za pomocą V = F spełniony jest jeden z następujących warunków:

  • Framework wymaga wyższej wersji (głównej lub mniejszej);
  • Framework nie wymaga już warstwy HAL.

Na przykład w systemie Android 9 wprowadzono health@2.0 jako główną aktualizację wersji 1.0 HAL. health@1.0 został usunięty z compatibility_matrix.3.xml , ale jest obecny w compatibility_matrix.legacy.xml , compatibility_matrix.1.xml i Compatibility_matrix.2.xml . Dlatego też health@1.0 jest uważane za przestarzałe.

Wycofaj framework HAL

Kiedy dana struktura HAL foo@xy jest przestarzała w wersji FCM F , oznacza to, że żadne urządzenie uruchamiane z docelową wersją FCM V = F lub nowszą nie może oczekiwać, że struktura zapewni foo w wersji xy lub w jakiejkolwiek wersji starszej niż xy . Przestarzała wersja HAL jest nadal udostępniana w środowisku aktualizacji urządzeń.

Po wydaniu wersji F FCM wersja HAL foo@xy jest uważana za przestarzałą, jeśli manifest struktury określa max-level=" F - 1 " dla foo@xy . W przypadku urządzeń uruchamianych za pomocą V = F framework nie zapewnia HAL foo@xy . Macierz kompatybilności urządzeń na urządzeniach uruchamianych z V = F nie może zawierać ramowych warstw HAL z max-level < V .

Na przykład w systemie Android 12 schedulerservice@1.0 jest przestarzała. Jego atrybut max-level jest ustawiony na 5 , co oznacza wersję FCM wprowadzoną w systemie Android 11. Zobacz manifest struktury systemu Android 12 .

Usunięcie wsparcia dla docelowych wersji FCM

Kiedy aktywne urządzenia określonej docelowej wersji V FCM spadną poniżej pewnego progu, docelowa wersja FCM zostanie usunięta z zestawu S F następnej wersji platformy. Odbywa się to poprzez oba następujące kroki:

  1. Usunięcie compatibility_matrix.V.xml z reguł kompilacji (aby nie był instalowany w obrazie systemu) i usunięcie całego kodu, który zaimplementował usuniętą funkcjonalność lub był od niej zależny.

  2. Usuwanie strukturalnych warstw HAL z max-level niższym lub równym V z manifestu struktury i usuwanie całego kodu, który implementuje usunięte struktury HAL.

Urządzenia z docelową wersją FCM inną niż S F dla danej wersji platformy nie mogą dokonać aktualizacji do tej wersji.

Stan wersji HAL

W poniższych sekcjach opisano (w porządku chronologicznym) możliwe stany wersji HAL.

Niewydany

W przypadku urządzeń HAL, jeśli wersja HAL nie znajduje się w żadnej publicznej i zamrożonej macierzy kompatybilności, uważa się ją za niepublikowaną i prawdopodobnie w fazie rozwoju. Obejmuje to wersje HAL, które znajdują się tylko w compatibility_matrix.F.xml . Przykłady:

  • Podczas opracowywania systemu Android 9 warstwa HAL health@2.0 była uważana za niewydaną warstwę HAL i była obecna tylko w compatibility_matrix.3.xml .
  • teleportation@1.0 HAL nie znajduje się w żadnej wydanej matrycy kompatybilności i jest również uważany za niewydany HAL.

W przypadku frameworkowych warstw HAL, jeśli wersja HAL znajduje się tylko w manifeście frameworku niepowiązanej gałęzi programistycznej, uważa się ją za niewydaną.

Wydany i aktualny

W przypadku warstw HAL urządzeń, jeśli wersja HAL znajduje się w dowolnej publicznej i zamrożonej macierzy zgodności, zostaje ona wypuszczona. Na przykład po zamrożeniu wersji 3 FCM i opublikowaniu w AOSP warstwa HAL health@2.0 jest uważana za wydaną i aktualną wersję HAL.

Jeśli wersja HAL znajduje się w publicznej i zamrożonej macierzy zgodności, która ma najwyższą wersję FCM, wersja HAL jest aktualna (tzn. nie jest przestarzała). 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 wydane i aktualne wersje HAL.

W przypadku frameworkowych warstw HAL, jeśli wersja HAL znajduje się w manifeście frameworka ostatniej wydanej gałęzi bez atrybutu max-level lub (nietypowo) max-level równego lub wyższego niż wersja FCM wydana w tej gałęzi, uważa się ją za wydaną i aktualna wersja HAL. Na przykład displayservice HAL została wydana i aktualna w systemie Android 12, zgodnie z manifestem struktury systemu Android 12 .

Wydany, ale przestarzały

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

  • Jest wydany.
  • Najwyższa wersja FCM nie znajduje się w publicznej i zamrożonej macierzy kompatybilności.
  • Struktura nadal obsługuje publiczną i zamrożoną macierz zgodności.

Przykłady:

Dlatego power@1.0 jest aktualna, ale NIE przestarzała, w systemie Android 9.

W przypadku frameworkowych warstw HAL, jeśli wersja HAL znajduje się w manifeście frameworka ostatniej wydanej gałęzi z atrybutem max-level niższym niż wersja FCM w tej gałęzi, jest ona uważana za wydaną, ale przestarzałą wersję HAL. Na przykład warstwa HAL schedulerservice została wydana, ale w systemie Android 12 jest przestarzała, zgodnie z manifestem struktury systemu Android 12 .

REMOVED

W przypadku urządzeń HAL wersja HAL jest usuwana wtedy i tylko wtedy, gdy spełnione są następujące warunki:

  • Został wydany wcześniej.
  • Platforma nie obsługuje żadnej publicznej i zamrożonej macierzy kompatybilności.

Macierze zgodności, które są publiczne, zamrożone, ale nie są obsługiwane przez platformę, są przechowywane w bazie kodu w celu zdefiniowania zestawu usuniętych wersji HAL, dzięki czemu można napisać testy VTS w celu sprawdzenia, czy usunięte warstwy HAL nie znajdują się na nowych urządzeniach.

W przypadku ramowych warstw HAL wersja HAL jest usuwana wtedy i tylko wtedy, gdy spełnione są następujące warunki:

  • Został wydany wcześniej.
  • Nie jest to żaden manifest frameworka najnowszego wydanego oddziału.

Starsze FCM

Docelowa wersja FCM ma specjalną wartość dla wszystkich urządzeń innych niż Treble. Starsza wersja FCM, compatibility_matrix.legacy.xml , zawiera listę wymagań platformy dla starszych urządzeń (tj. urządzeń uruchomionych przed wersją Androida 8.0).

Jeśli ten plik istnieje dla FCM w wersji F , każde urządzenie inne niż Treble można zaktualizować do wersji F , pod warunkiem, że jego manifest urządzenia jest zgodny z tym plikiem. Jego usunięcie przebiega według tej samej procedury, co FCM dla innych docelowych wersji FCM (usuwane, gdy liczba aktywnych urządzeń wcześniejszych niż 8.0 spadnie poniżej pewnego progu).

Wydane wersje FCM

Listę wydanych wersji FCM można znaleźć w hardware/interfaces/compatibility_matrices .

Aby znaleźć wersję FCM wydaną z konkretną wersją Androida, zobacz Level.h .