Android 9 có android.hardware.health
HAL 2.0, một bản nâng cấp phiên bản lớn từ Health@1.0 HAL. HAL mới này có các ưu điểm sau:
- Phân tách rõ ràng hơn giữa khung và mã của nhà cung cấp.
- Ngừng sử dụng trình nền
healthd
không cần thiết. - Mức độ tự do cao hơn để nhà cung cấp tuỳ chỉnh trong báo cáo thông tin y tế.
- Thông tin khác về tình trạng thiết bị ngoài pin.
Android 11 bao gồm android.hardware.health
HAL 2.1, một bản nâng cấp phiên bản nhỏ từ health@2.0 HAL. HAL mới này có các ưu điểm sau:
- Dễ triển khai hơn
- Tuân thủ tốt hơn các API HAL 2.0 hiện có
- Tách Treble hiệu quả hơn trong mã sạc ở chế độ tắt
- Hỗ trợ tốt hơn cho khung để cho biết tình trạng pin của thiết bị
Android 13 bao gồm android.hardware.health
AIDL HAL, một lượt chuyển đổi từ health@2.1 HAL. HAL mới này có các ưu điểm sau:
- Xoá các API liên quan đến bộ sạc không dùng đến
- Xoá
StorageAttribute
không dùng đến và các trường liên quan - Hỗ trợ sạc đế.
Yêu cầu
Thiết bị chạy Android 9 và Android 10
Các thiết bị chạy Android 9 phải cung cấp HAL 2.x (và không được cung cấp HAL 1.0) hoặc HAL AIDL. Các thiết bị không chạy Android 9 nhưng có kế hoạch cập nhật hình ảnh nhà cung cấp lên Target Framework Compatibility Matrix Version 3 (phát hành trong Android 9) phải xoá các phương thức triển khai HAL 1.0 hiện có và cung cấp HAL 2.x hoặc AIDL HAL.
AOSP bao gồm nhiều thư viện trợ giúp được thiết kế để giúp bạn triển khai HAL 2.0 và chuyển đổi từ HAL 1.0 cũ.
Thiết bị chạy Android 11 và Android 12
Các thiết bị chạy Android 11 phải cung cấp HAL 2.1 (và không được cung cấp HAL 1.0 hoặc 2.0) hoặc AIDL HAL. Các thiết bị không chạy Android 11 nhưng dự định cập nhật hình ảnh nhà cung cấp lên Matrice Khả năng tương thích khung mục tiêu Phiên bản 5 (phát hành trong Android 11) phải xoá các phương thức triển khai HAL 2.0 hiện có và cung cấp HAL 2.1 hoặc HAL AIDL. 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 nên cung cấp HAL 2.1.
AOSP bao gồm nhiều thư viện trợ giúp được thiết kế để giúp bạn triển khai HAL 2.1 và quá trình chuyển đổi từ HAL 1.0 cũ.
Thiết bị chạy Android 13 trở lên
Các thiết bị chạy Android 13 phải cung cấp AIDL HAL (và không được cung cấp HIDL HAL). Những thiết bị không ra mắt bằng Android 13 nhưng dự định cập nhật hình ảnh của nhà cung cấp lên Matrice tương thích với khung mục tiêu phiên bản 7 (phát hành trong Android 13) phải xoá các phương thức triển khai HAL HIDL hiện có và cung cấp HAL AIDL. Bạn cũng nên cung cấp HAL AIDL cho các thiết bị không chạy Android 13 và không có kế hoạch cập nhật hình ảnh của nhà cung cấp.
Thiết bị không được cung cấp HAL HIDL 1.0.
AOSP bao gồm nhiều thư viện trợ giúp được thiết kế để giúp bạn triển khai AIDL HAL và quá trình chuyển đổi từ các HAL HIDL cũ.
Thuật ngữ
- health@1.0: viết tắt của
android.hardware.health@1.0
. Tham chiếu đến phiên bản 1.0 của HAL HIDL sức khoẻ được phát hành trong Android 8.0. - health@2.0: viết tắt của
android.hardware.health@2.0
. Đề cập đến Health 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 Health HIDL HAL phiên bản 2.1 được phát hành trong Android 11. - health AIDL HAL: viết tắt của
android.hardware.health
.- Phiên bản 1 được phát hành trong Android 13.
- charger: tệp thực thi chạy ở chế độ sạc tắt màn hình hiển thị ảnh động sạc điện thoại.
- recovery (khôi phục): tệp thực thi chạy ở chế độ khôi phục phải truy xuất thông tin pin.
- healthd: trình nền cũ chạy trong Android, truy xuất thông tin liên quan đến sức khoẻ và cung cấp thông tin đó cho khung.
- storaged: trình nền chạy trong Android, truy xuất thông tin bộ nhớ và cung cấp thông tin đó cho khung.
Health trong Android 8.x
Trong Android 8.x, thành phần trạng thái hoạt động theo cách chi tiết như trong sơ đồ sau:
Hình 1 Health trong Android 8.x.
Trong sơ đồ này:
- Khung này sử dụng một (1) lệnh gọi liên kết và một (1) lệnh gọi hwbinder để giao tiếp với phần cứng.
healthd
liên kết tĩnh vớilibhealthd_android
,libbatterymonitor
vàlibbatteryservice
.- health@1.0-impl liên kết tĩnh với
libhealthd.BOARD
.
Mỗi bo mạch có thể tuỳ chỉnh một libhealthd.BOARD
khác nhau; giá trị này được xác định tại thời điểm tạo bản dựng, liên kết đến bộ sạc, health@1.0-impl và tính năng khôi phục.
Đối với các chế độ khác:
Hình 2. Trạng thái pin trong Android 8.x, chế độ sạc khi tắt máy và chế độ khôi phục.
- charger liên kết tĩnh với
libhealthd.BOARD
,libhealthd_charger
vàlibbatterymonitor
. - quá trình khôi phục liên kết tĩnh với
libhealthd.BOARD
vàlibbatterymonitor
.
Health trong Android 9
Trong Android 9, thành phần sức khoẻ hoạt động như mô tả chi tiết trong sơ đồ sau:
Hình 3. Health trong Android 9.
Khung này cố gắng truy xuất dịch vụ health@2.0 từ hwservicemanager
.
Nếu không thành công, API này sẽ gọi vào health@1.0 (trong Android 8.x). Đường dẫn mã cũ được giữ lại để ảnh hệ thống Android 9 tương thích với ảnh nhà cung cấp Android 8.x. Khung này 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. Sức khoẻ trong Android 9, chế độ sạc và khôi phục ở chế độ tắt.
Health trong Android 11
Trong Android 11, thành phần sức khoẻ hoạt động như mô tả 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 không có hoạt động triển khai health 2.1, hệ thống sẽ quay lại đường dẫn mã cũ như 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) ] |
+-------------------------------------+
Hãy xem sơ đồ được đơn giản hoá sau đây cho các chế độ khác nhau:
Hình 5. Cơ sở hạ tầng HAL 2.1 trong lĩnh vực sức khoẻ.
Health trong Android 13
Trong Android 13, chúng tôi ra mắt HAL AIDL sức khoẻ. Thành phần trạng thái hoạt động theo cách chi tiết như trong sơ đồ sau:
Hình 6. Cơ sở hạ tầng HAL AIDL về sức khoẻ.
Giao diện HIDL HAL 2.0
HAL health@2.0 cung cấp chức năng tương tự cho khung như trình nền healthd cũ. API này cũng cung cấp các API tương tự như những API mà healthd cung cấp trước đây dưới dạng dịch vụ liên kết (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
, để thay thếIBatteryPropertiesRegistrar.unregisterListener
update
, để thay thếIBatteryPropertiesRegistrar.scheduleUpdate
IBatteryPropertiesRegistrar.getProperties
được thay thế bằng nội dung sau:getChargeCounter
getCurrentNow
getCurrentAverage
getCapacity
getEnergyCounter
getChargeStatus
getHealthInfo
Ngoài ra, IHealth
cung cấp các API mới sau đây cho storaged
để truy xuất thông tin liên quan đến bộ nhớ theo nhà cung cấp cụ thể:
getStorageInfo
getDiskStats
Một cấu trúc mới là @2.0::HealthInfo
sẽ được trả về thông qua các lệnh gọi lại 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 thông qua HAL health@2.0, 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 (có hay không, mức pin, dòng điện, điện áp, mức sạc, công nghệ, v.v.)
- Thông tin bộ nhớ (thông tin thiết bị lưu trữ, số liệu thống kê về ổ đĩa)
Để biết thông tin về cách triển khai Dịch vụ sức khoẻ 2.0, hãy xem phần Triển khai Dịch vụ sức khoẻ 2.0.
Giao diện HIDL HAL 2.1
HAL health@2.1 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 thêm các hàm sau
getHealthConfig
: để truy xuất cấu hình của HAL nàygetHealthInfo_2_1
: nâng cấp phiên bản nhỏ lêngetHealthInfo
shouldKeepScreenOn
: để xác định xem có nên giữ màn hình ở chế độ sạc hay không
Ngoài ra, bạn cần triển khai @2.1::IHealth
để hỗ trợ @2.1::IHealthInfoCallback
cho các hàm registerCallback
và unregisterCallback
kế thừa. Giao diện gọi lại mới trả về thông tin trạng thái cho ứng dụng 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 là @2.1::HealthInfo
sẽ được trả về thông qua các lệnh gọi lại 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 thông qua Health@2.0 HAL, bao gồm:
- Mức dung lượng pin
- Thời gian sạc pin đầy hiện tại (tính bằng giây)
- Dung lượng thiết kế khi sạc đầy pin (tính bằng μAh)
Hãy xem sơ đồ UML sau đây để biết các lớp hữu ích cho việc triển khai HAL sức khoẻ:
Hình 7. Sơ đồ UML của Health HAL 2.1.
Để biết thông tin về cách triển khai Dịch vụ sức khoẻ 2.1, hãy xem phần Triển khai Dịch vụ sức khoẻ 2.1.
Giao diện AIDL HAL phiên bản 1
Nội dung thay đổi đối với API
AIDL phiên bản 1 HAL hỗ trợ các API tương tự như HIDL 2.1 HAL. So với giao diện HIDL 2.1, những thay đổi sau đây trong API:
- Các API liên quan đến bộ sạc được giới thiệu trong HIDL HAL 2.1 không được chuyển sang AIDL HAL. Vì chức năng sạc ở chế độ tắt chỉ tồn tại trên phân vùng
/vendor
, nên các API trên Giao diện nhà cung cấp là không cần thiết. Để triển khai tính năng sạc khi tắt máy đúng cách, hãy xem phần bộ sạc bên dưới. - Loại
StorageAttribute
và các trường liên quan sẽ bị xoá vì không được sử dụng. - Thêm
chargerDockOnline
vàoHealthInfo
để hỗ trợ sạc qua đế sạc.
Triển khai
Hãy xem sơ đồ UML sau đây cho các lớp hữu ích cho việc triển khai HAL (Lớp trừu tượng phần cứng) cho tình trạng sức khoẻ:
Hình 8. Sơ đồ UML HAL AIDL về sức khoẻ.
Để biết thông tin về cách triển khai dịch vụ AIDL sức khoẻ, hãy xem bài viết Triển khai Health AIDL HAL.
Khôi phục
Android 13 hỗ trợ trình liên kết trong quá trình khôi phục. Việc cài đặt dịch vụ AIDL sức khoẻ vào chế độ khôi phục cho phép dịch vụ này chạy ở chế độ khôi phục.
Để biết thông tin về cách cài đặt dịch vụ AIDL sức khoẻ để khôi phục, hãy xem nội dung sau:
Bộ sạc
Chức năng sạc ở chế độ tắt được di chuyển từ /system
sang /vendor
. Đối với các thiết bị chạy Android 13, nếu hỗ trợ sạc ở chế độ tắt, tệp nhị phân dịch vụ HAL phải hỗ trợ chế độ sạc. Để thực hiện việc này, hãy tham khảo phần triển khai bộ sạc.
Thuộc tính của hệ thống bộ sạc
Tệp nhị phân charger
không còn đọc được các thuộc tính ro.charger.*
trong /vendor
. Nếu thiết bị của bạn đã đặt bất kỳ thuộc tính hệ thống ro.charger.*
nào, hãy tham khảo thuộc tính hệ thống cho bộ sạc.