Stan systemu Android

Android 9 zawiera android.hardware.health HAL 2.0, główną wersję uaktualnienia Health@1.0 HAL. Nowa HAL ma te zalety:

  • Lepsze oddzielenie ramy od kodu dostawcy.
  • Wycofuje zbędny demon healthd.
  • Większa swoboda dostosowywania raportów z informacjami o zdrowiu przez dostawców.
  • więcej informacji o stanie urządzenia niż tylko o baterii.

Android 11 zawiera android.hardware.health HAL 2.1, co jest drobną aktualizacją interfejsu HAL health@2.0. Nowa wersja HAL ma te zalety:

  • Łatwiejsza implementacja
  • Lepsze dopasowanie do istniejących interfejsów HAL 2.0
  • Lepsze oddzielenie Treble w kodzie ładowania w trybie offline
  • lepsza obsługa platformy, która wskazuje stan baterii urządzenia;

Android 13 zawiera interfejs android.hardware.health AIDL HAL, który jest konwersją interfejsu health@2.1 HAL. Nowa 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.

Wymagania

Urządzenia z Androidem 9 i 10

Urządzenia z Androidem 9 muszą mieć interfejs HAL 2.x (nie można używać interfejsu HAL 1.0) lub interfejs AIDL HAL. Urządzenia, które nie są uruchamiane z Androidem 9, ale planują zaktualizować obraz dostawcy do wersji 3 macierzy zgodności platformy docelowej (wydanej w Androidzie 9), muszą usunąć istniejące implementacje interfejsu HAL 1.0 i zastosować interfejs HAL 2.x lub interfejs HAL AIDL.

AOSP zawiera wiele bibliotek pomocniczych, które ułatwiają implementację interfejsu HAL 2.0 i przejście ze starego interfejsu HAL 1.0.

Urządzenia z Androidem 11 i Androidem 12

Urządzenia z Androidem 11 muszą mieć interfejs HAL 2.1 (nie można używać interfejsu HAL 1.0 ani 2.0) lub interfejs AIDL HAL. Urządzenia, które nie są jeszcze dostępne w Androidzie 11, ale mają zostać zaktualizowane do wersji 5 z tablicy zgodności z Target Framework (opublikowanej w Androidzie 11), muszą usunąć istniejące implementacje interfejsu HAL 2.0 i zastosować interfejs HAL 2.1 lub interfejs HAL AIDL. Zaleca się też, aby urządzenia, które nie uruchamiają Androida 11 i nie planują aktualizować obrazu dostawcy, zawierały HAL 2.1.

AOSP zawiera wiele bibliotek pomocniczych, które ułatwiają implementację interfejsu HAL 2.1 i przejście ze starego interfejsu HAL 1.0.

Urządzenia z Androidem 13 lub nowszym

Urządzenia wprowadzane na rynek z Androidem 13 muszą zawierać kod HAL AIDL (i nie mogą udostępniać HAL HIDL). Urządzenia, które nie są uruchamiane z Androidem 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. W przypadku urządzeń, które nie mają Androida 13 i nie planują aktualizować obrazu dostawcy, zalecamy również stosowanie wartości HAL AIDL.

Urządzenia nie mogą udostępniać interfejsu HIDL 1.0.

AOSP zawiera wiele bibliotek pomocniczych, które ułatwiają implementację interfejsu AIDL HAL i przejście ze starych interfejsów HIDL HAL.

Terminologia

  • health@1.0: skrót od android.hardware.health@1.0. Odnosi się do interfejsu HIDL HAL dla zdrowia w wersji 1.0, który został wydany w Androidzie 8.0.
  • health@2.0: skrót od android.hardware.health@2.0. Odnosi się do interfejsu HIDL HAL dla zdrowia w wersji 2.0, który został wydany w Androidzie 9.
  • health@2.1: skrót od android.hardware.health@2.1. Odnosi się do stanu HAL HIDL w wersji 2.1 wydanej w Androidzie 11.
  • health AIDL HAL: skrót od android.hardware.health.
    • Wersja 1 została wydana w Androidzie 13.
  • charger: plik wykonywalny działający w trybie ładowania w trybie wyłączenia, który wyświetla animację ładowania telefonu.
  • recovery: plik wykonywalny działający w trybie odzyskiwania, który musi pobrać informacje o baterii.
  • healthd: starszy demon działający w Androidzie, który pobiera informacje dotyczące zdrowia i przekazuje je do frameworku.
  • storaged: demon działający na Androidzie, który pobiera informacje o pamięci i przekazuje je do frameworku.

Zdrowie na Androidzie 8.x

W Androidzie 8.x komponent stanu działa zgodnie z diagramem poniżej:

Health na Androidzie 8.x

Rysunek 1 Health w Androidzie 8.x.

Na tym diagramie:

  • Do komunikacji z sprzętem framework używa 1 wywołania binder i 1 wywołania hwbinder.
  • healthd jest połączony statycznie z usługami libhealthd_android, libbatterymonitorlibbatteryservice.
  • health@1.0-impl zawiera linki statyczne do libhealthd.BOARD.

Każda płyta może mieć inny libhealthd.BOARD. W czasie kompilacji określa się, jakie wartości mają mieć charger, health@1.0-impl i recovery link.

W przypadku innych trybów:

Tryb ładowania i przywracania w Androidzie 8.x

Rysunek 2. Stan w Androidzie 8.x, ładowanie w trybie wyłączenia i tryb przywracania.

  • ładowarka jest statycznie połączona z libhealthd.BOARD, libhealthd_chargerlibbatterymonitor.
  • recovery jest statycznie powiązany z libhealthd.BOARDlibbatterymonitor.

Zdrowie w Androidzie 9

W Androidzie 9 komponent stanu zdrowia działa zgodnie z tym schematem:Zdrowie w Androidzie 9

Rysunek 3. Health w Androidzie 9.

Platforma próbuje pobrać usługę health@2.0 z hwservicemanager. Jeśli się nie uda, wywołuje health@1.0 (w Androidzie 8.x). Stary kod jest zachowany, aby obraz systemu Android 9 był zgodny z obrazem dostawcy Androida 8.x. Platforma nie pobiera informacji z obu list HAL, ponieważ na urządzeniu może istnieć tylko jedna wersja usługi (1.0 lub 2.0).