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

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

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

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

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

Health 2.1 HAL को लागू करने के लिए, इस पेज पर रेफ़रंस के तौर पर दस्तावेज़ दिए गए हैं.

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

इस सेक्शन में, Android 11, 12, और 13 या उसके बाद के वर्शन के लिए ज़रूरी शर्तें दी गई हैं.

Android 11 और Android 12 वर्शन वाले डिवाइस

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

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

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

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

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

शब्दावली

Android डिवाइस के बेहतर तरीके से काम करने से जुड़े दस्तावेज़ों को पढ़ने से पहले, आपको इन शब्दों के बारे में पता होना चाहिए:

health@2.1
android.hardware.health@2.1 का छोटा रूप. health HIDL का पहला वर्शन, Android 11 में रिलीज़ किया गया था.
health AIDL HAL
android.hardware.health का छोटा रूप. health AIDL HAL का पहला वर्शन, Android 13 में रिलीज़ किया गया था.
चार्जर
चार्जिंग के ऑफ़-मोड में चलने वाला ऐसा प्रोग्राम जो फ़ोन चार्ज होने का ऐनिमेशन दिखाता है.
recovery
रिकवरी मोड में चलने वाला एक्ज़ीक्यूटेबल, जिसे बैटरी की जानकारी हासिल करनी है.
स्टोर किया गया
डेमन, जो स्टोरेज की जानकारी हासिल करता है और उसे फ़्रेमवर्क को उपलब्ध कराता है.

Android 11 और 12 में Health

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

[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)      ] |
+-------------------------------------+

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

[       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)      ] |
+-------------------------------------+

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

Health HIDL HAL 2.1 इंफ़्रास्ट्रक्चर

पहली इमेज. Health HIDL HAL 2.1 इंफ़्रास्ट्रक्चर.

Android 13 में Health

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

Health AIDL HAL इन्फ़्रास्ट्रक्चर

दूसरी इमेज. Health AIDL HAL इंफ़्रास्ट्रक्चर.

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 सेवा 2.1 को लागू करने के बारे में जानकारी के लिए, Health 2.1 को लागू करना लेख पढ़ें.

AIDL HAL इंटरफ़ेस का वर्शन 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 डायग्राम

चौथी इमेज. Health AIDL HAL का UML डायग्राम.

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

रिकवरी

Android 13 में रिकवरी मोड में बाइंडर की सुविधा काम करती है. रिकवरी में Health AIDL सेवा इंस्टॉल करने से, उसे रिकवरी मोड में चलाया जा सकता है.

रिकवरी मोड में, डिवाइस की परफ़ॉर्मेंस से जुड़ी जानकारी देने वाली AIDL सेवा को इंस्टॉल करने के बारे में जानने के लिए, यह लेख पढ़ें:

चार्जर

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

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

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