Stan systemu Android

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:

Infrastruktura Health HIDL HAL 2.1

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:

Infrastruktura warstwy HAL AIDL funkcji dotyczących 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 wersji getHealthInfo
  • 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:

Diagram UML warstwy HAL funkcji dotyczących zdrowia w wersji 2.1

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 dodano chargerDockOnline, aby umożliwić ładowanie w stacji dokującej.

Implementacja

Rysunek 4 przedstawia diagram UML klas przydatnych w implementacji interfejsu AIDL HAL usługi zdrowia:

Diagram UML warstwy HAL AIDL funkcji dotyczących 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/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.