В 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) ] |
+-------------------------------------+
См. следующую упрощенную диаграмму для различных режимов:
Рисунок 1. Инфраструктура здравоохранения HIDL HAL 2.1.
Здоровье в Android 13
В Android 13 представлен компонент Health AIDL HAL. На рисунке 2 показано, как работает компонент Health:
Рисунок 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-системы здравоохранения:
Рисунок 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 в системе здравоохранения:
Рисунок 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 .