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:
- Sự tách biệt rõ ràng hơn giữa khung và mã nhà cung cấp.
- Không dùng daemon
healthd
không cần thiết. - Mức độ tự do cao hơn trong việc 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 thiết bị hơn là chỉ 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ễ dàng thực hiện hơn
- Tuân thủ tốt hơn với API 2.0 HAL hiện có
- Tách âm Treble tốt hơn ở mã sạc ở chế độ tắt
- Hỗ trợ tốt hơn cho framework để báo tình trạng pin của thiết bị
Android 13 bao gồm android.hardware.health
AIDL HAL, một bản 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 dock.
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 AIDL HAL. Các thiết bị không khởi chạy cùng 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 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 khởi chạy cùng 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 HAL 2.0 hiện có và cung cấp HAL 2.1 hoặc AIDL HAL. Các thiết bị không khởi 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 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à 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). Các 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 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 hoạt động triển khai HIDL HAL hiện có và cung cấp AIDL HAL. Các thiết bị không khởi 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à chuyển đổi từ HIDL HAL cũ.
Thuật ngữ
- health@1.0 : viết tắt của
android.hardware.health@1.0
. Đề cập đến sức khỏe HIDL HAL phiên bản 1.0 được phát hành trên Android 8.0. - health@2.0 : viết tắt của
android.hardware.health@2.0
. Đề cập đến sức khỏe HIDL HAL phiên bản 2.0 được phát hành trên Android 9. - health@2.1 : viết tắt của
android.hardware.health@2.1
. Đề cập đến sức khỏe HIDL HAL phiên bản 2.1 được phát hành trên 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.
- charger : tệp thực thi đang chạy ở chế độ sạc tắt, hiển thị hoạt ảnh đang sạc điện thoại.
- recovery : tệp thực thi đang chạy ở chế độ recovery 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 nó 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 chi tiết như trong sơ đồ sau:
Hình 1 . Sức khỏe 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 tớilibhealthd_android
,libbatterymonitor
vàlibbatteryservice
. - health@1.0-impl liên kết tĩnh tới
libhealthd. BOARD
.
Mỗi bảng có thể tùy chỉnh một libhealthd. BOARD
; tại thời điểm xây dựng, nó được xác định liên kết tới bộ sạc, health@1.0-impl và recovery nào.
Đối với các chế độ khác:
Hình 2. Sức khỏe trong Android 8.x, chế độ sạc và phục hồi ở chế độ tắt
- bộ sạc liên kết tĩnh với
libhealthd. BOARD
,libhealthd_charger
vàlibbatterymonitor
. - recovery 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
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 tới health@1.0 (trong Android 8.x). Đường dẫn mã cũ đượ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. Khung 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 khỏe trong Android 9, chế độ sạc và phục hồi ngoài 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 việc triển khai sức khỏe 2.1 không tồn tại, hệ thống sẽ quay trở 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) ] |
+-------------------------------------+
Xem sơ đồ đơn giản hóa sau đây để 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 về sức khỏe đượ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 AIDL HAL của Y tế
Giao diện HIDL HAL 2.0
HAL health@2.0 cung cấp chức năng tương tự cho khung như daemon healthd cũ. Nó cũng cung cấp các API tương tự như những gì 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 cách sau:-
getChargeCounter
-
getCurrentNow
-
getCurrentAverage
-
getCapacity
-
getEnergyCounter
-
getChargeStatus
-
getHealthInfo
-
Ngoài ra, IHealth
cung cấp các API mới sau để storaged
nhằm truy xuất thông tin liên quan đến lưu trữ 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 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 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, 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ề cách 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
: để lấy cấu hình của HAL này -
getHealthInfo_2_1
: bản nâng cấp phiên bản nhỏ củagetHealthInfo
-
shouldKeepScreenOn
: để xác định xem có nên giữ màn hình ở chế độ sạc không
Ngoài ra, cần phải triển khai @2.1::IHealth
để hỗ trợ @2.1::IHealthInfoCallback
cho các hàm registerCallback
và unregisterCallback
được kế thừa của nó. Giao diện gọi lại mới trả về thông tin sức khỏe cho khách hà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, @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 tình trạng thiết bị bổ sung 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 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 đây để biết các lớp hữu ích cho việc triển khai HAL về sức khỏe:
Hình 7. Sơ đồ UML Y tế HAL 2.1
Để biết thông tin về việc triển khai dịch vụ Y tế 2.1, hãy xem Triển khai 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, những thay đổi sau 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. Để 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 sẽ bị xóa vì chúng không được sử dụng. -
chargerDockOnline
được thêm vàoHealthInfo
để hỗ trợ sạc dock.
Thực hiện
Xem sơ đồ UML sau đây để biết các lớp hữu ích cho việc triển khai HAL về sức khỏe:
Hình 8. Sơ đồ UML AIDL HAL của Y tế
Để biết thông tin về việc triển khai dịch vụ AIDL sức khỏe, hãy xem Triển khai AIDL HAL sức khỏe .
Sự hồi phục
Android 13 hỗ trợ chất kết dính trong quá trình khôi phục. Cài đặt dịch vụ Health AIDL vào recovery cho phép nó chạy ở chế độ recovery.
Để 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 ở chế độ tắt đượ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, tệp 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
Các thuộc tính ro.charger.*
không còn có thể đọc được bằng tệp nhị phân của bộ 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.*
, hãy tham khảo các thuộc tính hệ thống cho bộ sạc .