Android 9 bao gồm android.hardware.health
HAL 2.0, một phiên bản nâng cấp chính từ health@1.0 HAL. HAL mới này có những ưu điểm sau:
- Phân tách rõ ràng hơn giữa khung và mã nhà cung cấp.
- Không chấp nhận trình nền
healthd
không cần thiết. - Nhiều mức độ tự do hơn để tùy chỉnh nhà cung cấp trong các báo cáo thông tin sức khỏe.
- Nhiều thông tin về tình trạng của thiết bị hơn chỉ là pin.
Android 11 bao gồm android.hardware.health
HAL 2.1, một phiên bản nâng cấp nhỏ từ health@2.0 HAL. HAL mới này có những ưu điểm sau:
- Dễ thực hiện hơn
- Tuân thủ tốt hơn với các API 2.0 HAL hiện có
- Tách tiếng Treble tốt hơn trong mã sạc ngoài chế độ
- Hỗ trợ tốt hơn cho khung cho biết tình trạng pin của thiết bị
Yêu cầu
Các thiết bị khởi chạy với Android 9 phải cung cấp 2.0 HAL (và không được cung cấp 1.0 HAL). Các thiết bị không khởi chạy với Android 9 nhưng dự định cập nhật hình ảnh nhà cung cấp lên Ma trận tương thích khung mục tiêu Phiên bản 3 (được phát hành trong Android 9) phải xóa các triển khai 1.0 HAL hiện có và cung cấp 2.0 HAL.
Các thiết bị khởi chạy với Android 11 phải cung cấp 2.1 HAL (và không được cung cấp 1.0 hoặc 2.0 HAL). Các thiết bị không khởi chạy với Android 11 nhưng dự định cập nhật hình ảnh nhà cung cấp lên Ma trận tương thích khung mục tiêu Phiên bản 5 (được phát hành trong Android 11) phải xóa các triển khai 2.0 HAL hiện có và cung cấp 2.1 HAL. Các thiết bị không chạy Android 11 và không có kế hoạch cập nhật hình ảnh nhà cung cấp cũng được khuyến nghị cung cấp 2.1 HAL.
AOSP bao gồm nhiều thư viện trợ giúp được thiết kế để giúp bạn triển khai 2.1 HAL và quá trình chuyển đổi từ 1.0 HAL cũ.
Thuật ngữ
- health@1.0 : chữ viết tắt của
android.hardware.health@1.0
. Đề cập đến tình trạng HIDL HAL phiên bản 1.0 được phát hành trong Android 8.0. - health@2.0 : chữ viết tắt của
android.hardware.health@2.0
. Đề cập đến tình trạng HIDL HAL phiên bản 2.0 được phát hành trong Android 9. - health@2.1 : chữ viết tắt của
android.hardware.health@2.1
. Đề cập đến tình trạng HIDL HAL phiên bản 2.1 được phát hành trong Android 11. - bộ sạc : thực thi đang chạy ở chế độ sạc tắt hiển thị hình ảnh động sạc điện thoại.
- recovery : thực thi đang chạy ở chế độ khôi phục phải lấy thông tin về pin.
- healthd : daemon kế thừa chạy trong Android lấy thông tin liên quan đến sức khỏe và cung cấp cho khung.
- storaged : daemon chạy trong Android lấy thông tin lưu trữ và cung cấp cho framework.
Sức khỏe trong Android 8.x
Trong Android 8.x, thành phần sức khỏe hoạt động như chi tiết trong sơ đồ sau:
Hình 1 . Sức khỏe trong Android 8.x
Trong sơ đồ này:
- Một (1) cuộc gọi liên kết và một (1) cuộc gọi hwbinder được sử dụng bởi khuôn khổ để giao tiếp với phần cứng.
-
healthd
liên kết tĩnh tớilibhealthd_android
,libbatterymonitor
vàlibbatteryservice
. - health@1.0-impl liên kết tĩnh đến
libhealthd. BOARD
.
Mỗi bảng có thể tùy chỉnh một libhealthd. BOARD
khác nhau libhealthd. BOARD
; nó được xác định tại thời điểm xây dựng liên kết tới bộ sạc, health@1.0-impl và khôi phục.
Đối với các chế độ khác:
Hình 2. Tình trạng trong Android 8.x, chế độ khôi phục và sạc tắt
- bộ sạc liên kết tĩnh với
libhealthd. BOARD
,libhealthd_charger
vàlibbatterymonitor
. - phục hồi liên kết tĩnh đến
libhealthd. BOARD
vàlibbatterymonitor
.
Sức khỏe trong Android 9
Trong Android 9, thành phần sức khỏe hoạt động như chi tiết trong sơ đồ sau:
Hình 3 . Sức khỏe trong Android 9
Khuôn khổ cố gắng truy xuất dịch vụ hwservicemanager
từ hwservicemanager
. Nếu không thành công, nó sẽ gọi vào health@1.0 (trong Android 8.x). Đường dẫn mã kế thừa được giữ lại để hình ảnh hệ thống Android 9 tương thích với hình ảnh nhà cung cấp Android 8.x. Khuôn khổ không truy xuất thông tin từ cả hai HAL vì chỉ có một phiên bản dịch vụ (1.0 hoặc 2.0) có thể tồn tại trên thiết bị.
Đối với các chế độ khác:
Hình 4. Tình trạng trong Android 9, chế độ khôi phục và sạc tắt chế độ
Sức khỏe trong Android 11
Trong Android 11, thành phần sức khỏe hoạt động như chi tiết trong sơ đồ sau:
[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) ] |
+-------------------------------------+
Nếu triển khai tình trạng 2.1 không tồn tại, hệ thống sẽ quay trở lại đường dẫn mã kế thừa như được mô tả trong các phần trước
Đối với các chế độ khác:
[ 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) ] |
+-------------------------------------+
Giao diện HAL 2.0
Health@2.0 HAL cung cấp chức năng tương tự cho khuôn khổ như daemon healthd cũ. Nó cũng cung cấp các API tương tự như những gì mà healthd đã cung cấp trước đây dưới dạng dịch vụ kết dính (tức là IBatteryPropertiesRegistrar ).
Giao diện chính, IHealth , cung cấp các chức năng sau:
-
registerCallback
, để thay thếIBatteryPropertiesRegistrar.registerListener
-
unregisterCallback
IBatteryPropertiesRegistrar.unregisterListener
, để thay thếIBatteryPropertiesRegistrar.unregisterListener
-
update
, để thay thếIBatteryPropertiesRegistrar.scheduleUpdate
-
IBatteryPropertiesRegistrar.getProperties
được thay thế bằng như sau:-
getChargeCounter
-
getCurrentNow
-
getCurrentAverage
-
getCapacity
-
getEnergyCounter
-
getChargeStatus
-
getHealthInfo
-
Bên cạnh đó, IHealth
cung cấp các API mới sau cho storaged
để lấy thông tin liên quan lưu trữ nhà cung cấp cụ thể:
-
getStorageInfo
-
getDiskStats
Một cấu trúc mới, @2.0::HealthInfo
, được trả về thông qua callbacks và getHealthInfo
. Cấu trúc này chứa tất cả thông tin về tình trạng của thiết bị có sẵn qua health@2.0 HAL, bao gồm:
- Thông tin sạc (AC / USB / không dây, dòng điện, điện áp, v.v.)
- Thông tin về pin (sự hiện diện, mức pin, dòng điện, điện áp, mức sạc, công nghệ, v.v.)
- Thông tin lưu trữ (thông tin thiết bị lưu trữ, thống kê đĩa)
Giao diện HAL 2.1
Health@2.1 HAL hỗ trợ sạc ở chế độ tắt và cung cấp thêm thông tin về pin.
Giao diện chính, IHealth , cung cấp các chức năng bổ sung sau
-
getHealthConfig
: để truy xuất cấu hình của HAL này -
getHealthInfo_2_1
: nâng cấp phiên bản nhỏ chogetHealthInfo
-
shouldKeepScreenOn
: để xác định xem có nên để màn hình ở chế độ sạc không
Ngoài ra, việc triển khai @2.1::IHealth
được yêu cầu hỗ trợ @2.1::IHealthInfoCallback
cho các hàm registerCallback
và unregisterCallback
kế thừa của nó. Giao diện gọi lại mới trả về thông tin tình trạng sức khỏe cho ứng dụng khách bằng cách sử dụng hàm healthInfoChanged_2_1
thay vì hàm healthInfoChanged
kế thừa.
Một cấu trúc mới, @2.1::HealthInfo
, được trả về thông qua callbacks và getHealthInfo_2_1
. Cấu trúc này chứa thông tin bổ sung về tình trạng của thiết bị có sẵn qua health@2.0 HAL, bao gồm:
- Mức dung lượng pin
- Thời gian sạc đầy pin ngay bây giờ (tính bằng giây)
- Dung lượng thiết kế sạc đầy pin (tính bằng μAh)
Để biết thông tin về việc triển khai dịch vụ Y tế, hãy xem Thực hiện Y tế .