ประสิทธิภาพของระบบ Android

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 คอมโพเนนต์สุขภาพจะทำงานตามรายละเอียดในแผนภาพต่อไปนี้

สุขภาพใน 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 และลิงก์การกู้คืน เป็น

สำหรับโหมดอื่นๆ

โหมดการเรียกเก็บเงินและการกู้คืนนอกโหมดใน Android 8.x

รูปที่ 2 สุขภาพใน Android 8.x, โหมดการชาร์จและการกู้คืนนอกโหมด

  • ที่ชาร์จเชื่อมกับ libhealthd.BOARD แบบคงที่ libhealthd_charger และ libbatterymonitor
  • การกู้คืนแบบคงที่ไปยัง libhealthd.BOARD และ libbatterymonitor

สุขภาพใน Android 9

ใน 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)

สำหรับโหมดอื่นๆ

การเรียกเก็บเงินและการกู้คืนนอกโหมดใน Android 9

รูปที่ 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)      ] |
+-------------------------------------+

ดูแผนภาพแบบง่ายต่อไปนี้สําหรับโหมดต่างๆ

โครงสร้างพื้นฐาน Health HAL 2.1

รูปที่ 5 โครงสร้างพื้นฐาน Health HAL 2.1

สุขภาพใน Android 13

ใน Android 13 ได้เปิดตัว AIDL HAL ด้านสุขภาพ คอมโพเนนต์ของสุขภาพทำงานตามรายละเอียดในแผนภาพต่อไปนี้

โครงสร้างพื้นฐาน Health 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 ด้านสุขภาพ

แผนภาพ Health 2.1 HAL UML

รูปที่ 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 ด้านสุขภาพ

แผนภาพ Health AIDL HAL UML

รูปที่ 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.* ไว้ อ้างถึง คุณสมบัติของระบบสำหรับที่ชาร์จ