Параграф 5: Динамічно доступні HAL
INFO
HAL (скорочення від Hardware Abstraction Layer) - програмний прошарок, що реалізує для системи абстрактний узагальнений інтерфейс, який дає змогу їй спілкуватися з драйвером пристрою, не заглиблюючись в особливості його реалізації.
Також називається шаром апаратних абстракцій і іноді, помилково, драйвером.
Звичайні, реалізовані у вигляді HIDL-сервісів абстракції Android запускає під час завантаження системи, реєструє їх і спілкується з ними через Binder IPC (hwbinder). *Такі HAL залишаються запущеними протягом усього часу роботи системи, навіть коли необхідності в них немає.
Динамічно доступні HAL реєструються в hwservicemanager як lazy ("ледачі") сервіси і запускаються системою, тільки коли в них з'являються клієнти - додатки або служби, що використовують апаратний компонент, який реалізується таким HAL.
Приміром, WiFi і Bluetooth HAL можуть завантажуватися, коли користувач вмикає відповідну функцію в меню телефона, а під час вимкнення вони вивантажуватимуться, звільняючи ресурси системи. Camera HAL може завантажуватися, коли користувач відкриває застосунок Камера і завершувати свою роботу після його закриття.
Така можливість особливо вигідна для Android Go, де ресурси максимально обмежені.
Нижче наведено основний перелік HAL, які можна легко перетворити на динамічні.
Відповідні не-lazy записи мають бути замінені в device.mk:
PRODUCT_PACKAGES += \
android.hardware.wifi@1.0-service-lazy \
android.hardware.cas@1.2-service-lazy \
android.hardware.drm@1.0-service-lazy \
android.hardware.drm@1.3-service-lazy.clearkey
ВАЖЛИВО:
Версію HAL (після символу @) наведено для прикладу, її слід залишити незмінною.
Камера
Щоб перетворити цей HAL на динамічний, потрібні такі зміни в device.mk:
PRODUCT_PACKAGES += android.hardware.camera.provider@2.4-service-lazy
PRODUCT_PROPERTY_OVERRIDES += ro.camera.enableLazyHal=true
Застарілі HAL (Camera HAL1) у динамічному режимі можуть працювати некоректно в режимі ліхтарика (плитка в швидких налаштуваннях).
Інші компоненти
У прошивках деяких Android Go пристроїв (наприклад, Nokia 1 Plus) можна знайти динамічний Widevine DRM HAL (android.hardware.drm@1.3-service-lazy.widevine).
Для Qualcomm-пристроїв з бездротовим модулем prima (msm8916/8917/8937, Snapdragon 410, 420, 425, 435, 439, QM215) є блоки Qti Bluetooth HAL (android.hardware.bluetooth@1.0-service-qti-lazy), які можна знайти в прошивках для Nokia 1.3.
Під час додавання цього компонента потрібно додати в device.mk таке:
PRODUCT_PROPERTY_OVERRIDES += ro.vendor.bluetooth.lazyhal=true