Android सिस्टम की स्थिति

Android 9 में android.hardware.health HAL 2.0 शामिल है. यह health@1.0 HAL से वर्शन अपग्रेड किया गया है. इस नए एचएएल के ये फ़ायदे हैं:

  • फ़्रेमवर्क और वेंडर कोड के बीच का अंतर साफ़ तौर पर दिखता है.
  • ग़ैर-ज़रूरी healthd डेमन को बंद कर दिया गया है.
  • इससे स्वास्थ्य से जुड़ी जानकारी वाली रिपोर्ट में, वेंडर को अपनी पसंद के मुताबिक बनाने की ज़्यादा आज़ादी मिलती है.
  • बैटरी के अलावा, डिवाइस की परफ़ॉर्मेंस से जुड़ी ज़्यादा जानकारी पाएं.

Android 11 में android.hardware.health HAL 2.1 शामिल है. यह health@2.0 HAL से, वर्शन में किया गया मामूली अपग्रेड है. इस नए एचएएल के ये फ़ायदे हैं:

  • लागू करने में आसान
  • मौजूदा 2.0 एचएएल एपीआई के साथ बेहतर तरीके से अनुपालन
  • ऑफ़-मोड चार्जिंग कोड में बेहतर ट्रेबल सेपरेशन
  • डिवाइस की बैटरी की परफ़ॉर्मेंस के बारे में बताने के लिए, फ़्रेमवर्क के लिए बेहतर सहायता

Android 13 में android.hardware.health AIDL HAL शामिल है. यह health@2.1 HAL से कन्वर्ज़न है. इस नए एचएएल के ये फ़ायदे हैं:

  • चार्जर से जुड़े इस्तेमाल न किए गए एपीआई हटाना
  • इस्तेमाल नहीं किए गए StorageAttribute और उससे जुड़े फ़ील्ड हटाएं
  • डॉक से चार्ज करने की सुविधा.

ज़रूरी शर्तें

Android 9 और Android 10 वाले डिवाइस

Android 9 के साथ लॉन्च होने वाले डिवाइसों में 2.x HAL (1.0 HAL नहीं) या AIDL HAL होना चाहिए. जिन डिवाइसों को Android 9 के साथ लॉन्च नहीं किया जा रहा है, लेकिन वे वेंडर इमेज को टारगेट फ़्रेमवर्क के साथ काम करने वाले मैट्रिक्स के वर्शन 3 (Android 9 में रिलीज़ किया गया) पर अपडेट करने वाले हैं उन्हें मौजूदा 1.0 एचएएल को हटाना होगा और 2.x एचएएल या एआईडीएल एचएएल उपलब्ध कराना होगा.

एओएसपी में कई हेल्पर लाइब्रेरी होती हैं, जो 2.0 एचएएल और पुराने 1.0 एचएएल से ट्रांज़िशन को लागू करने में आपकी मदद करने के लिए डिज़ाइन की गई हैं.

Android 11 और Android 12 पर चलने वाले डिवाइस

Android 11 के साथ लॉन्च होने वाले डिवाइसों में, 2.1 HAL (और 1.0 या 2.0 HAL) या AIDL HAL की सुविधा नहीं होनी चाहिए. जिन डिवाइसों को Android 11 के साथ लॉन्च नहीं किया जा रहा है, लेकिन वे वेंडर इमेज को टारगेट फ़्रेमवर्क के साथ काम करने वाले मैट्रिक्स के वर्शन 5 (Android 11 में रिलीज़ किया गया) पर अपडेट करने वाले हैं उन्हें मौजूदा 2.0 एचएएल को हटाना होगा और 2.1 एचएएल या एआईडीएल एचएएल उपलब्ध कराना होगा. हमारा सुझाव है कि जिन डिवाइसों को Android 11 के साथ लॉन्च नहीं किया जा रहा है और जिनके लिए वेंडर इमेज को अपडेट करने की योजना नहीं है उनमें भी 2.1 एचएएल उपलब्ध कराया जाए.

AOSP में कई हेल्पर लाइब्रेरी शामिल हैं. इनका मकसद, 2.1 HAL को लागू करने और पुराने 1.0 HAL से ट्रांज़िशन करने में आपकी मदद करना है.

Android 13 और उसके बाद के वर्शन पर चलने वाले डिवाइस

Android 13 के साथ लॉन्च होने वाले डिवाइसों में AIDL HAL होना चाहिए. साथ ही, इसमें HIDL HAL नहीं होना चाहिए. जिन डिवाइसों को Android 13 के साथ लॉन्च नहीं किया जा रहा है, लेकिन वे वेंडर इमेज को टारगेट फ़्रेमवर्क के साथ काम करने वाले मैट्रिक्स के वर्शन 7 (Android 13 में रिलीज़ किया गया) पर अपडेट करने वाले हैं उन्हें मौजूदा HIDL HAL लागू करने की सुविधा हटानी होगी और AIDL HAL उपलब्ध कराना होगा. जिन डिवाइसों को Android 13 के साथ लॉन्च नहीं किया जा रहा है और जिनके लिए वेंडर इमेज को अपडेट करने की योजना नहीं है उनके लिए भी AIDL HAL उपलब्ध कराने का सुझाव दिया जाता है.

डिवाइसों में HIDL 1.0 HAL नहीं होना चाहिए.

AOSP में कई हेल्पर लाइब्रेरी शामिल हैं. इनका मकसद, आपको AIDL HAL को लागू करने और पुराने HIDL HAL से ट्रांज़िशन करने में मदद करना है.

शब्दावली

  • health@1.0: android.hardware.health@1.0 का छोटा रूप. यहां Android 8.0 के बाद रिलीज़ किए गए HIDL HAL के वर्शन 1.0 के बारे में बताया गया है.
  • health@2.0: android.hardware.health@2.0 का छोटा नाम. यह Android 9 में रिलीज़ किया गया, Health HIDL HAL वर्शन 2.0 है.
  • health@2.1: android.hardware.health@2.1 का छोटा नाम. Android 11 में रिलीज़ किए गए, health HIDL HAL वर्शन 2.1 का रेफ़रंस देता है.
  • health AIDL HAL: android.hardware.health का छोटा रूप.
    • Android 13 का वर्शन 1 रिलीज़ किया गया है.
  • charger: इसे ऑफ़-मोड चार्जिंग में चलाया जा सकता है, जो फ़ोन चार्ज करने का ऐनिमेशन दिखाता है.
  • रिकवरी: रिकवरी मोड में चलाने के लिए एक्ज़ीक्यूटेबल है, जिसके लिए बैटरी की जानकारी हासिल करना ज़रूरी है.
  • healthd: Android में चलने वाला लेगसी डेमन, जो डिवाइस की परफ़ॉर्मेंस से जुड़ी जानकारी हासिल करता है और उसे फ़्रेमवर्क को उपलब्ध कराता है.
  • storaged: Android में चलने वाला डेमन, जो स्टोरेज की जानकारी हासिल करता है और उसे फ़्रेमवर्क को उपलब्ध कराता है.

Android 8.x में स्वास्थ्य

Android 8.x में, सेहत से जुड़ा कॉम्पोनेंट इस डायग्राम में बताए गए तरीके से काम करता है:

Android 8.x में स्वास्थ्य

पहली इमेज. Android 8.x में Health.

इस डायग्राम में:

  • फ़्रेमवर्क, हार्डवेयर के साथ कम्यूनिकेट करने के लिए, एक (1) बाइंडर कॉल और एक (1) hwbinder कॉल का इस्तेमाल करता है.
  • healthd स्टैटिक रूप से libhealthd_android, libbatterymonitor, और libbatteryservice से लिंक होता है.
  • Health@1.0-impl, libhealthd.BOARD से स्टैटिक रूप से लिंक करता है.

हर बोर्ड, अलग-अलग libhealthd.BOARD को पसंद के मुताबिक बना सकता है; बिल्ड के समय यह तय किया जाता है कि चार्जर, health@1.0-impl, और रिकवरी लिंक किस पर लिंक किया जाए.

अन्य मोड के लिए:

Android 8.x में ऑफ़-मोड चार्जिंग और रिकवरी मोड

दूसरी इमेज. Android 8.x में मौजूद Health, ऑफ़-मोड चार्जिंग, और रिकवरी मोड.

  • चार्जर, libhealthd.BOARD, libhealthd_charger, और libbatterymonitor से स्टैटिक तौर पर लिंक होता है.
  • recovery, libhealthd.BOARD और libbatterymonitor से स्टैटिक तौर पर लिंक होता है.

Android 9 में सेहत से जुड़ा डेटा

Android 9 में, डिवाइस की परफ़ॉर्मेंस से जुड़ा कॉम्पोनेंट, इस डायग्राम में बताए गए तरीके से काम करता है: Android 9 में Health

तीसरी इमेज. Android 9 में हेल्थ.

फ़्रेमवर्क, hwservicemanager से health@2.0 सेवा को वापस पाने की कोशिश करता है. अगर ऐसा नहीं होता है, तो यह Android 8.x में health@1.0 को कॉल करता है. लेगसी कोड पाथ को इसलिए रखा गया है, ताकि Android 9 सिस्टम इमेज, Android 8.x वेंडर इमेज के साथ काम कर सके. यह फ़्रेमवर्क, दोनों एचएएल से जानकारी हासिल नहीं करता, क्योंकि डिवाइस पर सेवा का सिर्फ़ एक वर्शन (1.0 या 2.0) मौजूद हो सकता है.

अन्य मोड के लिए:

Android 9 में, ऑफ़-मोड चार्जिंग और रिकवरी

चौथी इमेज. Android 9 में मौजूद हेल्थ, ऑफ़-मोड चार्जिंग, और रिकवरी मोड.

Android 11 में सेहत से जुड़े अपडेट

Android 11 में, सेहत से जुड़ा कॉम्पोनेंट इस डायग्राम में बताए गए तरीके से काम करता है:

[system]
    | getService()
    V
[health@2.1-service]
        | getService(stub=true)
        V
[      health@2.0-impl-2.1-<device>.so      ]
        |                                  | (device-dependent linkage)
        V                                  V
+---------Helper libs for impl--------+   [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl)    ] |
| [libbatterymonitor (battery)      ] |
+-------------------------------------+

अगर हेल्थ 2.1 लागू नहीं है, तो सिस्टम पिछले सेक्शन में बताए गए लेगसी कोड पाथ पर वापस चला जाता है

अन्य मोड के लिए:

[       charger          ]
    | getService()      |  (legacy code path)
    V                   +-------------------------------------------------+
[health@2.1-service]                                                      |
        | getService(stub=true)                                           |
        V                                                                 |
[      health@2.0-impl-2.1-<device>.so      ]                             |
        |                                  | (device-dependent linkage)   |
        V                                  V                              |
+---------Helper libs for impl--------+   [libhealthd.device]             |
| [libhealthloop (uevent, wakealarm)] |                                   |
| [libhealth2impl (IHealth impl)    ] | <---------------------------------+
| [libbatterymonitor (battery)      ] |
+-------------------------------------+
[recovery]
        | getService() w/o hwservicemanager
        V
[      health@2.0-impl-2.1-<device>.so      ]
        |                                  | (device-dependent linkage)
        V                                  V
+---------Helper libs for impl--------+   [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl)    ] |
| [libbatterymonitor (battery)      ] |
+-------------------------------------+

अलग-अलग मोड के लिए नीचे दिए गए आसान डायग्राम देखें:

हेल्थ एचएएल 2.1 इन्फ़्रास्ट्रक्चर

पांचवी इमेज. हेल्थ एचएएल 2.1 इन्फ़्रास्ट्रक्चर.

Android 13 में स्वास्थ्य की जानकारी

Android 13 में, हेल्थ एआईडीएल एचएएल को पेश किया गया है. नीचे दिए गए डायग्राम में, हेल्थ कॉम्पोनेंट के काम करने का तरीका बताया गया है:

हेल्थ एआईडीएल एचएएल इन्फ़्रास्ट्रक्चर

छठी इमेज. Health AIDL HAL इन्फ़्रास्ट्रक्चर.

HIDL HAL इंटरफ़ेस 2.0

health@2.0 HAL, फ़्रेमवर्क को वही फ़ंक्शन देता है जो पुराने healthd डीमन देता था. यह ऐसे एपीआई भी उपलब्ध कराता है जो पहले healthd ने बाइंडर सेवा (जैसे, IBatteryPropertiesRegistrar) के तौर पर उपलब्ध कराए थे.

मुख्य इंटरफ़ेस, IHealth , ये फ़ंक्शन उपलब्ध कराता है:

  • IBatteryPropertiesRegistrar.registerListener को बदलने के लिए, registerCallback
  • unregisterCallback, IBatteryPropertiesRegistrar.unregisterListener को बदलने के लिए
  • update, IBatteryPropertiesRegistrar.scheduleUpdate की जगह
  • IBatteryPropertiesRegistrar.getProperties को इनसे बदल दिया गया है:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

इसके अलावा, IHealth, storaged के लिए यहां दिए गए नए एपीआई भी उपलब्ध कराता है, ताकि वेंडर के हिसाब से स्टोरेज से जुड़ी जानकारी वापस पाई जा सके:

  • getStorageInfo
  • getDiskStats

कॉलबैक और getHealthInfo की मदद से, एक नया स्ट्रक्चर @2.0::HealthInfo दिखाया जाता है. इस स्ट्रक्चर में, डिवाइस की परफ़ॉर्मेंस से जुड़ी वह सारी जानकारी होती है जो health@2.0 के एचएएल के ज़रिए उपलब्ध होती है. जैसे:

  • चार्जिंग की जानकारी (एसी/यूएसबी/वायरलेस, मौजूदा, वोल्टेज वगैरह)
  • बैटरी की जानकारी (मौजूदगी, बैटरी लेवल, करंट, वोल्टेज, चार्ज, टेक्नोलॉजी वगैरह)
  • स्टोरेज की जानकारी (स्टोरेज डिवाइस की जानकारी, डिस्क के आंकड़े)

Health Service 2.0 को लागू करने के बारे में जानकारी पाने के लिए, Health 2.0 को लागू करना लेख पढ़ें.

HIDL HAL इंटरफ़ेस 2.1

health@2.1 HAL, डिवाइस के बंद होने पर चार्ज करने की सुविधा के साथ काम करता है. साथ ही, बैटरी के बारे में ज़्यादा जानकारी देता है.

मुख्य इंटरफ़ेस, IHealth, इन अतिरिक्त फ़ंक्शन को उपलब्ध कराता है

  • getHealthConfig: इस एचएएल का कॉन्फ़िगरेशन वापस पाने के लिए
  • getHealthInfo_2_1: getHealthInfo में अपग्रेड किया गया माइनर वर्शन
  • shouldKeepScreenOn: यह तय करने के लिए कि चार्जर मोड में स्क्रीन चालू रखी

इसके अलावा, @2.1::IHealth को लागू करना ज़रूरी है, ताकि @2.1::IHealthInfoCallback के इनहेरिट किए गए registerCallback और unregisterCallback फ़ंक्शन काम कर सकें. नया कॉलबैक इंटरफ़ेस, इनहेरिट किए गए healthInfoChanged फ़ंक्शन के बजाय, अपने healthInfoChanged_2_1 फ़ंक्शन का इस्तेमाल करके क्लाइंट को हेल्थ की जानकारी दिखाता है.

कॉलबैक और getHealthInfo_2_1 के ज़रिए एक नया स्ट्रक्चर, @2.1::HealthInfo दिखाया जाता है. इस निर्देश में, डिवाइस की स्वास्थ्य से जुड़ी अन्य जानकारी Health@2.0 HAL पर उपलब्ध है. इसमें ये शामिल हैं:

  • बैटरी की क्षमता का लेवल
  • बैटरी को पूरी तरह चार्ज होने में अब लगने वाला समय (सेकंड में)
  • बैटरी की पूरी तरह चार्ज होने की डिज़ाइन क्षमता (μAh में)

स्वास्थ्य से जुड़े एचएएल लागू करने के लिए काम की क्लास के बारे में जानने के लिए, यहां दिया गया यूएमएल डायग्राम देखें:

Health 2.1 HAL का UML डायग्राम

सातवीं इमेज. Health HAL 2.1 का यूएमएल डायग्राम.

Health Service 2.1 को लागू करने के बारे में जानकारी पाने के लिए, Health 2.1 को लागू करना लेख पढ़ें.

AIDL HAL इंटरफ़ेस का वर्शन 1

एपीआई में हुए बदलाव

AIDL वर्शन 1 HAL, HIDL 2.1 HAL जैसे एपीआई के साथ काम करता है. HIDL 2.1 इंटरफ़ेस की तुलना में, एपीआई में ये बदलाव किए गए हैं:

  • चार्जर से जुड़े एपीआई, HIDL HAL 2.1 में जोड़े गए हैं. इन्हें AIDL HAL में पोर्ट नहीं किया गया है. ऑफ़-मोड चार्जिंग की सुविधा सिर्फ़ /vendor पार्टीशन में ही काम करती है. इसलिए, वेंडर इंटरफ़ेस पर एपीआई की ज़रूरत नहीं होती. ऑफ-मोड चार्जिंग की सुविधा को सही तरीके से लागू करने के लिए, नीचे चार्जर देखें.
  • टाइप StorageAttribute और उससे जुड़े फ़ील्ड हटा दिए गए हैं, क्योंकि इनका इस्तेमाल नहीं किया जाता.
  • डॉक से चार्ज करने की सुविधा के लिए, chargerDockOnline को HealthInfo में जोड़ा गया है.

लागू करना

स्वास्थ्य से जुड़े एचएएल लागू करने के लिए काम की क्लास के बारे में जानने के लिए, यहां दिया गया यूएमएल डायग्राम देखें:

Health AIDL HAL का UML डायग्राम

आठवीं इमेज. हेल्थ एआईडीएल एचएएल यूएमएल डायग्राम.

स्वास्थ्य से जुड़ी AIDL सेवा को लागू करने के बारे में जानकारी पाने के लिए, स्वास्थ्य से जुड़ी AIDL HAL को लागू करना लेख पढ़ें.

इमेज को रिकवर करें

Android 13 में रिकवरी मोड में बाइंडर की सुविधा काम करती है. हेल्थ एआईडीएल सेवा को रिकवरी के लिए इंस्टॉल करने से, यह सेवा रिकवरी मोड में काम करती है.

रिकवरी के लिए स्वास्थ्य एआईडीएल सेवा इंस्टॉल करने के बारे में जानकारी पाने के लिए, यहां देखें:

चार्जर

ऑफ-मोड चार्जिंग की सुविधा को /system से /vendor में ले जाया गया है. Android 13 के साथ लॉन्च होने वाले डिवाइसों के लिए, अगर वे ऑफ़-मोड चार्जिंग की सुविधा के साथ काम करते हैं, तो एचएएल सेवा बाइनरी में चार्जर मोड की सुविधा होनी चाहिए. ऐसा करने के लिए, चार्जर लगाना देखें.

चार्जर सिस्टम की प्रॉपर्टी

ro.charger.* प्रॉपर्टी को अब /vendor में मौजूद charger बाइनरी से पढ़ा नहीं जा सकता है. अगर आपके डिवाइस में, ro.charger.* में से किसी एक सिस्टम प्रॉपर्टी को सेट किया गया है, तो चार्जर के लिए सिस्टम प्रॉपर्टी देखें.