Android 9 มี android.hardware.health
HAL 2.0 ซึ่งเป็นเวอร์ชันหลักที่อัปเกรดจาก health@1.0 HAL HAL ใหม่นี้มีข้อดีดังต่อไปนี้:
- การแยกระหว่างกรอบงานและรหัสผู้ขายที่สะอาดยิ่งขึ้น
- เลิกใช้
healthd
daemon ที่ไม่จำเป็น - ระดับอิสระที่มากขึ้นสำหรับการปรับแต่งผู้จำหน่ายในรายงานข้อมูลสุขภาพ
- ข้อมูลความสมบูรณ์ของอุปกรณ์มากกว่าแค่แบตเตอรี่
Android 11 มี android.hardware.health
HAL 2.1 ซึ่งเป็นเวอร์ชันรองที่อัปเกรดจาก health@2.0 HAL HAL ใหม่นี้มีข้อดีดังต่อไปนี้:
- ง่ายต่อการดำเนินการ
- สอดคล้องกับ 2.0 HAL API ที่มีอยู่ได้ดีขึ้น
- การแยกเสียงแหลมที่ดีขึ้นในรหัสการชาร์จนอกโหมด
- รองรับกรอบการทำงานที่ดีขึ้นเพื่อบ่งบอกถึงความสมบูรณ์ของแบตเตอรี่ของอุปกรณ์
Android 13 รวมถึง android.hardware.health
AIDL HAL การแปลงจาก health@2.1 HAL HAL ใหม่นี้มีข้อดีดังต่อไปนี้:
- ลบ API ที่เกี่ยวข้องกับเครื่องชาร์จที่ไม่ได้ใช้
- ลบ
StorageAttribute
ที่ไม่ได้ใช้และฟิลด์ที่เกี่ยวข้อง - รองรับแท่นชาร์จ
ความต้องการ
อุปกรณ์ที่ใช้ Android 9 และ Android 10
อุปกรณ์ที่เปิดตัวด้วย Android 9 ต้องมี 2.x HAL (และต้องไม่มี 1.0 HAL) หรือ AIDL HAL อุปกรณ์ที่ไม่ได้เปิดตัวพร้อมกับ Android 9 แต่วางแผนที่จะอัปเดตอิมเมจผู้ขายเป็น Target Framework Compatibility Matrix เวอร์ชัน 3 (เผยแพร่ใน Android 9) จะต้องลบการใช้งาน 1.0 HAL ที่มีอยู่และจัดเตรียม 2.x HAL หรือ AIDL HAL
AOSP มีไลบรารีตัวช่วยหลายตัวที่ออกแบบมาเพื่อช่วยคุณในการปรับใช้ 2.0 HAL และการเปลี่ยนจาก 1.0 HAL แบบเก่า
อุปกรณ์ที่ใช้ Android 11 และ Android 12
อุปกรณ์ที่เปิดตัวด้วย Android 11 ต้องมี 2.1 HAL (และต้องไม่มี 1.0 หรือ 2.0 HAL) หรือ AIDL HAL อุปกรณ์ที่ไม่ได้เปิดตัวพร้อมกับ Android 11 แต่วางแผนที่จะอัปเดตอิมเมจผู้ขายเป็น Target Framework Compatibility Matrix เวอร์ชัน 5 (เผยแพร่ใน Android 11) จะต้องลบการใช้งาน 2.0 HAL ที่มีอยู่และจัดเตรียม 2.1 HAL หรือ AIDL HAL ขอแนะนำให้ใช้อุปกรณ์ที่ไม่ได้เปิดตัวพร้อมกับ Android 11 และไม่ได้วางแผนที่จะอัปเดตอิมเมจผู้ขายเพื่อให้ 2.1 HAL
AOSP มีไลบรารีตัวช่วยหลายตัวที่ออกแบบมาเพื่อช่วยคุณในการปรับใช้ 2.1 HAL และการเปลี่ยนจาก 1.0 HAL แบบเก่า
อุปกรณ์ที่ใช้ Android 13 ขึ้นไป
อุปกรณ์ที่เปิดตัวด้วย Android 13 ต้องมี AIDL HAL (และต้องไม่มี HIDL HAL) อุปกรณ์ที่ไม่ได้เปิดตัวพร้อมกับ Android 13 แต่วางแผนที่จะอัปเดตอิมเมจผู้ขายเป็น Target Framework Compatibility Matrix เวอร์ชัน 7 (เผยแพร่ใน Android 13) จะต้องลบการใช้งาน HIDL HAL ที่มีอยู่และจัดเตรียม AIDL HAL ขอแนะนำให้ใช้อุปกรณ์ที่ไม่ได้เปิดตัวพร้อมกับ Android 13 และไม่ได้วางแผนที่จะอัปเดตอิมเมจผู้ขายเพื่อให้ AIDL HAL
อุปกรณ์ต้องไม่มี HIDL 1.0 HAL
AOSP มีไลบรารีตัวช่วยหลายตัวที่ออกแบบมาเพื่อช่วยคุณในการปรับใช้ AIDL HAL และการเปลี่ยนจาก HIDL HAL แบบเก่า
คำศัพท์
- health@1.0 : ตัวย่อของ
android.hardware.health@1.0
หมายถึงสุขภาพ HIDL HAL เวอร์ชัน 1.0 ที่เผยแพร่ใน Android 8.0 - health@2.0 : ย่อมาจาก
android.hardware.health@2.0
หมายถึงสุขภาพ HIDL HAL เวอร์ชัน 2.0 ที่เผยแพร่ใน Android 9 - health@2.1 : ตัวย่อของ
android.hardware.health@2.1
หมายถึงสุขภาพ HIDL HAL เวอร์ชัน 2.1 ที่เผยแพร่ใน Android 11 - สุขภาพ AIDL HAL : ตัวย่อของ
android.hardware.health
- เวอร์ชัน 1 เปิดตัวใน Android 13
- เครื่องชาร์จ : เรียกใช้งานได้ในการชาร์จนอกโหมดที่แสดงภาพเคลื่อนไหวการชาร์จโทรศัพท์
- การกู้คืน : เรียกใช้งานได้ในโหมดการกู้คืนที่ต้องดึงข้อมูลแบตเตอรี่
- healthd : Legacy daemon ที่ทำงานใน Android ที่ดึงข้อมูลที่เกี่ยวข้องกับสุขภาพและมอบให้กับเฟรมเวิร์ก
- storaged : daemon ที่ทำงานใน Android ที่ดึงข้อมูลการจัดเก็บและจัดเตรียมให้กับเฟรมเวิร์ก
สุขภาพใน Android 8.x
ใน Android 8.x องค์ประกอบสุขภาพทำงานตามรายละเอียดในไดอะแกรมต่อไปนี้:
รูปที่ 1 . สุขภาพใน Android 8.x
ในแผนภาพนี้:
- กรอบงานใช้การเรียก Binder หนึ่ง (1) ครั้งและการเรียก hwbinder หนึ่ง (1) ครั้งเพื่อสื่อสารกับฮาร์ดแวร์
-
healthd
ลิงก์แบบคงที่ไปยังlibhealthd_android
,libbatterymonitor
และlibbatteryservice
- health@1.0-impl ลิงก์ไปยัง
libhealthd. BOARD
แบบคงที่libhealthd. BOARD
แต่ละบอร์ดสามารถปรับแต่ง libhealthd. BOARD
ที่แตกต่างกันได้ libhealthd. BOARD
; มันถูกกำหนดเมื่อถึงเวลาสร้างสิ่งที่ชาร์จ, health@1.0-impl และลิงก์การกู้คืน
สำหรับโหมดอื่นๆ:
รูปที่ 2 สุขภาพใน Android 8.x การชาร์จและโหมดการกู้คืนนอกโหมด
- เครื่องชาร์จเชื่อมโยงกับ
libhealthd. BOARD
แบบคงที่libhealthd. BOARD
,libhealthd_charger
และlibbatterymonitor
- การกู้คืนลิงก์ไปยัง
libhealthd. BOARD
แบบคงที่libhealthd. BOARD
และlibbatterymonitor
สุขภาพใน Android 9
ใน Android 9 องค์ประกอบสุขภาพทำงานตามรายละเอียดในไดอะแกรมต่อไปนี้:
รูปที่ 3 . สุขภาพใน Android 9
เฟรมเวิร์กพยายามดึงบริการ health@2.0 จาก hwservicemanager
หากล้มเหลว จะเรียกไปที่ health@1.0 (ใน Android 8.x) เส้นทางรหัสเดิมจะถูกเก็บไว้เพื่อให้อิมเมจระบบ Android 9 เข้ากันได้กับอิมเมจผู้ขาย Android 8.x เฟรมเวิร์กไม่ดึงข้อมูลจาก HAL ทั้งสอง เนื่องจากอุปกรณ์สามารถมีเวอร์ชันบริการเดียวเท่านั้น (1.0 หรือ 2.0)
สำหรับโหมดอื่นๆ:
รูปที่ 4 สุขภาพใน Android 9 โหมดการชาร์จและการกู้คืนนอกโหมด
สุขภาพใน Android 11
ใน Android 11 องค์ประกอบสุขภาพทำงานตามรายละเอียดในไดอะแกรมต่อไปนี้:
[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) ] |
+-------------------------------------+
หากไม่มีการใช้งาน Health 2.1 ระบบจะถอยกลับไปที่เส้นทางรหัสดั้งเดิมตามที่อธิบายไว้ในส่วนก่อนหน้า
สำหรับโหมดอื่นๆ:
[ 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) ] |
+-------------------------------------+
ดูไดอะแกรมแบบง่ายต่อไปนี้สำหรับโหมดต่างๆ:
รูปที่ 5. โครงสร้างพื้นฐานด้านสุขภาพ HAL 2.1
สุขภาพใน Android 13
ใน Android 13 มีการแนะนำ AIDL HAL ด้านสุขภาพ องค์ประกอบสุขภาพทำงานตามรายละเอียดในไดอะแกรมต่อไปนี้:
รูปที่ 6. โครงสร้างพื้นฐาน AIDL HAL ด้านสุขภาพ
อินเทอร์เฟซ HIDL HAL 2.0
health@2.0 HAL จัดเตรียมฟังก์ชันการทำงานเดียวกันกับเฟรมเวิร์กเป็น healthd daemon แบบเก่า นอกจากนี้ยังจัดเตรียม API ที่คล้ายกับบริการที่จัดให้ก่อนหน้านี้เป็นบริการตัวประสาน (เช่น IBatteryPropertiesRegistrar )
อินเทอร์เฟซหลัก IHealth มีฟังก์ชันดังต่อไปนี้:
-
registerCallback
เพื่อแทนที่IBatteryPropertiesRegistrar.registerListener
-
unregisterCallback
เพื่อแทนที่IBatteryPropertiesRegistrar.unregisterListener
-
update
เพื่อแทนที่IBatteryPropertiesRegistrar.scheduleUpdate
-
IBatteryPropertiesRegistrar.getProperties
จะถูกแทนที่ด้วยสิ่งต่อไปนี้:-
getChargeCounter
-
getCurrentNow
-
getCurrentAverage
-
getCapacity
-
getEnergyCounter
-
getChargeStatus
-
getHealthInfo
-
นอกจากนี้ IHealth
ยังมี API ใหม่ต่อไปนี้สำหรับการ storaged
เพื่อดึงข้อมูลที่เกี่ยวข้องกับการจัดเก็บเฉพาะผู้จำหน่าย:
-
getStorageInfo
-
getDiskStats
โครงสร้างใหม่ @2.0::HealthInfo
ถูกส่งคืนผ่านการเรียกกลับและ getHealthInfo
โครงสร้างนี้มีข้อมูลความสมบูรณ์ของอุปกรณ์ทั้งหมดที่มีอยู่ใน health@2.0 HAL รวมถึง:
- ข้อมูลการชาร์จ (AC/USB/ไร้สาย กระแสไฟ แรงดันไฟ ฯลฯ)
- ข้อมูลแบตเตอรี่ (สถานะ ระดับแบตเตอรี่ กระแสไฟ แรงดันไฟ การชาร์จ เทคโนโลยี ฯลฯ)
- ข้อมูลการจัดเก็บ (ข้อมูลอุปกรณ์จัดเก็บข้อมูล สถิติดิสก์)
สำหรับข้อมูลเกี่ยวกับการนำ Health service 2.0 ไปใช้ โปรดดูที่ Implementing Health 2.0
อินเทอร์เฟซ HIDL HAL 2.1
health@2.1 HAL รองรับการชาร์จนอกโหมดและให้ข้อมูลเพิ่มเติมเกี่ยวกับแบตเตอรี่
อินเทอร์เฟซหลัก IHealth มีฟังก์ชันเพิ่มเติมดังต่อไปนี้
-
getHealthConfig
: เพื่อดึงการกำหนดค่าของHAL .นี้ -
getHealthInfo_2_1
: เวอร์ชันรองอัปเกรดเป็นgetHealthInfo
-
shouldKeepScreenOn
: เพื่อกำหนดว่าควรเปิดหน้าจอในโหมดชาร์จหรือไม่
นอกจากนี้ จำเป็นต้องมีการใช้งาน @2.1::IHealth
เพื่อรองรับ @2.1::IHealthInfoCallback
สำหรับฟังก์ชัน registerCallback
และ unregisterCallback
ที่สืบทอดมา อินเทอร์เฟซการโทรกลับใหม่จะส่งกลับข้อมูลความสมบูรณ์ด้านสุขภาพไปยังไคลเอ็นต์โดยใช้ฟังก์ชัน healthInfoChanged_2_1
แทนฟังก์ชัน healthInfoChanged
ที่สืบทอดมา
โครงสร้างใหม่ @2.1::HealthInfo
ถูกส่งคืนผ่านการเรียกกลับและ getHealthInfo_2_1
โครงสร้างนี้มีข้อมูลความสมบูรณ์ของอุปกรณ์เพิ่มเติมผ่าน health@2.0 HAL ซึ่งรวมถึง:
- ระดับความจุของแบตเตอรี่
- เวลาในการชาร์จแบตเตอรี่จนเต็มในขณะนี้ (เป็นวินาที)
- ความจุของการออกแบบแบตเตอรี่ที่ชาร์จจนเต็ม (เป็น μAh)
ดูไดอะแกรม UML ต่อไปนี้สำหรับคลาสที่เป็นประโยชน์ต่อการใช้งาน HAL ด้านสุขภาพ:
รูปที่ 7 แผนภาพ HAL 2.1 UML สุขภาพ
สำหรับข้อมูลเกี่ยวกับการใช้บริการด้านสุขภาพ 2.1 โปรดดูที่ Implementing Health 2.1
อินเทอร์เฟซ AIDL HAL เวอร์ชัน 1
การเปลี่ยนแปลง API
AIDL เวอร์ชัน 1 HAL รองรับ API ที่คล้ายกับ HIDL 2.1 HAL เมื่อเทียบกับอินเทอร์เฟซ HIDL 2.1 การเปลี่ยนแปลงต่อไปนี้ใน API:
- API ที่เกี่ยวข้องกับเครื่องชาร์จที่นำมาใช้ใน HIDL HAL 2.1 จะไม่ถูกย้ายไปยัง AIDL HAL เนื่องจากฟังก์ชันของการชาร์จนอกโหมดใช้งานได้บนพาร์ติชัน
/vendor
เท่านั้น จึงไม่จำเป็นต้องมี API บนอินเทอร์เฟซของผู้จัดจำหน่าย หากต้องการใช้งานการชาร์จนอกโหมดอย่างเหมาะสม โปรดดูที่ เครื่องชาร์จ ด้านล่าง - ประเภท
StorageAttribute
และฟิลด์ที่เกี่ยวข้องจะถูกลบออกเนื่องจากไม่ได้ใช้ - เพิ่ม
chargerDockOnline
ในHealthInfo
เพื่อรองรับการชาร์จแท่นชาร์จ
การดำเนินการ
ดูไดอะแกรม UML ต่อไปนี้สำหรับคลาสที่เป็นประโยชน์ต่อการใช้งาน HAL ด้านสุขภาพ:
รูปที่ 8 แผนภาพ Health AIDL HAL UML
สำหรับข้อมูลเกี่ยวกับการนำบริการ Health AIDL ไปใช้ โปรดดูที่ Implementing Health AIDL HAL
การกู้คืน
Android 13 รองรับ Binder ในการกู้คืน การติดตั้งบริการ Health AIDL เพื่อการกู้คืนทำให้สามารถทำงานในโหมดการกู้คืนได้
สำหรับข้อมูลเกี่ยวกับการติดตั้งบริการ Health AIDL เพื่อการกู้คืน ดูสิ่งต่อไปนี้:
ที่ชาร์จ
การทำงานของการชาร์จนอกโหมดถูกย้ายจาก /system
เป็น /vendor
สำหรับอุปกรณ์ที่เปิดตัวด้วย Android 13 หากอุปกรณ์นั้นรองรับการชาร์จนอกโหมด ไบนารีบริการ HAL จะต้องรองรับโหมดเครื่องชาร์จ ให้อ้างอิงกับ การใช้ที่ชาร์จ
คุณสมบัติระบบเครื่องชาร์จ
คุณสมบัติ ro.charger.*
ไม่สามารถอ่านได้โดยไบนารี charger
ใน /vendor
อีกต่อไป หากอุปกรณ์ของคุณมีชุดคุณสมบัติของระบบ ro.charger.*
โปรดดู คุณสมบัติของระบบสำหรับเครื่องชาร์จ