Android 11 में, healthd
के सभी कोड को
libhealthloop
और libhealth2impl
. इसके बाद, Health@2.1 को लागू करने के लिए बदलाव किया गया
हैल. ये दोनों लाइब्रेरी, health@2.0-impl-2.1
की मदद से स्टैटिक रूप से लिंक की गई हैं,
Health 2.1 का पासथ्रू लागू करना. स्टैटिक रूप से लिंक की गई लाइब्रेरी
health@2.0-impl-2.1
को वही काम करने की अनुमति दें जो healthd
की तरह है, जैसे कि दौड़ना
healthd_mainloop
और पोलिंग. इनिट में, health@2.1-service
ने
IHealth
इंटरफ़ेस को hwservicemanager
तक लागू करना. अपग्रेड ��रते समय
Android 8.x या 9 वर्शन वाले डिवाइस
वेंडर की इमेज और Android 11 फ़्रेमवर्क के लिए,
हो सकता है कि वेंडर इमेज में Health@2.1 की सेवा काम न करे. पीछे जाएं
पुरानी वेंडर इमेज के साथ काम करने की सुविधा को
रोकने का शेड्यूल.
यह पक्का करने के लिए कि पुराने सिस्टम के साथ काम किया जा सकता है:
healthd
, सिस्टम होने के बावजूदIHealth
कोhwservicemanager
में रजिस्टर करता है डीमन.IHealth
को सिस्टम मेनिफ़ेस्ट में, इंस्टेंस के नाम के साथ जोड़ा गया "बैकअप".- फ़्रेमवर्क और
storaged
,healthd
के साथhwbinder
के ज़रिए बातचीत करते हैंbinder
के बजाय. - इंस्टेंस फ़ेच करने के लिए, फ़्रेमवर्क और
storaged
के कोड को बदल दिया जाता है "डिफ़ॉल्ट" अगर उपलब्ध हो, तो "बैकअप" लें.- C++ क्लाइंट कोड,
libhealthhalutils
में बताए गए लॉजिक का इस्तेमाल करता है. - Java क्लाइंट कोड,
HealthServiceWrapper
में बताए गए लॉजिक का इस्तेमाल करता है.
- C++ क्लाइंट कोड,
- IHealth/default सभी के लिए उपलब्ध होने के बाद और Android 8.1 वेंडर की इमेज
बंद किए गए, IHealth/backup और
healthd
बंद किए जा सकते हैं. ज़्यादा के लिए विवरण, देखें health@1.0 को बंद किया जा रहा है.
अच्छी सेहत के लिए बोर्ड के हिसाब से बिल्ड वैरिएबल
BOARD_PERIODIC_CHORES_INTERVAL_*
, बोर्ड के हिसाब से वैरिएबल होते हैं. इनका इस्तेमाल करके
healthd
. सिस्टम/वेंडर बिल्ड स्प्लिट के हिस्से के तौर पर, बोर्ड के मुताबिक वैल्यू
सिस्टम मॉड्यूल के लिए नहीं तय किया जा सकता. इन वैल्यू को बदला जाता था
काम नहीं करने वाले फ़ंक्शन healthd_board_init
में.
Health@2.1 में, वेंडर इसे बदल सकते हैं
healthd_config
संरचना में, पहले
हेल्थ इंप्लिमेंटेशन क्लास कंस्ट्रक्टर से पास करना होगा. द हेल्थ
लागू होने वाली क्लास को यहां से इनहेरिट किया जाना चाहिए
android::hardware::health::V2_1::implementation::Health
.
Health 2.1 सेवा लागू करें
Health 2.1 सेवा को लागू करने के बारे में जानकारी के लिए, यहां देखें हार्डवेयर/इंटरफ़ेस/health/2.1/README.md.
स्वास्थ्य से जुड़े क्लाइंट
Health@2.x के ये क्लाइंट हैं:
- चार्जर.
libbatterymonitor
औरhealthd_common
कोड का इस्तेमाल किया गया हैhealth@2.0-impl
में रैप किया गया. - वापस पाना.
libbatterymonitor
का लिंक रैप हो गया हैhealth@2.0-impl
.BatteryMonitor
को किए जाने वाले सभी कॉल कोHealth
लागू करने की क्लास. बैटरी मैनेजर. सिर्फ़
BatteryManager.queryProperty(int id)
थाIBatteryPropertiesRegistrar.getProperty
का क्लाइंट.IBatteryPropertiesRegistrar.getProperty
इन्होंने दिया थाhealthd
और सीधे/sys/class/power_supply
पढ़ें.सुरक्षा को ध्यान में रखते हुए, ऐप्लिकेशन को हेल्थ एचएएल में शामिल होने की अनुमति नहीं है सकता है. Android 9 और उसके बाद वाले वर्शन के लिए, बाइंडर
IBatteryPropertiesRegistrar
सेवा,BatteryService
उपलब्ध कराता हैhealthd
के बजाय.BatteryService
ने हेल्थ एचएएल को कॉल सौंपी है का इस्तेमाल करें.बैटरीसेवा. Android 9 और उसके बाद के वर्शन में,
BatteryService
,HealthServiceWrapper
क�� इस्तेमाल करके यह तय करता है कि स्वास्थ्य सेवा के इंस्टेंस कोvendor
से डिफ़ॉल्ट पर सेट करें या बैकअप का इस्तेमाल करें स्वास्थ्य सेवा इंस्टेंसhealthd
से लिया गया है.BatteryService
इसके बाद सुनेंIHealth.registerCallback
तक स्वास्थ्य से जुड़े इवेंट.स्टोरेज में सेव किया गया डेटा. Android 9 और उसके बाद के वर्शन में,
storaged
,libhealthhalutils
का इस्तेमाल करके यह तय करता है कि स्वास्थ्य सेवा के इंस्टेंस कोvendor
से डिफ़ॉल्ट पर सेट करें या बैकअप का इस्तेमाल करें स्वास्थ्य सेवा इंस्टेंसhealthd
से लिया गया है.storaged
के बादIHealth.registerCallback
के ज़रिए स्वास्थ्य से जुड़े इवेंट सुनता है और वापस लाता है डिवाइस की मेमोरी की जानकारी देखें.
SELinux बदलाव
Health@2.1 HAL में प्लैटफ़ॉर्म के इन SELinux बदलावों को शामिल किया गया है:
file_contexts
मेंandroid.hardware.health@2.1-service
को जोड़ता है.
जिन डिवाइसों के लिए खुद का तरीका लागू होता है उनके लिए, SELinux के कुछ वेंडर के बदलाव ज़रूरी है. उदाहरण:
# 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 इंटरफ़ेस
healthd
डीमन और डिफ़ॉल्ट रूप से लागू होना
android.hardware.health@2.0-impl-2.1
इसके लिए नीचे दिए गए कर्नेल इंटरफ़ेस ऐक्सेस करता है
बैटरी की जानकारी फिर से पाएं:
/sys/class/power_supply/*/capacity_level
(Health 2.1 में जोड़ा गया)/sys/class/power_supply/*/capacity
/sys/class/power_supply/*/charge_counter
/sys/class/power_supply/*/charge_full
/sys/class/power_supply/*/charge_full_design
(Health 2.1 में जोड़ा गया)/sys/class/power_supply/*/current_avg
/sys/class/power_supply/*/current_max
/sys/class/power_supply/*/current_now
/sys/class/power_supply/*/cycle_count
/sys/class/power_supply/*/health
/sys/class/power_supply/*/online
/sys/class/power_supply/*/present
/sys/class/power_supply/*/status
/sys/class/power_supply/*/technology
/sys/class/power_supply/*/temp
/sys/class/power_supply/*/time_to_full_now
(Health 2.1 में जोड़ा गया)/sys/class/power_supply/*/type
/sys/class/power_supply/*/voltage_max
/sys/class/power_supply/*/voltage_now
libbatterymonitor
का इस्तेमाल करने वाले, डिवाइस के हिसाब से हेल्थ एचएएल को लागू करना
इन कर्नेल इंटरफ़ेस को डिफ़ॉल्ट रूप से ऐक्सेस करता है. ऐसा तब तक होता है, जब तक कि हेल्थ
लागू क्लास कंस्ट्रक्टर.
अगर ये फ़ाइलें healthd
या
डिफ़ॉल्ट सेवा (उदाहरण के लिए, फ़ाइल किसी वेंडर के खास फ़ोल्डर का सिमलिंक है
जो गलत कॉन्फ़िगर की गई SELinux नीति के चलते पहुंच से इनकार क��ती हैं, तो हो सकता है कि वे
ठीक से काम करता है. इसलिए, वेंडर के हिसाब से SELinux में कुछ अन्य बदलाव
डिफ़ॉल्ट रूप से लागू होने पर भी यह ज़रूरी है.
Health 2.1 में इस्तेमाल किए जाने वाले कुछ कर्नेल इंटरफ़ेस, जैसे
/sys/class/power_supply/*/capacity_level
और
/sys/class/power_supply/*/time_to_full_now
, वैकल्पिक हो सकता है. हालांकि,
इससे कर्नेल इंटरफ़ेस के गायब होने की वजह से होने वाले गलत फ़्रेमवर्क के व्यवहार को रोका जा सकता है.
हमारी सलाह है कि आप अपनी इमेज के बारे में
13,98,913 चिलियन पेसो
हमने Health HAL 2.1 की सेवा शुरू कर दी थी.
टेस्ट करना
Android 11 में ये नए सुविधाएं शामिल हैं
वीटीएस टेस्ट
को खास तौर पर Health@2.1 HAL के लिए लिखा जाता है. अगर कोई डिवाइस यह एलान करता है
Health@2.1 एचएएल का इस्तेमाल करता है, तो उसे संबंधित वीटीएस टेस्ट को पास करना होगा.
दोनों डिफ़ॉल्ट इंस्टेंस के लिए जांच लिखी जाती हैं (यह पक्का करने के लिए कि डिवाइस
HAL और बैकअप इंस्टेंस को सही तरीके से लागू करता है (यह पक्का करने के लिए कि healthd
हटान�� से पहले, ठीक से काम करता रहता है).
बैटरी की जानकारी से जुड़ी ज़रूरी शर्तें
Health 2.0 एचएएल, एचएएल इंटरफ़ेस पर कुछ शर्तों के बारे में बताता है, लेकिन संबंधित वीटीएस टेस्ट को लागू करने में ज़्यादा छूट नहीं दी जाती है. Android 11 में, नए वीटीएस टेस्ट जोड़े गए हैं, ताकि Android के साथ लॉन्च होने वाले डिवाइसों के लिए, नीचे दी गई ज़रूरी शर्तें 11 और उससे ज़्यादा:
- इंटटेनियस और औसत बैटरी करंट की यूनिट, माइक्रोऐंप (μA) होनी चाहिए.
- तात्कालिक और औसत बैटरी करंट का चिह्न सही होना चाहिए.
खास तौर पर:
- बैटरी की स्थिति
UNKNOWN
होने पर करंट == 0 - वर्तमान > बैटरी की स्थिति
CHARGING
होने पर 0 दिखेगा - बैटरी के
NOT_CHARGING
होने पर करंट <= 0 - वर्तमान < बैटरी की स्थिति
DISCHARGING
होने पर 0 दिखेगा - बैटरी की स्थिति
FULL
होने पर लागू नहीं होती
- बैटरी की स्थिति
- बैटरी की स्थिति इसके हिसाब से सही होनी चाहिए कि पावर सोर्स सही है या नहीं
कनेक्ट किया गया. खास तौर पर:
- बैटरी की स्थिति
CHARGING
,NOT_CHARGING
याFULL
में से ��ोई एक होनी चाहिए, अगर और सिर्फ़ तब, जब पावर सोर्स कनेक्ट हो; - बैटरी की स्थिति
DISCHARGING
होनी चाहिए. ऐसा तब ही होगा, जब पावर सोर्स हो डिसकनेक्ट किया गया.
- बैटरी की स्थिति
अगर आप लागू करने में libbatterymonitor
का इस्तेमाल करते हैं और वैल्यू पास करते हैं
कर्नेल इंटरफ़ेस से, पक्का करें कि sysfs नोड सही वैल्यू रिपोर्ट कर रहे हैं:
- पक्का करें कि बैटरी करंट को सही साइन और यूनिट के साथ रिपोर्ट किया गया हो. यह
इसमें ये sysfs नोड शामिल हैं:
/sys/class/power_supply/*/current_avg
/sys/class/power_supply/*/current_max
/sys/class/power_supply/*/current_now
- पॉज़िटिव वैल्यू, बैटरी में करंट आने की जानकारी देती है.
- वैल्यू, माइक्रोऐंप (μA) में होनी चाहिए.
- पक्का करें कि बैटरी वोल्टेज, माइक्रोवोल्ट (μV) में रिपोर्ट किया गया हो. इसमें ये चीज़ें शामिल हैं
ये sysfs नोड पर मौजूद हैं:
/sys/class/power_supply/*/voltage_max
/sys/class/power_supply/*/voltage_now
- ध्यान दें कि डिफ़ॉल्ट एचएएल लागू करने पर,
voltage_now
को 1,000 से भाग दिया जाता है और वैल्यू को मिलीवोल्ट (mV) में रिपोर्ट करता है. यहां जाएं: @1.0::HealthInfo.
जानकारी के लिए, यह देखें Linux पावर सप्लाई क्लास.