Health 2.1 लागू करें

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

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 की सेवा काम न करे. पीछे जाएं पुरानी वेंडर इमेज के साथ काम करने की सुविधा को रोकने का शेड्यूल.

यह पक्का करने के लिए कि पुराने सिस्टम के साथ काम किया जा सकता है:

  1. healthd, सिस्टम होने के बावजूद IHealth को hwservicemanager में रजिस्टर करता है डीमन. IHealth को सिस्टम मेनिफ़ेस्ट में, इंस्टेंस के नाम के साथ जोड़ा गया "बैकअप".
  2. फ़्रेमवर्क और storaged, healthd के साथ hwbinder के ज़रिए बातचीत करते हैं binder के बजाय.
  3. इंस्टेंस फ़ेच करने के लिए, फ़्रेमवर्क और storaged के कोड को बदल दिया जाता है "डिफ़ॉल्ट" अगर उपलब्ध हो, तो "बैकअप" लें.
    • C++ क्लाइंट कोड, libhealthhalutils में बताए गए लॉजिक का इस्तेमाल करता है.
    • Java क्लाइंट कोड, HealthServiceWrapper में बताए गए लॉजिक का इस्तेमाल करता है.
  4. 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 पावर सप्लाई क्लास.