Zdrowie Androida

Android 9 zawiera android.hardware.health HAL 2.0, ważne uaktualnienie wersji z health@1.0 HAL. Ten nowy HAL ma następujące zalety:

  • Czystsza separacja między frameworkiem a kodem dostawcy.
  • Deprecates niepotrzebnego healthd demona.
  • Większe stopnie swobody dostosowywania dostawcy w raportach dotyczących informacji o stanie zdrowia.
  • Więcej informacji o stanie urządzenia niż tylko bateria.

Android 11 zawiera android.hardware.health HAL 2.1, uaktualnienie wersji moll z health@2.0 HAL. Ten nowy HAL ma następujące zalety:

  • Łatwiejsze do wdrożenia
  • Lepsza zgodność z istniejącymi interfejsami API HAL 2.0
  • Lepsza separacja tonów wysokich w kodzie ładowania w trybie wyłączenia
  • Lepsze wsparcie dla struktury wskazującej stan baterii urządzenia

Wymagania

Urządzenia uruchamiane z systemem Android 9 muszą zapewniać 2,0 HAL (i nie mogą zapewniać 1,0 HAL). Urządzenia, które nie są uruchamiane z systemem Android 9, ale planują aktualizację obrazu dostawcy do wersji Target Framework Compatibility Matrix w wersji 3 (wydanej w systemie Android 9) muszą usunąć istniejące implementacje 1.0 HAL i zapewnić 2.0 HAL.

Urządzenia uruchamiane z systemem Android 11 muszą zapewniać warstwę HAL 2,1 (i nie mogą zapewniać warstwy HAL 1,0 ani 2,0). Urządzenia, które nie są uruchamiane z systemem Android 11, ale planują aktualizację obrazu dostawcy do wersji 5 macierzy zgodności platformy docelowej (wydanej w systemie Android 11), muszą usunąć istniejące implementacje HAL 2,0 i zapewnić warstwę HAL 2,1. Urządzenia, które nie uruchamiają się z systemem Android 11 i nie planują aktualizacji obrazu dostawcy, są również zalecane w celu zapewnienia warstwy HAL 2.1.

AOSP zawiera wiele bibliotek pomocniczych zaprojektowanych, aby pomóc w implementacji warstwy HAL 2.1 i przejściu ze starej warstwy 1.0 HAL.

Terminologia

  • health@1.0: skrót od android.hardware.health@1.0 . Odnosi się do zdrowia HIDL HAL w wersji 1.0 wydanej w systemie Android 8.0.
  • health@2.0: skrót od android.hardware.health@2.0 . Odnosi się do zdrowia HIDL HAL w wersji 2.0 wydanej w systemie Android 9.
  • health@2.1: skrót od android.hardware.health@2.1 . Odnosi się do zdrowia HIDL HAL w wersji 2.1 wydanej w systemie Android 11.
  • Ładowarka: Uruchomienie pliku wykonywalnego w trybie wyłączenia ładowania, który wyświetla animację ładowania telefonu.
  • odzysku: wykonywalnego uruchomiony w trybie awaryjnym, które muszą pobierać informacje baterii.
  • healthd: Legacy demon działa w Androidzie, który pobiera informacji związanych ze zdrowiem i dostarcza go do ramy.
  • składowane: demon działa w Androidzie, że informacje przechowywania pobiera i dostarcza go do ramy.

Zdrowie w Androidzie 8.x

W systemie Android 8.x składnik Health działa zgodnie z poniższym diagramem:

Zdrowie w Androidzie 8.x

Figura 1. Zdrowie w Androidzie 8.x

Na tym schemacie:

  • Jedno (1) wywołanie bindera i jedno (1) wywołanie hwbinder są używane przez platformę do komunikacji ze sprzętem.
  • healthd statycznie linki do libhealthd_android , libbatterymonitor i libbatteryservice .
  • health@1.0-impl statycznie linki do libhealthd. BOARD .

Każda płyta może dostosować inną libhealthd. BOARD ; w czasie kompilacji jest określane, z czym łączy się ładowarka, zdrowie@1.0-impl i odzyskiwanie.

Dla innych trybów:

Tryb ładowania i odzyskiwania w trybie wyłączenia w systemie Android 8.x

Figura 2. zdrowia Android 8.x, przy trybie ładowania i trybie odzyskiwania

  • Ładowarka statycznie linki do libhealthd. BOARD , libhealthd_charger i libbatterymonitor .
  • odzysk statycznie linki do libhealthd. BOARD i libbatterymonitor .

Zdrowie w Androidzie 9

W systemie Android 9 składnik Health działa zgodnie z poniższym diagramem: Zdrowie w Androidzie 9

Figura 3. Zdrowie w Androidzie 9

Próby ramowe pobrać usługę health@2.0 z hwservicemanager . Jeśli się nie powiedzie, wywołuje health@1.0 (w Androidzie 8.x). Starsza ścieżka kodu jest zachowywana, więc obraz systemu Android 9 jest zgodny z obrazem dostawcy systemu Android 8.x. Struktura nie pobiera informacji z obu warstw HAL, ponieważ na urządzeniu może istnieć tylko jedna wersja usługi (1.0 lub 2.0).

Dla innych trybów:

Ładowanie i odzyskiwanie w trybie wyłączenia w systemie Android 9

Tryb odzyskiwania figura 4. zdrowie Android 9, przy trybie ładowania i

Zdrowie w Androidzie 11

W systemie Android 11 składnik Health działa zgodnie z poniższym diagramem:

[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)      ] |
+-------------------------------------+

Jeśli implementacja Health 2.1 nie istnieje, system powraca do starszej ścieżki kodu, jak opisano w poprzednich sekcjach

Dla 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)      ] |
+-------------------------------------+

Interfejs HAL 2.0

HAL health@2.0 zapewnia tę samą funkcjonalność frameworka, co stary demon w dobrej kondycji. Zapewnia również interfejsów API, które są podobne do tego, co healthd poprzednio dostarczane jako usługa spoiwa (tj IBatteryPropertiesRegistrar ).

Główny interfejs, IHealth udostępnia następujące funkcje:

  • registerCallback , aby zastąpić IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , aby zastąpić IBatteryPropertiesRegistrar.unregisterListener
  • update , aby zastąpić IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties otrzymują brzmienie:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Ponadto IHealth oferuje następujące nowe API dla storaged do pobierania informacji dotyczących specyficznych sprzedawca przechowywania:

  • getStorageInfo
  • getDiskStats

Nowa struktura, @2.0::HealthInfo , zwracana jest za pośrednictwem wywołania zwrotne i getHealthInfo . Ta struktura zawiera wszystkie informacje o kondycji urządzenia dostępne za pośrednictwem health@2.0 HAL, w tym:

  • Informacje o ładowaniu (AC/USB/bezprzewodowe, prąd, napięcie itp.)
  • Informacje o baterii (obecność, poziom baterii, prąd, napięcie, ładunek, technologia itp.)
  • Informacje o pamięci (informacje o urządzeniu pamięci masowej, statystyki dysku)

Interfejs HAL 2.1

Health@2.1 HAL obsługuje ładowanie w trybie wyłączenia i dostarcza więcej informacji o baterii.

Główny interfejs, IHealth udostępnia następujące dodatkowe funkcje

  • getHealthConfig : aby pobrać konfigurację tego HAL
  • getHealthInfo_2_1 : upgrade do wersji moll getHealthInfo
  • shouldKeepScreenOn : ustalenie, czy ekran powinien być w trybie ładowania

Ponadto, realizacja @2.1::IHealth wymagane jest wsparcie @2.1::IHealthInfoCallback dla swoich dziedzicznych registerCallback i unregisterCallback funkcji. Nowy interfejs wraca informacja zwrotna zdrowie do klienta za pomocą jego healthInfoChanged_2_1 funkcję zamiast dziedziczonej healthInfoChanged funkcji.

Nowa struktura, @2.1::HealthInfo , zwracana jest za pośrednictwem wywołania zwrotne i getHealthInfo_2_1 . Ta struktura zawiera dodatkowe informacje o kondycji urządzenia dostępne za pośrednictwem Health@2.0 HAL, w tym:

  • Poziom naładowania baterii
  • Czas ładowania akumulatora do pełnego teraz (w sekundach)
  • Pojemność projektowa pełnego naładowania akumulatora (w μAh)

Informacje na temat wdrażania służby zdrowia, zobacz wykonawcze Zdrowie .