В Android 13 включен HAL-модуль android.hardware.health AIDL, преобразованный из HAL-модуля health@2.1. Новый HAL имеет следующие преимущества:
- Удаление неиспользуемых API, связанных с зарядным устройством
- Удалите неиспользуемое поле
StorageAttributeи связанные с ним поля - Поддержка зарядки через док-станцию.
Android 11 включает HAL android.hardware.health 2.1, промежуточную версию HAL health@2.0. Новый HAL имеет следующие преимущества:
- Более четкое разделение между фреймворком и кодом поставщика.
- Больше возможностей для настройки отчетов о состоянии здоровья.
- Больше информации о состоянии устройства, чем только о батарее.
На этой странице приведена документация по реализации HAL версии 2.1.
Требования
В этом разделе приведены требования для Android 11, 12 и 13 или более поздних версий.
Устройства с Android 11 и Android 12
Устройства с Android 11 и 12 должны поддерживать HAL версии 2.1 или HAL AIDL. Если вы планируете обновить образ поставщика на устройствах, которые не были выпущены с Android 11 или 12, до версии 5 (выпущена в Android 11) или 6 (выпущена в Android 12) матрицы совместимости целевой платформы, вам необходимо удалить существующие реализации HAL 2.0 и предоставить HAL 2.1 или HAL AIDL. Устройства, которые не запускаются с Android 11 и не планируют обновлять образ поставщика, также рекомендуется предоставлять HAL 2.1 или AIDL.
AOSP включает несколько вспомогательных библиотек, которые помогут вам реализовать HAL 2.1 и перейти с устаревших HAL HIDL.
Устройства с Android 13 и более поздними версиями ОС
Устройства, на которых установлена ОС Android 13, должны поддерживать HAL на основе AIDL (и не должны поддерживать HAL на основе HIDL). Если на устройстве не установлена ОС Android 13, но вы планируете обновить образ поставщика до целевой версии 7 матрицы совместимости фреймворка (выпущена в Android 13), необходимо удалить существующие реализации HIDL HAL и предоставить AIDL HAL. Устройства, которые не запускаются с Android 13 и не планируют обновлять образ поставщика, также рекомендуется предоставлять AIDL HAL.
В AOSP есть несколько вспомогательных библиотек, которые помогут вам реализовать AIDL HAL и перейти со старых HIDL HAL.
Терминология
Ниже приведены термины, которые вам нужно знать, прежде чем читать остальную документацию по системному здоровью Android:
- health@2.1
- Сокращение от
android.hardware.health@2.1. Версия 1 интерфейса HIDL для здоровья была выпущена в Android 11. - health AIDL HAL
- Сокращение от
android.hardware.health. Версия 1 health AIDL HAL была выпущена в Android 13. - зарядное устройство
- Исполняемый файл, который запускается при зарядке в выключенном состоянии и показывает анимацию зарядки.
- восстановление
- Исполняемый файл, запущенный в режиме восстановления, должен получить информацию о батарее.
- storaged
- Демон, который получает информацию о хранилище и предоставляет ее фреймворку.
Google Health в 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. Инфраструктура Health HIDL HAL 2.1.
Функции для здоровья в Android 13
В Android 13 представлен HAL AIDL для здоровья. На рисунке 2 показано, как работает компонент "Здоровье".
Рисунок 2. Инфраструктура Health AIDL HAL.
Интерфейс HIDL HAL 2.1
HAL health@2.1 поддерживает зарядку в выключенном состоянии и предоставляет больше информации об аккумуляторе.
Основной интерфейс,IHealth, предоставляет следующие дополнительные функции:
getHealthConfig– для получения конфигурации этого HAL.getHealthInfo_2_1– обновление до промежуточной версииgetHealthInfo.shouldKeepScreenOn– определяет, должен ли экран оставаться включенным в режиме зарядки.
Кроме того, для поддержки @2.1::IHealthInfoCallback с его унаследованными функциями registerCallback и unregisterCallback требуется реализовать @2.1::IHealth. Новый интерфейс обратного вызова возвращает клиенту информацию о состоянии с помощью функции healthInfoChanged_2_1, а не унаследованной функции healthInfoChanged.
Новая структура @2.1::HealthInfo возвращается с помощью обратных вызовов и getHealthInfo_2_1. Эта структура содержит дополнительную информацию о состоянии устройства, доступную через HAL health@2.0, в том числе:
- Уровень заряда батареи
- Время до полной зарядки батареи (в секундах)
- Расчетная емкость батареи при полной зарядке (в мкАч)
На рисунке 3 показана UML-диаграмма классов, полезных для реализации HAL состояния.
Рисунок 3. Диаграмма UML для Health HAL 2.1.
Информацию о реализации сервиса Health 2.1 можно найти в статье Реализация Health 2.1.
Интерфейс AIDL HAL версии 1
В этом разделе приведена информация об интерфейсе HAL AIDL версии 1.
Изменения в API
HAL AIDL версии 1 поддерживает API, аналогичные HAL HIDL 2.1. По сравнению с интерфейсом HIDL 2.1 в API изменилось следующее:
- API, связанные с зарядным устройством, представленные в HIDL HAL 2.1, не переносятся в AIDL.
HAL. Поскольку функция зарядки в выключенном состоянии находится только в разделе
/vendor, API в интерфейсе поставщика не требуются. Чтобы правильно реализовать зарядку в выключенном режиме, ознакомьтесь с информацией о зарядном устройстве. - Тип
StorageAttributeи связанные с ним поля удалены, так как они не используются. chargerDockOnlineдобавлено вHealthInfoдля поддержки зарядки док-станции.
Реализация
На рисунке 4 показана диаграмма UML классов, полезных для реализации HAL AIDL для здоровья:
Рисунок 4. Диаграмма UML для HAL AIDL Health.
Информацию о том, как реализовать сервис AIDL для здоровья, можно найти в статье Реализация HAL AIDL для здоровья.
Восстановление
В Android 13 поддерживается binder в режиме восстановления. Установка сервиса Health AIDL в раздел recovery позволяет ему работать в режиме восстановления.
Информацию об установке сервиса AIDL для восстановления можно найти в следующих статьях:
Зарядное устройство
Функция зарядки в выключенном режиме перенесена из /system в /vendor. Если устройство с Android 13 поддерживает зарядку в выключенном состоянии, двоичный файл службы HAL должен поддерживать режим зарядного устройства. Чтобы сделать это, ознакомьтесь с информацией о том, как реализовать зарядное устройство.
Системные свойства зарядного устройства
Свойства ro.charger.* больше не могут быть прочитаны двоичным файлом charger в /vendor. Если на устройстве заданы какие-либо ro.charger.* системные свойства, ознакомьтесь с системными свойствами для зарядного устройства.