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