การใช้สุขภาพ 2.0

ทั้งหมด healthd รหัสได้รับ refactored เข้า health@2.0-impl และ libhealthservice แก้ไขแล้วจะใช้ HAL health@2.0 สองคนนี้ห้องสมุดมีการเชื่อมโยงแบบคงที่โดย health@2.0-service ทำให้มันทำงานที่ทำก่อนหน้านี้โดย healthd (เช่นเรียกใช้ healthd_mainloop และทำในหน่วยเลือกตั้ง) ใน init, health@2.0-service ลงทะเบียนการใช้งานของอินเตอร์เฟซ IHealth เพื่อ hwservicemanager เมื่ออัปเกรดอุปกรณ์ด้วยอิมเมจผู้ขาย Android 8.x และเฟรมเวิร์ก Android 9 อิมเมจของผู้ขายอาจไม่ได้ให้บริการ health@2.0 นี้จะถูกบังคับใช้โดย กำหนดการเลิกใช้

ในการแก้ไขปัญหานี้:

  1. healthd ลงทะเบียน IHealth เพื่อ hwservicemanager (แม้จะเป็นภูตระบบ) IHealth ถูกเพิ่มเข้าไปในระบบอย่างชัดแจ้งโดยมีชื่อเช่น "สำรอง"
  2. กรอบและ storaged สื่อสารกับ healthd ผ่าน hwbinder แทนการ binder
  3. สำหรับกรอบและ storaged ที่มีการเปลี่ยนแปลงสามารถดึงข้อมูลอินสแตนซ์ "เริ่มต้น" ถ้ามีแล้ว "สำรอง"
    • รหัสลูกค้า C ++ ใช้ตรรกะที่กำหนดไว้ใน libhealthhalutils
    • รหัสลูกค้า Java ใช้ตรรกะที่กำหนดไว้ใน HealthServiceWrapper
  4. หลังจาก iHealth / เริ่มต้นคือใช้ได้อย่างกว้างขวางและ Android 8.1 ภาพที่ผู้ขายจะเลิก iHealth / การสำรองข้อมูลและ healthd สามารถเลิก สำหรับรายละเอียดเพิ่มเติมโปรดดูที่ เลิก health@1.0

ตัวแปรบิลด์เฉพาะบอร์ดสำหรับ healthd

BOARD_PERIODIC_CHORES_INTERVAL_* เป็นตัวแปรคณะกรรมการเฉพาะที่ใช้ในการสร้าง healthd ในฐานะที่เป็นส่วนหนึ่งของระบบ / ผู้ขายสร้างแยกค่าคณะกรรมการเฉพาะไม่สามารถกำหนดสำหรับโมดูลระบบ ใน health@2.0 ผู้ขายสามารถแทนที่ทั้งสองค่าใน healthd_mode_ops->init (โดยวาง libhealthservice พึ่งพาใน health@2.0-service.<device> อีกครั้งการใช้ฟังก์ชั่นนี้)

ไลบรารีการใช้งานแบบคงที่

ซึ่งแตกต่างจากการดำเนินงานห้องสมุด HAL อื่น ๆ health@2.0-impl ห้องสมุดการดำเนินงานเป็นห้องสมุดคงที่ health@2.0-service ชาร์จ, การกู้คืนและการเชื่อมโยง healthd มรดก

health@2.0.impl ดำเนิน IHealth ตามที่อธิบายไว้ข้างต้นและจะหมายถึงการห่อรอบ libbatterymonitor และ libhealthd. BOARD ผู้ใช้เหล่านี้ของ health@2.0-impl ต้องไม่ใช้ BatteryMonitor หรือฟังก์ชั่นใน libhealthd โดยตรง แทนสายเหล่านี้ควรจะถูกแทนที่ด้วยโทรศัพท์เข้าไปใน Health ระดับการดำเนินการของ IHealth อินเตอร์เฟซ ที่จะพูดคุยเพิ่มเติม healthd_common รหัสยังรวมอยู่ใน health@2.0-impl ใหม่ healthd_common มีส่วนที่เหลือของรหัสร่วมกันระหว่าง health@2.0-service ชาร์จและ healthd และสายเป็นวิธี iHealth แทน BatteryMonitor

การใช้บริการ Health 2.0

เมื่อใช้บริการ health@2.0 สำหรับอุปกรณ์ หากการใช้งานเริ่มต้นคือ:

  • เพียงพอสำหรับอุปกรณ์ใช้ android.hardware.health@2.0-service โดยตรง
  • ไม่เพียงพอสำหรับอุปกรณ์ที่สร้าง android.hardware.health@2.0-service.(device) ปฏิบัติการและรวมถึง:

    #include <health2/service.h>
    int main() { return health_service_main(); }
    

แล้ว:

  • หากคณะกรรมการเฉพาะ libhealthd:

    • มีอยู่จริง เชื่อมโยงไปยังมัน
    • ไม่ได้อยู่ให้การใช้งานที่ว่างเปล่าสำหรับ healthd_board_init และ healthd_board_battery_update ฟังก์ชั่น
  • หากคณะกรรมการเฉพาะ BOARD_PERIODIC_CHORES_INTERVAL_* ตัวแปร:

    • จะมีการกำหนดให้สร้างเฉพาะอุปกรณ์ HealthServiceCommon.cpp (คัดลอกมาจาก hardware/interfaces/health/2.0/utils/libhealthservice ) และปรับแต่งใน healthd_mode_service_2_0_init
    • ยังไม่ได้กำหนดเชื่อมโยงไปยัง libhealthservice แบบคงที่
  • หากอุปกรณ์:

    • ควรใช้ getStorageInfo และ getDiskStats APIs ให้การดำเนินงานใน get_storage_info และ get_disk_stats ฟังก์ชั่น
    • ไม่ควรใช้ APIs เหล่านั้นเชื่อมโยงไปยัง libstoragehealthdefault แบบคงที่
  • อัปเดตสิทธิ์ SELinux ที่จำเป็น

  • ใช้ HAL ในการกู้คืนโดยติดตั้งการใช้งาน passthrough ไปยังอิมเมจการกู้คืน ตัวอย่าง:

    // Android.bp
    cc_library_shared {
        name: "android.hardware.health@2.0-impl-<device>",
        recovery_available: true,
        relative_install_path: "hw",
        static_libs: [
            "android.hardware.health@2.0-impl",
            "libhealthd.<device>"
            // Include the following or implement device-specific storage APIs
            "libhealthstoragedefault",
        ],
        srcs: [
            "HealthImpl.cpp",
        ],
        overrides: [
            "android.hardware.health@2.0-impl-default",
        ],
    }
    
    // HealthImpl.cpp
    #include <health2/Health.h>
    #include <healthd/healthd.h>
    using android::hardware::health::V2_0::IHealth;
    using android::hardware::health::V2_0::implementation::Health;
    extern "C" IHealth* HIDL_FETCH_IHealth(const char* name) {
        const static std::string providedInstance{"default"};
        if (providedInstance != name) return nullptr;
        return Health::initInstance(&gHealthdConfig).get();
    }
    
    # device.mk
    PRODUCT_PACKAGES += android.hardware.health@2.0-impl-<device>
    

สำหรับรายละเอียดโปรดดูที่ ฮาร์ดแวร์ interfaces / / สุขภาพ / 2.0 / README.md

ลูกค้าด้านสุขภาพ

ดู ลูกค้าสุขภาพเพื่อสุขภาพ 2.1 HAL

การเปลี่ยนแปลงของ SELinux

health@2.0 HAL ใหม่รวมถึงการเปลี่ยนแปลง SELinux ต่อไปนี้:

  • เพิ่ม health@2.0-service เพื่อ file_contexts
  • ช่วยให้ system_server และ storaged เพื่อใช้ hal_health
  • อนุญาตให้ system_server ( BatteryService ) เพื่อลงทะเบียน batteryproperties_service ( IBatteryPropertiesRegistrar )
  • อนุญาตให้ healthd เพื่อให้ hal_health
  • กฎลบที่ช่วยให้ system_server / storaged ที่จะโทรเข้ามา healthd ผ่านเครื่องผูก
  • กฎลบที่ช่วยให้ healthd ลงทะเบียน batteryproperties_service ( IBatteryPropertiesRegistrar )

สำหรับอุปกรณ์ที่มีการใช้งานของตัวเอง อาจจำเป็นต้องเปลี่ยนแปลง SELinux ของผู้จำหน่ายบางราย ตัวอย่าง:

# device/<manufacturer>/<device>/sepolicy/vendor/file_contexts
/vendor/bin/hw/android\.hardware\.health@2\.0-service.<device> u:object_r:hal_health_default_exec:s0

# device/<manufacturer>/<device>/sepolicy/vendor/hal_health_default.te
# Add device specific permissions to hal_health_default domain, especially
# if it links to board-specific libhealthd or implements storage APIs.

อินเตอร์เฟสเคอร์เนล

ดู การเชื่อมต่อโปรแกรมสำหรับสุขภาพ 2.1 HAL

การทดสอบ

Android รวมถึง 9 ใหม่ ทดสอบ VTS เขียนเฉพาะสำหรับ HAL health@2.0 หากอุปกรณ์ประกาศให้ health@2.0 HAL ในไฟล์ Manifest อุปกรณ์ อุปกรณ์นั้นต้องผ่านการทดสอบ VTS ที่เกี่ยวข้อง การทดสอบจะถูกเขียนขึ้นสำหรับอินสแตนซ์เริ่มต้น (เพื่อให้แน่ใจว่าอุปกรณ์ที่นำไปปฏิบัติได้อย่างถูกต้องฮาล) และอินสแตนซ์สำรอง (เพื่อให้มั่นใจว่า healthd ยังคงทำงานอย่างถูกต้องก่อนที่มันจะถูกลบออก)

ข้อกำหนดข้อมูลแบตเตอรี่

ดู ความต้องการข้อมูลเกี่ยวกับแบตเตอรี่