Android 9 bao gồm android.hardware.health
HAL 2.0, một bản nâng cấp phiên bản 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ã của 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 bản nâng cấp phiên bản 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ị
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ó những ưu điểm sau:
- Xóa các API liên quan đến bộ sạc không sử dụng
- Xóa
StorageAttribute
không sử dụng 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ị khởi chạy với Android 9 phải cung cấp 2.x HAL (và không được cung cấp 1.0 HAL) hoặc AIDL 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.x HAL 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 2.0 HAL và quá trình chuyển đổi từ 1.0 HAL cũ.
Thiết bị chạy Android 11 và Android 12
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) hoặc AIDL 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 hoặc AIDL 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 của 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ũ.
Thiết bị chạy Android 13 trở lên
Các thiết bị khởi chạy với Android 13 phải cung cấp AIDL HAL (và không được cung cấp HIDL HAL). Các thiết bị không khởi chạy với Android 13 nhưng có kế hoạch 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 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 AIDL HAL. 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 được khuyến nghị cung cấp AIDL HAL.
Thiết bị không được cung cấp HIDL 1.0 HAL.
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ừ HIDL 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. - sức khỏe AIDL HAL : viết tắt của
android.hardware.health
.- Phiên bản 1 được phát hành trên Android 13.
- 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 framework.
- 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 khuôn khổ sử dụng để giao tiếp với phần cứng.
-
healthd
liên kết tĩnh đếnlibhealthd_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
; 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 nào.
Đố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ụ 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ã kế thừa được giữ để 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 ở chế độ tắt
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) ] |
+-------------------------------------+
Xem sơ đồ đơn giản sau để biết các chế độ khác nhau:
Hình 5. Cơ sở hạ tầng Y tế HAL 2.1
Sức khỏe trong Android 13
Trong Android 13, AIDL HAL lành mạnh được giới thiệu. Thành phần sức khỏe hoạt động như chi tiết trong sơ đồ sau:
Hình 6. Cơ sở hạ tầng Y tế AIDL HAL
Giao diện HIDL 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ụ chất 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
kýCallback, để 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
cung cấp các API mới sau đây để storaged
trữ nhằm truy xuất thông tin liên quan đến bộ nhớ dành riêng cho nhà cung cấp:
-
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)
Để biết thông tin về việc triển khai dịch vụ Y tế 2.0, hãy xem Triển khai Y tế 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 chức năng bổ sung sau
-
getHealthConfig
: để truy xuất cấu hình của HAL này -
getHealthInfo_2_1
: bản 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 chức năng 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
của nó 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)
Xem sơ đồ UML sau để biết các lớp hữu ích cho việc triển khai HAL sức khỏe:
Hình 7. Sơ đồ Y tế HAL 2.1 UML
Để biết thông tin về việc thực hiện dịch vụ Y tế 2.1, hãy xem Thực hiện Y tế 2.1 .
Giao diện AIDL HAL phiên bản 1
Thay đổ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, các nội dung sau đượ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 HAL. Vì chức năng tính phí ngoài chế độ chỉ tồn tại trên phân vùng
/vendor
, các API trên Giao diện nhà cung cấp không cần thiết. Để thực hiện sạc ở chế độ tắt đúng cách, hãy xem bộ sạc bên dưới. - Loại
StorageAttribute
và các trường liên quan bị xóa vì chúng không được sử dụng. -
chargerDockOnline
được thêm vàoHealthInfo
để hỗ trợ sạc qua đế.
Thực hiện
Xem sơ đồ UML sau để biết các lớp hữu ích cho việc triển khai HAL sức khỏe:
Hình 8. Sơ đồ Y tế AIDL HAL UML
Để biết thông tin về việc triển khai dịch vụ AIDL y tế, hãy xem Triển khai Y tế AIDL HAL .
Sự hồi phục
Android 13 hỗ trợ chất kết dính trong khôi phục. Cài đặt dịch vụ Health AIDL để khôi phục cho phép nó chạy ở chế độ khôi phục.
Để biết thông tin về cách cài đặt dịch vụ AIDL sức khỏe để khôi phục, hãy xem phần sau:
Bộ sạc
Chức năng sạc ngoài chế độ được chuyển từ /system
sang /vendor
. Đối với các thiết bị chạy Android 13, nếu chúng hỗ trợ sạc ở chế độ tắt, hệ nhị phân dịch vụ HAL phải hỗ trợ chế độ sạc. Để làm như vậy, hãy tham khảo cách triển khai bộ sạc .
Thuộc tính hệ thống sạc
Thuộc tính ro.charger.*
Không còn có thể đọc được bởi charger
nhị phân trong /vendor
. Nếu thiết bị của bạn có bất kỳ thuộc tính hệ thống nào trong số các thuộc tính hệ thống ro.charger.*
đặt, hãy tham khảo thuộc tính hệ thống cho bộ sạc .