Android 13 zawiera interfejs android.hardware.health
AIDL HAL, który jest konwersją interfejsu health@2.1 HAL. Nowa wersja HAL ma te zalety:
- Usuwanie nieużywanych interfejsów API związanych z ładowarkami
- Usuwanie nieużywanych pól
StorageAttribute
i powiązanych z nimi pól - Obsługa ładowania na stacji dokującej.
Android 11 zawiera android.hardware.health
HAL 2.1,
co jest drobną aktualizacją interfejsu HAL health@2.0. Nowa wersja HAL ma te zalety:
- Lepsze oddzielenie ramy od kodu dostawcy.
- Większa swoboda dostosowywania raportów z informacjami o zdrowiu przez dostawców.
- więcej informacji o stanie urządzenia niż tylko o baterii;
Na tej stronie znajdziesz dokumentację implementacji interfejsu HAL Health 2.1.
Wymagania
Ta sekcja zawiera wymagania dotyczące Androida 11, 12 i 13 lub nowszego.
urządzeniach z Androidem 11 i Androidem 12,
Urządzenia z Androidem 11 i 12 muszą mieć interfejs HAL 2.1 lub interfejs AIDL HAL. Urządzenia, które nie są jeszcze dostępne z Androidem 11 lub 12, ale planują zaktualizować obraz sprzedawcy do wersji 5 (wydana w Androidzie 11) lub 6 (wydana w Androidzie 12) z ramy docelowe w ramach matrycy zgodności (wydana w Androidzie 11) lub 6 (wydana w Androidzie 12), muszą usunąć istniejące implementacje HAL 2.0 i zapewnić HAL 2.1 lub HAL AIDL. Zalecamy też, aby urządzenia, które nie uruchamiają Androida 11 i nie planują aktualizacji obrazu dostawcy, zawierały HAL 2.1 lub AIDL HAL.
AOSP zawiera wiele bibliotek pomocniczych, które ułatwiają implementację interfejsu HAL 2.1 i przejście ze starych interfejsów HIDL HAL.
urządzeniach z Androidem w wersji 13 lub nowszej,
Urządzenia z Androidem 13 muszą zawierać interfejs AIDL HAL (nie można używać interfejsu HIDL HAL). Urządzenia, które nie są uruchamiane w Androidzie 13, ale planują zaktualizować obraz dostawcy do wersji docelowej w ramach wersji 7 macierzy zgodności frameworku (wydane w Androidzie 13), muszą usunąć istniejące implementacje interfejsu HIDL HAL oraz udostępnić interfejs AIDL HAL. Zaleca się również, aby urządzenia, które nie uruchamiają Androida 13 i nie planują aktualizacji obrazu dostawcy, zawierały 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
Zanim zaczniesz czytać pozostałą część dokumentacji dotyczącej stanu systemu Android, zapoznaj się z tymi terminami:
- health@2.1
- Skrót od
android.hardware.health@2.1
. Wersja 1 interfejsu HIDL do obsługi danych o zdrowiu została wydana w Androidzie 11. - health AIDL HAL
- Skrót od
android.hardware.health
. Wersja 1 interfejsu API Health AIDL została wydana w Androidzie 13. - ładowarka
- Plik wykonywalny działający w trybie ładowania w stanie wyłączenia, który wyświetla animację ładowania telefonu.
- odzyskiwanie
- Plik wykonywalny działający w trybie przywracania, który musi pobrać informacje o baterii.
- storaged
- Demon, który pobiera informacje o miejscu na dane i przekazuje je do platformy.
Zdrowie na Androidzie 11 i 12
W Androidzie 11 i 12 komponent stanu działa zgodnie z diagramem poniżej:
[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 przedstawiający różne tryby:
Rysunek 1. Infrastruktura Health HIDL HAL 2.1.
Zdrowie w Androidzie 13
W Androidzie 13 wprowadzono interfejs HAL dla AIDL w ramach funkcji Zdrowie. Rysunek 2. Jak działa komponent zdrowia:
Rysunek 2. Infrastruktura Health AIDL HAL.
Interfejs HAL HIDL 2.1
Interfejs HAL health@2.1 obsługuje ładowanie w trybie offline i zawiera więcej informacji o baterii.
Główny interfejs IHealth zapewnia te dodatkowe funkcje:
getHealthConfig
: pobieranie konfiguracji tego HAL-a.getHealthInfo_2_1
: drobna aktualizacja do wersjigetHealthInfo
shouldKeepScreenOn
: określenie, czy ekran ma być włączony w trybie ładowania.
Ponadto implementacja @2.1::IHealth
musi obsługiwać klasę @2.1::IHealthInfoCallback
w przypadku dziedziczonych funkcji registerCallback
i unregisterCallback
. Nowy interfejs wywołania zwrotnego zwraca informacje o zdrowie do klienta za pomocą funkcji healthInfoChanged_2_1
zamiast dziedziczonej funkcji healthInfoChanged
.
Nowa struktura @2.1::HealthInfo
jest zwracana za pomocą funkcji wywołujących i getHealthInfo_2_1
. Ta struktura zawiera dodatkowe informacje o stanie urządzenia dostępne w interfejsie Health@2.0 HAL, m.in.:
- Pojemność baterii
- Czas ładowania baterii do pełna (w sekundach)
- Pojemność nominalna baterii przy pełnym naładowaniu (w μAh)
Rysunek 3 przedstawia diagram UML klas przydatnych do implementacji interfejsu HAL dla opieki zdrowotnej:
Rysunek 3. Diagram UML Health HAL 2.1
Informacje o wdrażaniu usługi Health 2.1 znajdziesz w artykule Wdrażanie usługi Health 2.1.
Wersja interfejsu AIDL HAL 1
Ta sekcja zawiera informacje o interfejsie AIDL HAL w wersji 1.
Zmiany w interfejsie API
Interfejs AIDL w wersji 1 obsługuje podobne interfejsy API jak interfejs HIDL w wersji 2.1. W porównaniu z interfejsem HIDL 2.1 w interfejsie API wprowadzono następujące zmiany:
- Interfejsy API związane z ładowarką wprowadzone w HIDL HAL 2.1 nie są przenoszone do interfejsu AIDL HAL. Funkcja ładowania w trybie offline działa tylko na partycji
/vendor
, więc interfejsy API w interfejsie dostawcy nie są potrzebne. Aby prawidłowo stosować ładowanie w trybie wyłączenia, zapoznaj się z informacjami na temat ładowarki. - Typ
StorageAttribute
i powiązane z nim pola zostały usunięte, ponieważ nie są używane. - Do
HealthInfo
dodanochargerDockOnline
, aby umożliwić ładowanie na ładowarce.
Implementacja
Rysunek 4 przedstawia diagram UML klas przydatnych do implementacji interfejsu HAL AIDL dotyczącego zdrowia:
Rysunek 4. Schemat UML interfejsu HAL dla AIDL w Health
Informacje o wdrażaniu usługi AIDL dotyczącej zdrowia znajdziesz w artykule Wdrażanie interfejsu HAL AIDL dotyczącego zdrowia.
Odzyskiwanie
Android 13 obsługuje bindera w przywracaniu. Zainstalowanie usługi Health AIDL w trybie odzyskiwania umożliwia jej działanie w tym trybie.
Informacje o instalowaniu usługi AIDL dotyczącej zdrowia w trybie odzyskiwania znajdziesz w tych artykułach:
ładowarka.
Funkcja ładowania w trybie wyłączenia została przeniesiona z /system
do /vendor
. W przypadku urządzeń z Androidem 13, które obsługują ładowanie w trybie wyłączonym, binarny plik usługi HAL musi obsługiwać tryb ładowania. Aby to zrobić, zapoznaj się z wdrażaniem ładowarki.
Właściwości systemu ładowania
Właściwości ro.charger.*
nie są już czytelne dla binarnego pliku charger
w pliku /vendor
. Jeśli na urządzeniu ustawiono ro.charger.*
, zapoznaj się z właściwościami systemu dotyczącymi ładowarki.