Android 13 zawiera android.hardware.health
AIDL HAL, czyli przekształconą wersję health@2.1 HAL. Nowa warstwa HAL ma te zalety:
- Usuwanie nieużywanych interfejsów API związanych z ładowarką
- Usuwanie nieużywanych
StorageAttribute
i powiązanych pól - Obsługa ładowania na stacji dokującej.
Android 11 zawiera android.hardware.health
HAL 2.1, czyli uaktualnioną wersję HAL health@2.0. Nowa warstwa HAL ma te zalety:
- Wyraźniejsze rozdzielenie kodu platformy i kodu dostawcy.
- Większa swoboda dostosowywania przez dostawców raportów dotyczących informacji o zdrowiu.
- Więcej informacji o stanie urządzenia niż tylko o baterii.
Dokumentacja dotycząca implementacji Health HAL 2.1 jest dostępna na tej stronie jako materiał referencyjny.
Wymagania
Ta sekcja zawiera wymagania dotyczące Androida 11, 12 i 13 lub nowszego.
urządzenia z Androidem 11 i 12,
Urządzenia wprowadzane na rynek z Androidem 11 i 12 muszą udostępniać interfejs HAL w wersji 2.1 lub interfejs AIDL HAL. Urządzenia, które nie są wprowadzane na rynek z Androidem 11 lub 12, ale planują zaktualizować obraz dostawcy do wersji 5 (wydanej w Androidzie 11) lub 6 (wydanej w Androidzie 12) macierzy zgodności z platformą docelową, muszą usunąć istniejące implementacje HAL w wersji 2.0 i zapewnić HAL w wersji 2.1 lub HAL AIDL. Urządzenia, które nie są wprowadzane na rynek z Androidem 11 i nie planują aktualizacji obrazu dostawcy, również powinny udostępniać HAL w wersji 2.1 lub AIDL.
AOSP zawiera wiele bibliotek pomocniczych, które ułatwiają implementację interfejsu HAL w wersji 2.1 i przejście ze starszych interfejsów HAL HIDL.
Urządzenia z Androidem 13 lub nowszym
Urządzenia wprowadzane na rynek z Androidem 13 muszą udostępniać interfejs AIDL HAL (i nie mogą udostępniać interfejsu HIDL HAL). Urządzenia, które nie są wprowadzane na rynek z Androidem 13, ale planują zaktualizować obraz dostawcy do wersji 7 macierzy zgodności z platformą docelową (wydanej w Androidzie 13), muszą usunąć istniejące implementacje HIDL HAL i udostępnić AIDL HAL. Urządzenia, które nie są wprowadzane na rynek z Androidem 13 i nie planują aktualizacji obrazu dostawcy, również powinny udostępniać interfejs AIDL HAL.
AOSP zawiera wiele bibliotek pomocniczych, które ułatwiają implementację interfejsu AIDL HAL i przejście ze starych interfejsów HIDL HAL.
Terminologia
Poniżej znajdziesz terminy, które warto znać przed przeczytaniem reszty dokumentacji dotyczącej stanu systemu Android:
- health@2.1
- Skrót
android.hardware.health@2.1
. Wersja 1 interfejsu HIDL stanu urządzenia została wydana w Androidzie 11. - health AIDL HAL
- Skrót
android.hardware.health
. Wersja 1 interfejsu HAL AIDL dotyczącego zdrowia została udostępniona w Androidzie 13. - ładowarka
- Plik wykonywalny uruchomiony podczas ładowania w trybie wyłączonym, który wyświetla animację ładowania telefonu.
- recovery
- Plik wykonywalny działający w trybie przywracania, który musi pobrać informacje o baterii.
- storaged
- Usługa, która pobiera informacje o pamięci i przekazuje je do platformy.
Zdrowie na Androidzie 11 i 12
W Androidzie 11 i 12 komponent stanu działa w sposób opisany na tym diagramie:
[system]
| getService()
V
[health@2.1-service]
| getService(stub=true)
V
[ health@2.0-impl-2.1-<device>.so ]
| | (device-dependent linkage)
V V
+---------Helper libs for impl--------+ [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl) ] |
| [libbatterymonitor (battery) ] |
+-------------------------------------+
W przypadku innych trybów:
[ charger ]
| getService() | (legacy code path)
V +-------------------------------------------------+
[health@2.1-service] |
| getService(stub=true) |
V |
[ health@2.0-impl-2.1-<device>.so ] |
| | (device-dependent linkage) |
V V |
+---------Helper libs for impl--------+ [libhealthd.device] |
| [libhealthloop (uevent, wakealarm)] | |
| [libhealth2impl (IHealth impl) ] | <---------------------------------+
| [libbatterymonitor (battery) ] |
+-------------------------------------+
[recovery]
| getService() w/o hwservicemanager
V
[ health@2.0-impl-2.1-<device>.so ]
| | (device-dependent linkage)
V V
+---------Helper libs for impl--------+ [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl) ] |
| [libbatterymonitor (battery) ] |
+-------------------------------------+
Poniżej znajdziesz uproszczony schemat różnych trybów:
Rysunek 1. Infrastruktura Health HIDL HAL 2.1.
Zdrowie na Androidzie 13
W Androidzie 13 wprowadzono interfejs HAL AIDL dotyczący stanu urządzenia. Rysunek 2 przedstawia szczegółowo działanie komponentu dotyczącego zdrowia:
Rysunek 2. Infrastruktura warstwy HAL AIDL funkcji dotyczących zdrowia.
Interfejs HIDL HAL 2.1
Interfejs HAL health@2.1 obsługuje ładowanie w trybie wyłączonym i zapewnia więcej informacji o baterii.
Główny interfejs IHealth oferuje te dodatkowe funkcje:
getHealthConfig
: aby pobrać konfigurację tego HAL-u.getHealthInfo_2_1
: uaktualnienie do nowszej wersjigetHealthInfo
shouldKeepScreenOn
: aby określić, czy ekran ma być włączony w trybie ładowania.
Dodatkowo wdrożenie @2.1::IHealth
jest wymagane do obsługi @2.1::IHealthInfoCallback
w przypadku dziedziczonych funkcji registerCallback
i unregisterCallback
. Nowy interfejs wywołania zwrotnego zwraca informacje o stanie zdrowia do klienta za pomocą funkcji healthInfoChanged_2_1
zamiast funkcji healthInfoChanged
.
Nowa struktura @2.1::HealthInfo
jest zwracana za pomocą wywołań zwrotnych i getHealthInfo_2_1
. Ta struktura zawiera dodatkowe informacje o stanie urządzenia
dostępne w interfejsie HAL health@2.0, w tym:
- Poziom pojemności baterii
- Czas ładowania baterii do pełna (w sekundach)
- Pojemność baterii przy pełnym naładowaniu (w μAh)
Rysunek 3 przedstawia diagram UML klas przydatnych w implementacji HAL usługi zdrowia:
Rysunek 3. Diagram UML warstwy HAL funkcji dotyczących zdrowia w wersji 2.1.
Informacje o wdrażaniu usługi Zdrowie 2.1 znajdziesz w artykule Wdrażanie usługi Zdrowie 2.1.
Wersja 1 interfejsu HAL języka AIDL
Ta sekcja zawiera informacje o interfejsie AIDL HAL w wersji 1.
Zmiany w interfejsie API
Interfejs HAL w AIDL w wersji 1 obsługuje interfejsy API podobne do interfejsu HAL w HIDL 2.1. W porównaniu z interfejsem HIDL 2.1 w interfejsie API zmieniono te elementy:
- Interfejsy API związane z ładowarką wprowadzone w HIDL HAL 2.1 nie są przenoszone do AIDL HAL. Ponieważ funkcja ładowania w trybie wyłączenia jest dostępna tylko w przypadku partycji
/vendor
, interfejsy API w interfejsie dostawcy nie są konieczne. Aby prawidłowo wdrożyć ładowanie w trybie wyłączonym, zapoznaj się z informacjami o ładowarce. - Typ
StorageAttribute
i powiązane z nim pola zostały usunięte, ponieważ nie są używane. - Do
HealthInfo
dodanochargerDockOnline
, aby umożliwić ładowanie w stacji dokującej.
Implementacja
Rysunek 4 przedstawia diagram UML klas przydatnych w implementacji interfejsu AIDL HAL usługi zdrowia:
Rysunek 4. Diagram UML warstwy HAL AIDL funkcji dotyczących zdrowia.
Informacje o wdrażaniu usługi AIDL związanej ze stanem urządzenia znajdziesz w artykule Implementowanie interfejsu HAL AIDL związanego ze stanem urządzenia.
Odzyskiwanie
Android 13 obsługuje binder w trybie odzyskiwania. Zainstalowanie usługi AIDL Health w trybie odzyskiwania umożliwia jej działanie w tym trybie.
Informacje o instalowaniu usługi AIDL stanu urządzenia w trybie odzyskiwania znajdziesz w tych artykułach:
Ładowarka
Funkcja ładowania w trybie wyłączonym została przeniesiona z /system
do /vendor
. W przypadku urządzeń wprowadzanych na rynek z Androidem 13, które obsługują ładowanie w trybie wyłączonym, binarny plik usługi HAL musi obsługiwać tryb ładowarki. Aby to zrobić, zapoznaj się z informacjami o wdrażaniu ładowarki.
Właściwości systemowe ładowarki
Właściwości ro.charger.*
nie są już odczytywane przez plik binarny charger
w /vendor
. Jeśli na urządzeniu ustawione są któreś z ro.charger.*
właściwości systemowych, zapoznaj się z właściwościami systemowymi ładowarki.