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
, gdziefoo
to nazwa HAL, ax.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
:
- Skopiuj najnowszą wersję
compatibility_matrix.<F-1>.xml
docompatibility_matrix.F.xml
- Zaktualizuj atrybut
level
w pliku doF
. - 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)
ioptional="false"
. - Niewymagane na urządzeniach uruchamianych z pakietem
V = F
. Polecompatibility_matrix.F.xml
musi skopiować wartośćx.y-z
i opcje zcompatibility_matrix.<F-1>.xml
i zmień wersję nax.w-(z+1)
(gdziew >= 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 wersjix.0
, jeśli urządzenia są wysyłane zV = F
musi się uruchamiać za pomocą parametrux.0
.optional="false"
, ale wraz ze starszymi wersjami głównymi w tym samym regionie<hal>
jeśli urządzenia wysyłane z pakietemV = 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 firmyV = 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
zoptional="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:
- Sprawdź, czy
compatibility_matrix.F.xml
ma atrybutlevel="F"
. - Upewnij się, że wszystkie urządzenia są kompilowane i uruchamiane.
- 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
. - 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ć:
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.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 wcompatibility_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:
- HAL
health@1.0
jest w dokumenciecompatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
, icompatibility_matrix.2.xml
, ale nie wcompatibility_matrix.3.xml
. Dlatego uważa się ją za wycofaną Android 9. - Zaawansowana HAL na Androidzie została uaktualniona do wersji podrzędnej
9, ale
power@1.0
wciąż jest na liściecompatibility_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 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