Wersja platformy Androida zawiera wiele macierzy zgodności platform (FCM) – po jednej dla każdej docelowej wersji FCM z możliwością uaktualnienia. Określają one wymagania platformy i wymagania dotyczące wersji docelowej FCM. W ramach cyklu FCM Android wycofuje i usuwa interfejsy HIDL HAL, a następnie modyfikuje pliki FCM, aby odzwierciedlić stan wersji HAL.
Aby umożliwić OTA tylko dla frameworków w ich własnych środowiskach, partnerzy, którzy rozszerzają interfejsy dostawców, powinni też wycofać i usunąć interfejsy HIDL HAL, używając tych samych metod.
Terminologia
- Tablica zgodności frameworków (FCM)
- Plik XML określający wymagania dotyczące ram dla implementacji zgodnych dostawców. Matryca zgodności jest wersjonowana, a nowa wersja jest blokowana w przypadku każdej wersji frameworka. Każda wersja frameworka zawiera wiele usług FCM.
- Wersje FCM na platformie (SF)
- Zbiór wszystkich wersji FCM w ramach wersji frameworku. Platforma może działać z dowolną implementacją dostawcy, która spełnia co najmniej 1 z tych FCM.
- Wersja platformy Firebase Cloud Messaging (F)
- Najwyższa wersja wśród wszystkich FCM w ramach danej wersji frameworka.
- Docelowa wersja FCM (V)
- Docelowa wersja FCM (z SF), zadeklarowana wyraźnie w manifeście urządzenia, której implementacja spełnia wymagania. Implementacja dostawcy musi być wygenerowana na podstawie opublikowanego FCM, ale może deklarować nowsze wersje HAL w pliku manifestu urządzenia.
- Wersja HAL
- Wersja HAL ma format
foo@x.y
, gdziefoo
to nazwa HAL, ax.y
to konkretna wersja, np.nfc@1.0
,keymaster@3.0
(w tym dokumencie pomijamy prefiks katalogu głównego, np.android.hardware
). - Plik manifestu urządzenia
- Pliki XML określające wersje HAL, które interfejs dostawcy (w tym obrazy dostawcy i ODM) udostępnia po stronie urządzenia. Zawartość pliku manifestu urządzenia jest ograniczona przez docelową wersję FCM urządzenia, ale może zawierać listę interfejsów HAL, które są nowsze niż interfejs FC odpowiadający wersji V.
- Interfejsy HAL urządzeń
- HAL, które są wymienione (udostępnione) w pliku manifestu urządzenia i wymienione (wymagane lub opcjonalne) w ramach matrycy zgodności (FCM).
- Matryca zgodności urządzeń (DCM)
- Plik XML określający wymagania dostawcy dotyczące implementacji zgodnych z ramami. Każde urządzenie zawiera jeden DCM.
- Plik manifestu frameworku
- Plik XML określający, jakie wersje HAL udostępniają interfejs dostawcy po stronie platformy, w tym system, system_ext i zdjęcia produktu. HAL-e w pliku manifestu frameworku są dynamicznie wyłączane zgodnie z docelową wersją FCM urządzenia.
- HAL platformy
- HAL, które są wymienione w pliku manifestu frameworku i wymienione jako wymagane lub opcjonalne w macierzy zgodności urządzeń (DCM).
Cykl życia FCM w bazie kodu
Ten dokument zawiera ogólny opis cyklu życia FCM. Obsługiwane manifesty znajdziesz w pliku hardware/interfaces/compatibility_matrix.<FCM>.xml
, w którym znajduje się FCM (system/libvintf/include/vintf/Level.h
).
Urządzenie z odpowiednią wersją Androida powinno mieć wartość FCM większą lub równą odpowiedniemu poziomowi. Na przykład urządzenie do wysyłki urządzenia z Androidem 11 zwykle ma FCM na poziomie 5, ale implementuje FCM na poziomie 6 lub wyższym, które ma różne dodatkowe wymagania określone w tabelach 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 |
Poziom FCM jest równy poziomowi interfejsu Vendor API lub wyższy.
Gdy Android wycofa poziom FCM, nadal będzie on obsługiwany na dotychczasowych urządzeniach. Urządzenia kierujące reklamy na niższe poziomy FCM mogą domyślnie używać interfejsów HAL wymienionych na nowszych poziomach FCM, o ile są one dostępne w gałęzi.
Tworzenie aplikacji w nowej wersji FCM
Android zwiększa wersję FCM dla każdej wersji platformy (np. Android 8 i 8.1). Podczas tworzenia nowe compatibility_matrix.F.xml
jest tworzone, a istniejące compatibility_matrix.f.xml
(gdzie f
< F
) nie ulega już zmianie.
Aby rozpocząć tworzenie aplikacji w nowej wersji FCM:F
- Skopiuj najnowszy plik
compatibility_matrix.<F-1>.xml
do plikucompatibility_matrix.F.xml
. - Zaktualizuj atrybut
level
w pliku doF
. - Dodaj odpowiednie reguły kompilacji, aby zainstalować tę tablicę zgodności na urządzeniu.
Wprowadzenie nowego HAL-a
Podczas tworzenia aplikacji w ramach procesu programowania, gdy wprowadzasz nowy interfejs HAL (Wi-Fi, NFC itp.) do Androida w bieżącej wersji FCM F
, dodaj interfejs HAL do compatibility_matrix.F.xml
z tymi ustawieniami optional
:
optional="false"
jeśli urządzenia zV = F
muszą uruchamiać ten HAL,optional="true"
, jeśli urządzenia zV = F
mogą działać bez tego interfejsu HAL.
Na przykład w Androidzie 8.1 wprowadzono cas@1.0
jako opcjonalny interfejs HAL. Urządzenia z Androidem 8.1 nie muszą implementować tego interfejsu HAL, dlatego do pliku compatibility_matrix.F.xml
(który tymczasowo podczas opracowywania tej wersji nazywał się compatibility_matrix.current.xml
) dodano następujący wpis:
<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)
Podczas tworzenia, gdy w ramach bieżącej wersji FCM F
HAL przechodzi z wersji x.z
na x.(z+1)
, jeśli ta wersja:
- Wymagane na urządzeniach z
V = F
,compatibility_matrix.F.xml
musi być w staniex.(z+1)
ioptional="false"
. - Niewymagane na urządzeniach uruchamianych z pakietem
V = F
.compatibility_matrix.F.xml
musi skopiować wartośćx.y-z
i opcję zcompatibility_matrix.<F-1>.xml
oraz zmienić wersję nax.w-(z+1)
(gdziew >= y
).
Na przykład Android 8.1 wprowadził interfejs broadcastradio@1.1
jako aktualizację interfejsu HAL 1.0. Starsza wersja (broadcastradio@1.0
) jest opcjonalna w przypadku urządzeń z Androidem 8.0, a nowsza (broadcastradio@1.1
) – w przypadku urządzeń z Androidem 8.1. 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 usługi compatibility_matrix.F.xml
i zmodyfikowany w ten 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>
Uaktualnianie interfejsu HAL (duża aktualizacja)
Podczas tworzenia, gdy HAL ma uaktualnienie do wersji głównej w obecnej wersji FCM F
, nowa wersja główna x.0
jest dodawana do compatibility_matrix.F.xml
z tymi ustawieniami optional
:
optional="false"
z jedynie wersjąx.0
, jeśli urządzenia dostarczane zV = F
muszą uruchamiać się z wersjąx.0
.optional="false"
, ale także ze starszymi głównymi wersjami w tym samym tagu<hal>
, jeśli urządzenia dostarczane zV = F
muszą uruchamiać ten interfejs HAL, ale mogą też uruchamiać starsze główne wersje.optional="true"
, jeśli urządzenia wysyłane z markąV = F
nie muszą uruchamiać kodu HAL.
Na przykład w Androidzie 9 wprowadzamy health@2.0
jako główne uaktualnienie HAL 1.0 i wycofujemy tę wersję 1.0. Starsza wersja, health@1.0
, jest opcjonalna na urządzeniach z Androidem 8.0 i 8.1. Urządzenia z Androidem 9 muszą mieć nową wersję 2.0. Załóżmy na przykład, że komórki 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 pliku compatibility_matrix.F.xml
i zmień go w ten 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ż HAL w wersji 2.0 jest w języku:
compatibility_matrix.3.xml
zoptional="false"
, urządzenia uruchamiane z Androidem 9 muszą być wyposażone w pakiet HAL 2.0. - Ponieważ interfejs HAL 1.0 nie jest dostępny w
compatibility_matrix.3.xml
, urządzenia uruchamiane z Androidem 9 nie mogą udostępniać interfejsu HAL 1.0 (ponieważ jest on uważany za przestarzały). - Interfejs HAL w wersji 1.0 jest obecny w
legacy/1/2.xml
(starsze wersje FCM, z którymi może współpracować Android 9) jako opcjonalny interfejs HAL, więc platforma Android 9 może nadal współpracować z interfejsem HAL w wersji 1.0 (który nie jest uważany za usunięty interfejs HAL).
Nowe wersje FCM
Proces publikowania wersji FCM na partycji systemowej jest przeprowadzany wyłącznie przez Google w ramach wersji AOSP i obejmował te czynności:
- Sprawdź, czy
compatibility_matrix.F.xml
ma atrybutlevel="F"
. - Upewnij się, że wszystkie urządzenia są skompilowane i uruchamiane.
- Zaktualizuj testy VTS, aby mieć pewność, że urządzenia uruchamiające najnowszą wersję frameworka (na podstawie poziomu interfejsu API) mają docelową wersję FCM
V >= F
. - Opublikuj plik w AOSP.
Na przykład testy VTS zapewniają, że urządzenia z Androidem 9 mają ustawioną docelową wersję FCM >= 3.
Dodatkowo w przypadku platformy FCM mogą też występować wymagania dotyczące poszczególnych wersji platformy. Wersje FCM w partycjach product i system_ext są publikowane przez właściciela tych obrazów. Numery wersji FCM w podziałach product i system_ext muszą być zgodne z numerami w podziale system. Podobnie jak w przypadku wersji FCM na partycji systemowej, matryca zgodności w wersji FCM F na partycjach product i system_ext odzwierciedla wymagania na urządzeniu z docelową wersją FCM F.
Wycofanie wersji HAL
Wycofanie wersji interfejsu HAL jest decyzją dewelopera (np. w przypadku interfejsów HAL AOSP decyzję podejmuje Google). Może się tak zdarzyć, gdy zostanie wydana nowsza wersja HAL (podrzędna lub główna).
wycofanie interfejsu HAL urządzenia,
Gdy w wersji F
Komunikacji w chmurze Firebase (FCM) wycofany jest interfejs HAL foo@x.y
, oznacza to, że żadne urządzenie z docelową wersją FCM V = F
lub nowszą nie może implementować interfejsu foo
w wersji x.y
ani żadnej wersji starszej niż x.y
. Framework do aktualizacji urządzeń nadal obsługuje przestarzałą wersję HAL.
Po opublikowaniu wersji F
FCM wersja HAL foo@x.y
jest uznawana za wycofaną, jeśli konkretna wersja HAL nie została wyraźnie określona w najnowszej wersji FCM dla docelowej wersji FCM V = F
. W przypadku urządzeń uruchamianych z użyciem V = F
spełniony jest jeden z tych warunków:
- platforma wymaga nowszej wersji (głównej lub podrzędnej);
- Platforma nie wymaga już HAL.
Na przykład w Androidzie 9 pakiet health@2.0
został wprowadzony jako główne uaktualnienie HAL 1.0. Element health@1.0
został usunięty z pliku compatibility_matrix.3.xml
, ale jest obecny w plikach compatibility_matrix.legacy.xml
, compatibility_matrix.1.xml
i compatibility_matrix.2.xml.
Dlatego health@1.0
jest uważane za przestarzałe.
Wycofanie platformy HAL
Gdy dana platforma HAL foo@x.y
zostanie wycofana w wersji FCM F
, oznacza to, że żadne urządzenie uruchamiające wersję docelową FCM V = F
lub nowszą nie może oczekiwać, że platforma będzie udostępniać foo
w wersji x.y
lub w wersji starszej niż x.y
. Platforma do uaktualniania urządzeń nadal udostępnia wycofaną wersję HAL.
Gdy zostanie wydana wersja FCM F
, wersja HAL foo@x.y
zostanie uznana za przestarzałą, jeśli manifest platformy określa wartość max-level="F - 1"
dla foo@x.y
. W przypadku urządzeń używających V = F
framework nie udostępnia interfejsu HAL foo@x.y
. Tablica zgodności urządzeń z uruchomionym kodem V = F
nie może zawierać list HAL z platformą max-level < V
.
Na przykład w Androidzie 12 funkcja schedulerservice@1.0
została wycofana. Atrybut max-level
ma wartość 5
, czyli wersję FCM wprowadzoną w Androidzie 11. Zapoznaj się z ramówką manifestu Androida 12.
Wycofanie obsługi docelowych wersji FCM
Gdy liczba aktywnych urządzeń z ustawionymi ustawieniami docelowej wersji FCM V
spadnie poniżej określonego progu, ta wersja zostanie usunięta z zestawu SF w przyszłej wersji platformy. Aby to zrobić, wykonaj te czynności:
Usunięcie
compatibility_matrix.V.xml
z reguł kompilacji (aby nie było instalowane w obrazach systemu) oraz usunięcie kodu, który został zaimplementowany lub który zależał od usuniętych funkcji.usunąć z manifestu frameworka HAL-e frameworka o wartości
max-level
mniejszej lub równejV
oraz usunąć kod, który implementuje usunięte HAL-e frameworka,
Urządzenia z docelową wersją FCM spoza grupy SF danej wersji frameworka nie mogą zostać zaktualizowane do tej wersji.
Stan wersji HAL
W następnych sekcjach opisano (w kolejności chronologicznej) możliwe stany wersji HAL.
Niewydane
W przypadku list HAL urządzeń, jeśli wersja HAL nie znajduje się w żadnej z publicznych i zablokowanych macierzy zgodności, jest uważana za nieopublikowaną i prawdopodobnie znajdującą się w fazie rozwoju.
Dotyczy to wersji HAL, które są dostępne tylko w compatibility_matrix.F.xml
.
Przykłady:
- Podczas tworzenia Androida 9 interfejs API
health@2.0
był uważany za nieopublikowany i był obecny tylko w wersjicompatibility_matrix.3.xml
. - HAL
teleportation@1.0
nie występuje w żadnej z opublikowanych macierzy zgodności i jest też uważana za nieopublikowaną wersję HAL.
W przypadku interfejsów HAL frameworku, jeśli wersja HAL znajduje się tylko w pliku manifestu frameworku w niepowiązanej gałęzi rozwoju, jest ona uważana za niewydaną.
Wydane i aktualne
Jeśli wersja HAL znajduje się w publicznej lub zablokowanej macierzy zgodności, jest publikowana. Na przykład po zamrożeniu i opublikowaniu wersji 3 FCM w AOSP interfejs HAL health@2.0
jest uznawany za opublikowaną i aktualną wersję interfejsu HAL.
Jeśli wersja HAL znajduje się w publicznej i zamrożonej tabeli zgodności, która ma najwyższą wersję FCM, wersja HAL jest aktualna (czyli nie jest wycofana). Na przykład istniejące wersje HAL (takie jak nfc@1.0
wprowadzona w compatibility_matrix.legacy.xml
), które nadal są dostępne w compatibility_matrix.3.xml
, są też uznawane za wydane i obecne wersje HAL.
W przypadku interfejsów HAL frameworku, jeśli wersja HAL znajduje się w pliku manifestu frameworku najnowszej wydanej gałęzi bez atrybutu max-level
lub (co jest nietypowe) z atrybutem max-level
równym lub wyższym niż wersja FCM, która została wydana w tej gałęzi, jest ona uważana za wydaną i aktualną wersję interfejsu HAL. Na przykład interfejs displayservice
HAL jest dostępny i aktualny w Androidzie 12 zgodnie z pliku manifestu platformy Androida 12.
Wersja opublikowana, ale wycofana
Wersje HAL urządzeń są wycofywane tylko wtedy, gdy są spełnione wszystkie te warunki:
- Został opublikowany.
- Nie jest to publiczna i zamrożona matryca zgodności, która zawiera najwyższą wersję FCM.
- Jest ona dostępna publicznie i zamrożona w ramach matrycy zgodności, którą system nadal obsługuje.
Przykłady:
- Interfejs
health@1.0
HAL jest dostępny w wersjachcompatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
icompatibility_matrix.2.xml
, ale nie w wersjicompatibility_matrix.3.xml
. W związku z tym uznajemy ją za wycofaną w Androidzie 9. - Zaawansowana HAL na Androidzie 9 została uaktualniona do wersji podrzędnej, ale
power@1.0
jest nadal w wersjicompatibility_matrix.3.xml
. power@1.0
compatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
icompatibility_matrix.2.xml
.compatibility_matrix.3.xml
zawierapower@1.0-1
.
Dlatego power@1.0
jest aktualną, ale NIE przestarzałą funkcją w Androidzie 9.
W przypadku frameworków HAL, jeśli wersja HAL znajduje się w manifeście frameworku najnowszej gałęzi opublikowanej z atrybutem max-level
niższej niż wersja FCM w tej gałęzi, jest ona uznawana za opublikowaną, ale wycofaną wersję HAL. Na przykład interfejs HAL schedulerservice
został wydany, ale wycofany w Androidzie 12, zgodnie z pliku manifestu platformy Androida 12.
Usunięto
W przypadku list HAL urządzeń wersja HAL jest usuwana tylko wtedy, gdy są spełnione te warunki:
- Został on wcześniej opublikowany.
- Nie znajduje się on w żadnej publicznej i zamrożonej matrycy zgodności obsługiwanej przez framework.
Publiczne, zamrożone, ale nieobsługiwane przez framework macierze zgodności są przechowywane w kodzie źródłowym, aby definiować zestawy wersji usuniętych interfejsów HAL. Dzięki temu można pisać testy VTS, aby mieć pewność, że usunięte interfejsy HAL nie są dostępne na nowych urządzeniach.
W przypadku interfejsów HAL framework wersja interfejsu HAL jest usuwana, jeśli są spełnione te warunki:
- Ta wersja została już wcześniej opublikowana.
- Nie znajduje się on w żadnym pliku manifestu frameworku w ramach najnowszej gałęzi.
Starsze usługi FCM
Wartość docelowej starszej wersji FCM to wartość specjalna dla wszystkich urządzeń innych niż Treble. Starsza wersja FCM (compatibility_matrix.legacy.xml
) zawiera listę wymagań dotyczących platformy w przypadku starszych urządzeń (tj. tych, które zostały wprowadzone na rynek przed Androidem 8.0).
Jeśli ten plik istnieje w przypadku FCM w wersji F
, każde urządzenie inne niż z Treble można uaktualnić do wersji F
, o ile plik manifestu urządzenia jest zgodny z tym plikiem. Jego usunięcie odbywa się zgodnie z tą samą procedurą co w przypadku innych docelowych wersji FCM (usuwane, gdy liczba aktywnych urządzeń z wersją starsza niż 8.0 spadnie poniżej określonego progu).
Wersje opublikowane FCM
Listę opublikowanych wersji FCM znajdziesz tutaj: hardware/interfaces/compatibility_matrices
.
Aby znaleźć wersję FCM opublikowaną z określoną wersją Androida, zapoznaj się z Level.h
.