Состояние системы Android

В Android 13 включена версия HAL android.hardware.health AIDL, представляющая собой конверсию HAL health@2.1. Этот новый HAL обладает следующими преимуществами:

  • Удалить неиспользуемые API, связанные с зарядным устройством
  • Удалить неиспользуемый StorageAttribute и связанные с ним поля.
  • Поддержка док-станции для зарядки.

В Android 11 включена версия HAL 2.1 от android.hardware.health , представляющая собой небольшое обновление версии HAL health@2.0. Эта новая версия HAL обладает следующими преимуществами:

  • Более четкое разделение между фреймворком и кодом поставщика.
  • Большая степень свободы для настройки поставщиков в отчетах о медицинской информации.
  • Больше информации о состоянии устройства, чем просто о батарее.

Документация по внедрению Health 2.1 HAL представлена ​​на этой странице в качестве справочной информации.

Требования

В этом разделе содержатся требования для Android 11, 12 и 13 или выше.

Устройства под управлением Android 11 и Android 12

Устройства, выпускаемые с Android 11 и 12, должны предоставлять HAL 2.1 или AIDL HAL. Устройства, выпускаемые без Android 11 или 12, но планирующие обновить образ поставщика до версии Target Framework Compatibility Matrix 5 (выпущенной в Android 11) или 6 (выпущенной в Android 12), должны удалить существующие реализации HAL 2.0 и предоставить HAL 2.1 или AIDL HAL. Устройствам, выпускаемым без Android 11 и не планирующим обновлять образ поставщика, также рекомендуется предоставить HAL 2.1 или AIDL.

AOSP включает в себя несколько вспомогательных библиотек, призванных помочь вам реализовать HAL 2.1 и перейти со старых HIDL HAL.

Устройства под управлением Android 13 и выше

Устройства, запускаемые с Android 13, должны предоставлять AIDL HAL (и не должны предоставлять HIDL HAL). Устройства, не запускаемые с Android 13, но планирующие обновить образ поставщика до версии 7 Target Framework Compatibility Matrix (выпущенной в Android 13), должны удалить существующие реализации HIDL HAL и предоставить AIDL HAL. Устройствам, не запускаемым с Android 13 и не планирующим обновлять образ поставщика, также рекомендуется предоставить AIDL HAL.

AOSP включает в себя несколько вспомогательных библиотек, призванных помочь вам реализовать AIDL HAL и перейти от старых HIDL HAL.

Терминология

Ниже приведены термины, которые следует знать перед прочтением остальной части документации по работоспособности системы Android:

здоровье@2.1
Аббревиатура android.hardware.health@2.1 . Версия 1 HIDL-интерфейса для здоровья была выпущена в Android 11.
здоровье AIDL HAL
Сокращение от android.hardware.health . Версия 1 AIDL HAL для здоровья была выпущена в Android 13.
зарядное устройство
Исполняемый файл, работающий в режиме выключенной зарядки, который отображает анимацию зарядки телефона.
восстановление
Исполняемый файл, работающий в режиме восстановления, который должен получить информацию о батарее.
хранится
Демон, который извлекает информацию из хранилища и предоставляет ее фреймворку.

Здоровье в Android 11 и 12

В Android 11 и 12 компонент здоровья работает так, как показано на следующей схеме:

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

Для других режимов:

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

См. следующую упрощенную диаграмму для различных режимов:

Инфраструктура здравоохранения HIDL HAL 2.1

Рисунок 1. Инфраструктура здравоохранения HIDL HAL 2.1.

Здоровье в Android 13

В Android 13 представлен компонент Health AIDL HAL. На рисунке 2 показано, как работает компонент Health:

Инфраструктура здравоохранения AIDL HAL

Рисунок 2. Инфраструктура Health AIDL HAL.

Интерфейс HIDL HAL 2.1

Health@2.1 HAL поддерживает зарядку в выключенном режиме и предоставляет больше информации об аккумуляторе.

Основной интерфейс IHealth предоставляет следующие дополнительные функции:

  • getHealthConfig : для получения конфигурации этого HAL
  • getHealthInfo_2_1 : небольшое обновление версии до getHealthInfo
  • shouldKeepScreenOn : чтобы определить, следует ли оставлять экран включенным в режиме зарядки

Кроме того, реализация @2.1::IHealth необходима для поддержки @2.1::IHealthInfoCallback для его унаследованных функций registerCallback и unregisterCallback . Новый интерфейс обратного вызова возвращает клиенту информацию о состоянии здоровья, используя свою функцию healthInfoChanged_2_1 вместо унаследованной функции healthInfoChanged .

Новая структура @2.1::HealthInfo возвращается с помощью обратных вызовов и getHealthInfo_2_1 . Эта структура содержит дополнительную информацию о состоянии устройства, доступную через health@2.0 HAL, включая:

  • Уровень емкости аккумулятора
  • Время полной зарядки аккумулятора (в секундах)
  • Расчетная емкость полного заряда аккумулятора (в мкАч)

На рисунке 3 показана UML-диаграмма классов, полезных для реализации HAL-системы здравоохранения:

Health 2.1 HAL UML-диаграмма

Рисунок 3. UML-диаграмма Health HAL 2.1.

Информацию о внедрении услуги «Здоровье 2.1» см. в разделе «Внедрение службы «Здоровье 2.1» .

Интерфейс AIDL HAL версии 1

В этом разделе содержится информация об интерфейсе AIDL HAL версии 1.

Изменения API

Интерфейс HAL AIDL версии 1 поддерживает API, аналогичные интерфейсу HAL HIDL 2.1. По сравнению с интерфейсом HIDL 2.1 в API внесены следующие изменения:

  • API для зарядных устройств, представленные в HIDL HAL 2.1, не перенесены в AIDL HAL. Поскольку функциональность зарядки в режиме «вне режима» реализована только в разделе /vendor , API в интерфейсе Vendor не требуются. Чтобы правильно реализовать зарядку в режиме «вне режима», см. раздел charger .
  • Тип StorageAttribute и связанные с ним поля удалены, поскольку они не используются.
  • chargerDockOnline добавлен в HealthInfo для поддержки зарядки через док-станцию.

Выполнение

На рисунке 4 показана UML-диаграмма классов, полезных для реализации AIDL HAL в системе здравоохранения:

Диаграмма UML Health AIDL HAL

Рисунок 4. Диаграмма UML Health AIDL HAL.

Информацию о внедрении службы AIDL в сфере здравоохранения см. в разделе Внедрение службы AIDL в сфере здравоохранения HAL .

Восстановление

Android 13 поддерживает функцию Binder в режиме восстановления. Установка службы Health AIDL в режим восстановления позволяет ей работать в режиме восстановления.

Информацию об установке службы AIDL для восстановления работоспособности см. в следующем разделе:

Зарядное устройство

Функциональность зарядки в режиме «off-mode» перенесена из /system в каталог /vendor . Для устройств с Android 13, поддерживающих зарядку в режиме «off-mode», двоичный файл службы HAL должен поддерживать режим зарядки. Подробнее см. в разделе «Реализация зарядного устройства» .

Свойства системы зарядного устройства

Свойства ro.charger.* больше не читаются двоичным файлом charger в /vendor . Если на вашем устройстве установлены какие-либо системные свойства ro.charger.* , обратитесь к системным свойствам charger .