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