Stan systemu Android

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:

Infrastruktura Health HIDL HAL 2.1

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:

Infrastruktura Health AIDL HAL

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 wersji getHealthInfo
  • 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 registerCallbackunregisterCallback. 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:

Schemat UML HAL Health 2.1

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 dodano chargerDockOnline, aby umożliwić ładowanie na ładowarce.

Implementacja

Rysunek 4 przedstawia diagram UML klas przydatnych do implementacji interfejsu HAL AIDL dotyczącego zdrowia:

Schemat Health AIDL HAL UML

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.