Android 9 มี android.hardware.health
HAL 2.0
การอัปเกรดเวอร์ชันหลักจาก health@1.0 HAL HAL ใหม่นี้จะมีสิ่งต่อไปนี้
ข้อดี:
- แยกระหว่างเฟรมเวิร์กและโค้ดของผู้ให้บริการอย่างชัดเจน
- เลิกใช้งาน Daemon
healthd
ที่ไม่จำเป็น - ความอิสระที่มากขึ้นสำหรับการปรับแต่งผู้ให้บริการในข้อมูลสุขภาพ รายงาน
- ข้อมูลประสิทธิภาพของอุปกรณ์มีมากกว่าแค่แบตเตอรี่
Android 11 มี android.hardware.health
HAL 2.1
การอัปเกรดเวอร์ชันย่อยจาก health@2.0 HAL HAL ใหม่นี้จะมีสิ่งต่อไปนี้
ข้อดี:
- ติดตั้งใช้งานได้ง่ายขึ้น
- สอดคล้องกับ HAL API 2.0 ที่มีอยู่ได้ดียิ่งขึ้น
- การแยกเสียงแหลมที่ดียิ่งขึ้นในรหัสการชาร์จนอกโหมด
- การสนับสนุนเฟรมเวิร์กที่ดียิ่งขึ้นในการระบุประสิทธิภาพแบตเตอรี่ของ อุปกรณ์
Android 13 มี android.hardware.health
AIDL HAL
Conversion จาก health@2.1 HAL HAL ใหม่นี้จะมีสิ่งต่อไปนี้
ข้อดี:
- นำ API เกี่ยวกับที่ชาร์จที่ไม่ได้ใช้ออก
- นำ
StorageAttribute
ที่ไม่ได้ใช้และช่องที่เกี่ยวข้องออก - รองรับการชาร์จแท่นชาร์จ
ข้อกำหนด
อุปกรณ์ที่ใช้ Android 9 และ Android 10
อุปกรณ์ที่เปิดตัวด้วย Android 9 ต้องมี 2.x HAL (และต้องไม่ระบุ 1.0 HAL) หรือ AIDL HAL อุปกรณ์ไม่เปิด ที่ใช้ Android 9 แต่วางแผนที่จะอัปเดตรูปภาพผู้ให้บริการ เป็นเมทริกซ์ความเข้ากันได้ของเฟรมเวิร์กเป้าหมายเวอร์ชัน 3 (เปิดตัวแล้วใน Android 9) ต้องนำการติดตั้งใช้งาน 1.0 HAL ที่มีอยู่ออกและ ระบุ HAL 2.x หรือ AIDL HAL
AOSP มีไลบรารีตัวช่วยต่างๆ มากมายที่ออกแบบมาเพื่อช่วยให้คุณใช้งานเวอร์ชัน 2.0 ได้ HAL และการเปลี่ยนจาก HAL 1.0 แบบเก่า
อุปกรณ์ที่ใช้ Android 11 และ Android 12
อุปกรณ์ที่เปิดตัวด้วย Android 11 ต้องมี 2.1 HAL (และต้องไม่ระบุ HAL 1.0 หรือ 2.0) หรือ AIDL HAL อุปกรณ์ที่ไม่ เปิดตัวพร้อมกับ Android 11 แต่วางแผนที่จะอัปเดต อิมเมจของผู้ให้บริการไปยังเมทริกซ์ความเข้ากันได้ของเฟรมเวิร์กเป้าหมายเวอร์ชัน 5 (เปิดตัวแล้ว Android 11) ต้องนำ HAL 2.0 ที่มีอยู่ออก ติดตั้งใช้งาน 2.1 HAL หรือ AIDL HAL อุปกรณ์ไม่เปิด ที่ใช้ Android 11 และไม่มีแผนที่จะอัปเดตผู้ให้บริการ ควรมี 2.1 HAL ด้วย
AOSP มีไลบรารีตัวช่วยต่างๆ มากมายที่ออกแบบมาเพื่อช่วยให้คุณใช้งาน 2.1 ได้ HAL และการเปลี่ยนจาก HAL 1.0 แบบเก่า
อุปกรณ์ที่ใช้ Android 13 ขึ้นไป
อุปกรณ์ที่เปิดตัวด้วย Android 13 ต้องมี AIDL HAL (และต้องไม่ระบุ HIDL HAL) อุปกรณ์ที่ไม่เปิดตัว Android 13 แต่วางแผนที่จะอัปเดตอิมเมจของผู้ให้บริการเป็น "กำหนดเป้าหมาย" เมทริกซ์ความเข้ากันได้ของเฟรมเวิร์กเวอร์ชัน 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
โปรดดู Health HIDL HAL เวอร์ชัน 1.0 เปิดตัวแล้วใน Android 8.0 - health@2.0: ตัวย่อของ
android.hardware.health@2.0
โปรดดู Health HIDL HAL เวอร์ชัน 2.0 เปิดตัวแล้วใน Android 9 - health@2.1: ตัวย่อของ
android.hardware.health@2.1
โปรดดู Health HIDL HAL เวอร์ชัน 2.1 เปิดตัวแล้วใน Android 11 - health AIDL HAL: ตัวย่อของ
android.hardware.health
- เวอร์ชัน 1 เปิดตัวแล้วใน Android 13
- ที่ชาร์จ: ไฟล์ปฏิบัติการซึ่งทำงานในการชาร์จนอกโหมดที่แสดง ภาพเคลื่อนไหวขณะชาร์จโทรศัพท์
- การกู้คืน: ไฟล์ปฏิบัติการที่ทำงานในโหมดการกู้คืนซึ่งต้องดึงแบตเตอรี่กลับมา
- Healthd: Daemon เดิมที่ทำงานใน Android ที่ดึงข้อมูลที่เกี่ยวข้องกับสุขภาพ ข้อมูลมาไว้ในกรอบความคิด
- storaged: Daemon ที่ทำงานใน Android ที่เรียกข้อมูลพื้นที่เก็บข้อมูล และนำมาใช้กับเฟรมเวิร์ก
สุขภาพใน Android 8.x
ใน Android 8.x คอมโพเนนต์สุขภาพจะทำงานตามรายละเอียดในแผนภาพต่อไปนี้
รูปที่ 1 สุขภาพใน Android 8.x
ในแผนภาพนี้
- กรอบมีการใช้การเรียก Binder หนึ่งครั้งและการเรียก Hwbinder หนึ่ง (1) ครั้ง สื่อสารกับฮาร์ดแวร์
healthd
ลิงก์กับlibhealthd_android
,libbatterymonitor
และlibbatteryservice
- health@1.0-impl เป็นลิงก์แบบคงที่ไปยัง
libhealthd.BOARD
แต่ละกระดานสามารถปรับแต่ง libhealthd.BOARD
ที่แตกต่างกัน
จะกำหนดไว้ที่เวลาสร้างที่ชาร์จ, health@1.0-impl และลิงก์การกู้คืน
เป็น
สำหรับโหมดอื่นๆ
รูปที่ 2 สุขภาพใน Android 8.x, โหมดการชาร์จและการกู้คืนนอกโหมด
- ที่ชาร์จเชื่อมกับ
libhealthd.BOARD
แบบคงที่libhealthd_charger
และlibbatterymonitor
- การกู้คืนแบบคงที่ไปยัง
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 ทั้ง 2 รายการ เนื่องจากอุปกรณ์จะมีเวอร์ชันบริการได้เพียงเวอร์ชันเดียว (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 โครงสร้างพื้นฐาน Health HAL 2.1
สุขภาพใน Android 13
ใน Android 13 ได้เปิดตัว AIDL HAL ด้านสุขภาพ คอมโพเนนต์ของสุขภาพทำงานตามรายละเอียดในแผนภาพต่อไปนี้
รูปที่ 6 โครงสร้างพื้นฐาน Health AIDL HAL
อินเทอร์เฟซ HIDL HAL 2.0
Health@2.0 HAL มีฟังก์ชันการทำงานเหมือนกับเฟรมเวิร์กเก่า ดูแลสุขภาพ และยังมี API ที่คล้ายกับ API ที่มีประสิทธิภาพ เคยระบุไว้ว่าเป็นบริการแฟ้ม (เช่น IBatteryPropertiesRegistrar)
อินเทอร์เฟซหลัก สุขภาพ จะมีฟังก์ชันต่อไปนี้
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
จะแสดงผลผ่าน Callback และ getHealthInfo
โครงสร้างนี้มีข้อมูลประสิทธิภาพการทำงานของอุปกรณ์ทั้งหมดที่ใช้ได้ผ่าน health@2.0
HAL ซึ่งรวมถึง
- ข้อมูลการชาร์จ (AC/USB/ไร้สาย กระแสไฟฟ้า แรงดันไฟฟ้า ฯลฯ)
- ข้อมูลแบตเตอรี่ (สถานะ ระดับแบตเตอรี่ กระแสไฟฟ้า แรงดันไฟฟ้า การชาร์จ เทคโนโลยี ฯลฯ)
- ข้อมูลพื้นที่เก็บข้อมูล (ข้อมูลอุปกรณ์จัดเก็บข้อมูล สถิติของดิสก์)
ดูข้อมูลเกี่ยวกับการใช้บริการสุขภาพ 2.0 ได้ที่ การใช้ Health 2.0
อินเทอร์เฟซ HIDL HAL 2.1
Health@2.1 HAL รองรับการชาร์จนอกโหมดและให้ข้อมูลเพิ่มเติม เกี่ยวกับแบตเตอรี่
อินเทอร์เฟซหลัก สุขภาพ จะมีฟังก์ชันเพิ่มเติมดังต่อไปนี้
getHealthConfig
: เพื่อดึงข้อมูลการกำหนดค่าของ HAL นี้getHealthInfo_2_1
: การอัปเกรดเวอร์ชันย่อยเป็นgetHealthInfo
shouldKeepScreenOn
: เพื่อกำหนดว่าควรเปิดหน้าจอไว้หรือไม่ โหมดที่ชาร์จ
นอกจากนี้ ยังจำเป็นต้องติดตั้งใช้งาน @2.1::IHealth
เพื่อสนับสนุน
@2.1::IHealthInfoCallback
สำหรับ registerCallback
ที่รับช่วงมาและ
unregisterCallback
ฟังก์ชัน อินเทอร์เฟซ Callback ใหม่แสดงประสิทธิภาพการทำงาน
ข้อมูลแก่ลูกค้าโดยใช้ฟังก์ชัน healthInfoChanged_2_1
แทน
ฟังก์ชัน healthInfoChanged
ที่รับช่วงมา
โครงสร้างใหม่ @2.1::HealthInfo
จะแสดงผลผ่าน Callback และ
getHealthInfo_2_1
โครงสร้างนี้มีข้อมูลประสิทธิภาพของอุปกรณ์เพิ่มเติม
ผ่าน Health@2.0 HAL ซึ่งรวมถึง
- ระดับความจุแบตเตอรี่
- เวลาชาร์จแบตเตอรี่จึงจะเต็มในขณะนี้ (เป็นวินาที)
- ความจุดีไซน์ของแบตเตอรี่เต็ม (ในหน่วย μAh)
ดูแผนภาพ UML ต่อไปนี้เพื่อดูชั้นเรียนที่เป็นประโยชน์ต่อการใช้งาน HAL ด้านสุขภาพ
รูปที่ 7 แผนภาพ UML สำหรับ Health HAL 2.1
ดูข้อมูลเกี่ยวกับการใช้บริการสุขภาพ 2.1 ได้ที่ การใช้งาน Health 2.1
อินเทอร์เฟซ AIDL HAL เวอร์ชัน 1
การเปลี่ยนแปลง API
HAL ของ AIDL เวอร์ชัน 1 รองรับ 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
ดูข้อมูลเกี่ยวกับการใช้บริการ AIDL ด้านสุขภาพได้ที่ การใช้ Health AIDL HAL
แย่งลูกคืนมา
Android 13 รองรับ Binder ในการกู้คืน การติดตั้ง บริการ Health AIDL ในการกู้คืนทำให้เรียกใช้ในโหมดการกู้คืนได้
ดูข้อมูลเกี่ยวกับการติดตั้งบริการ AIDL ด้านสุขภาพเพื่อกู้คืนได้ที่ ดังต่อไปนี้:
ที่ชาร์จ
ฟังก์ชันของการชาร์จนอกโหมดจะย้ายจาก /system
ไปยัง /vendor
สำหรับ
ที่เปิดตัวพร้อมกับ Android 13 หากรองรับ
การชาร์จนอกโหมด ไบนารีของบริการ HAL ต้องรองรับโหมดที่ชาร์จ โดยดำเนินการดังนี้
อ้างถึง
กำลังติดตั้งที่ชาร์จ
คุณสมบัติของระบบที่ชาร์จ
ไบนารี charger
ไม่สามารถอ่านคุณสมบัติ ro.charger.*
ใน
/vendor
หากอุปกรณ์ตั้งค่าพร็อพเพอร์ตี้ระบบ ro.charger.*
ไว้
อ้างถึง
คุณสมบัติของระบบสำหรับที่ชาร์จ