सभी healthd
कोड को हेल्थ@2.0-इम्प्ल और libhealthservice
में दोबारा तैयार किया गया है, फिर हेल्थ@2.0 एचएएल को लागू करने के लिए संशोधित किया गया है। ये दोनों लाइब्रेरी हेल्थ@2.0-सर्विस द्वारा स्थिर रूप से जुड़ी हुई हैं, जो इसे healthd
द्वारा पहले किए गए कार्य करने में सक्षम बनाती हैं (अर्थात, healthd_mainloop
चलाएं और मतदान करें)। Init में, health@2.0-service इंटरफ़ेस IHealth
के कार्यान्वयन को hwservicemanager
में पंजीकृत करता है। एंड्रॉइड 8.x विक्रेता छवि और एंड्रॉइड 9 फ्रेमवर्क के साथ उपकरणों को अपग्रेड करते समय, विक्रेता छवि द्वारा हेल्थ@2.0 सेवा प्रदान नहीं की जा सकती है। यह बहिष्करण अनुसूची द्वारा लागू किया गया है।
इस समस्या को हल करने के लिए:
-
healthd
IHealth
hwservicemanager
में पंजीकृत करता है (सिस्टम डेमॉन होने के बावजूद)।IHealth
सिस्टम मेनिफ़ेस्ट में जोड़ा गया है, उदाहरण के लिए नाम"backup"
के साथ। - फ़्रेमवर्क और
storaged
binder
के बजायhwbinder
के माध्यम सेhealthd
के साथ संचार करते हैं। - यदि उपलब्ध हो तो
"default"
, फिर"backup"
उदाहरण लाने के लिए फ्रेमवर्क औरstoraged
के लिए कोड बदल दिए जाते हैं।- C++ क्लाइंट कोड
libhealthhalutils
में परिभाषित तर्क का उपयोग करता है। - जावा क्लाइंट कोड
HealthServiceWrapper
में परिभाषित तर्क का उपयोग करता है।
- C++ क्लाइंट कोड
- IHealth/default के व्यापक रूप से उपलब्ध होने और Android 8.1 विक्रेता छवियों के अप्रचलित होने के बाद, IHealth/बैकअप और
healthd
अप्रचलित किया जा सकता है। अधिक जानकारी के लिए, Deprecating health@1.0 देखें।
स्वास्थ्य के लिए बोर्ड-विशिष्ट बिल्ड वैरिएबल
BOARD_PERIODIC_CHORES_INTERVAL_*
बोर्ड-विशिष्ट चर हैं जिनका उपयोग healthd
बनाने के लिए किया जाता है। सिस्टम/विक्रेता बिल्ड स्प्लिट के भाग के रूप में, सिस्टम मॉड्यूल के लिए बोर्ड-विशिष्ट मानों को परिभाषित नहीं किया जा सकता है। हेल्थ@2.0 में, विक्रेता इन दो मानों को healthd_mode_ops->init
में ओवरराइड कर सकते हैं ( health@2.0-service.<device>
में libhealthservice
निर्भरता को हटाकर और इस फ़ंक्शन को फिर से कार्यान्वित करके)।
स्थैतिक कार्यान्वयन पुस्तकालय
अन्य एचएएल कार्यान्वयन पुस्तकालयों के विपरीत, कार्यान्वयन पुस्तकालय हेल्थ@2.0-इम्पल एक स्थिर पुस्तकालय है जिससे हेल्थ@2.0-सेवा, चार्जर, रिकवरी और लीगेसी हेल्थ लिंक होता है।
जैसा कि ऊपर वर्णित है, health@2.0.impl IHealth
लागू करता है और इसका उद्देश्य libbatterymonitor
और libhealthd. BOARD
। हेल्थ@2.0-इम्प्ल के इन उपयोगकर्ताओं को सीधे BatteryMonitor
या libhealthd
में फ़ंक्शन का उपयोग नहीं करना चाहिए; इसके बजाय, इन कॉलों को Health
क्लास में कॉल के साथ प्रतिस्थापित किया जाना चाहिए, जो IHealth
इंटरफ़ेस का कार्यान्वयन है। आगे सामान्यीकरण के लिए, healthd_common
कोड को healthy@2.0-impl में भी शामिल किया गया है। नए healthd_common
में हेल्थ@2.0-सर्विस, चार्जर और healthd
के बीच बाकी सामान्य कोड शामिल हैं और बैटरी मॉनिटर के बजाय आईहेल्थ तरीकों में कॉल करता है।
स्वास्थ्य 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
API को लागू करना चाहिए,get_storage_info
औरget_disk_stats
फ़ंक्शंस में कार्यान्वयन प्रदान करना चाहिए। - उन एपीआई को लागू नहीं करना चाहिए, जो स्थिर रूप से
libstoragehealthdefault
से लिंक हैं।
-
आवश्यक SELinux अनुमतियाँ अद्यतन करें।
पुनर्प्राप्ति छवि पर पासथ्रू कार्यान्वयन स्थापित करके पुनर्प्राप्ति में HAL को कार्यान्वित करें। उदाहरण:
// 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>
विवरण के लिए, हार्डवेयर/इंटरफ़ेस/हेल्थ/2.0/README.md देखें।
स्वास्थ्य ग्राहक
हेल्थ 2.1 एचएएल के लिए हेल्थ क्लाइंट देखें।
SELinux बदलता है
नए हेल्थ@2.0 एचएएल में निम्नलिखित SELinux परिवर्तन शामिल हैं:
-
file_contexts
में health@2.0-service जोड़ता है। -
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 एचएएल के लिए कर्नेल इंटरफ़ेस देखें।
परिक्षण
एंड्रॉइड 9 में विशेष रूप से हेल्थ@2.0 एचएएल के लिए लिखे गए नए वीटीएस परीक्षण शामिल हैं। यदि कोई डिवाइस डिवाइस मेनिफेस्ट में हेल्थ@2.0 एचएएल प्रदान करने की घोषणा करता है, तो उसे संबंधित वीटीएस परीक्षण पास करना होगा। परीक्षण डिफ़ॉल्ट इंस्टेंस (यह सुनिश्चित करने के लिए कि डिवाइस एचएएल को सही ढंग से कार्यान्वित करता है) और बैकअप इंस्टेंस (यह सुनिश्चित करने के लिए कि हटाए जाने से पहले healthd
सही ढंग से काम करता रहे) दोनों के लिए लिखे गए हैं।
बैटरी सूचना आवश्यकताएँ
बैटरी सूचना आवश्यकताएँ देखें।