Android 13 में android.hardware.health
एआईडीएल एचएएल शामिल है. यह health@2.1 एचएएल से कन्वर्ज़न है. इस नए एचएएल के ये फ़ायदे हैं:
- चार्जर से जुड़े इस्तेमाल न किए गए एपीआई हटाना
- इस्तेमाल न किए गए
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 एचएएल या एआईडीएल एचएएल होना चाहिए. जिन डिवाइसों को Android 11 या 12 के साथ लॉन्च नहीं किया जा रहा है, लेकिन वे वेंडर इमेज को टारगेट फ़्रेमवर्क के साथ काम करने वाले मैट्रिक्स के वर्शन 5 (Android 11 में रिलीज़ किया गया) या 6 (Android 12 में रिलीज़ किया गया) पर अपडेट करने वाले हैं उन्हें एचएएल के मौजूदा 2.0 वर्शन को हटाना होगा और 2.1 एचएएल या एआईडीएल एचएएल उपलब्ध कराना होगा. जिन डिवाइसों को Android 11 के साथ लॉन्च नहीं किया जा रहा है और जिनके लिए वेंडर इमेज को अपडेट करने की योजना नहीं है उनके लिए भी 2.1 या AIDL HAL उपलब्ध कराने का सुझाव दिया जाता है.
AOSP में कई सहायक लाइब्रेरी शामिल हैं. इनका मकसद, 2.1 HAL को लागू करने और पुराने HIDL HAL से ट्रांज़िशन करने में आपकी मदद करना है.
Android 13 और इसके बाद के वर्शन वाले डिवाइस
Android 13 के साथ लॉन्च होने वाले डिवाइसों में, एआईडीएल एचएएल होना चाहिए. साथ ही, उनमें एचआईडीएल एचएएल नहीं होना चाहिए. जिन डिवाइसों को Android 13 के साथ लॉन्च नहीं किया जा रहा है, लेकिन वे वेंडर इमेज को टारगेट फ़्रेमवर्क के साथ काम करने वाले मैट्रिक्स के वर्शन 7 (Android 13 में रिलीज़ किया गया) पर अपडेट करने वाले हैं उन्हें मौजूदा एचआईडीएल एचएएल को हटाना होगा और एआईडीएल एचएएल उपलब्ध कराना होगा. जिन डिवाइसों को Android 13 के साथ लॉन्च नहीं किया जा रहा है और जिनके लिए वेंडर इमेज को अपडेट करने का प्लान नहीं है उनके लिए भी एआईडीएल एचएएल उपलब्ध कराने का सुझाव दिया जाता है.
AOSP में कई हेल्पर लाइब्रेरी शामिल हैं. इनका मकसद, आपको AIDL HAL और पुराने HIDL HAL से ट्रांज़िशन करने और उन्हें लागू करने में मदद करना है.
शब्दावली
Android डिवाइस के बेहतर तरीके से काम करने से जुड़े दस्तावेज़ों को पढ़ने से पहले, आपको इन शब्दों के बारे में पता होना चाहिए:
- health@2.1
android.hardware.health@2.1
का छोटा रूप. Android 11 में, हेल्थ एपीआई के एचआईडीएल का पहला वर्शन रिलीज़ किया गया था.- health एआईडीएल एचएएल
android.hardware.health
का छोटा रूप. 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 इंफ़्रास्ट्रक्चर.
Android 13 में Health
Android 13 में, हेल्थ एआईडीएल एचएएल को पेश किया गया है. दूसरे चित्र में बताया गया है कि हेल्थ कॉम्पोनेंट कैसे काम करता है:
दूसरी इमेज. Health के एआईडीएल एचएएल इंफ़्रास्ट्रक्चर.
एचआईडीएल एचएएल इंटरफ़ेस 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 HAL 2.1 का यूएमएल डायग्राम.
Health सेवा 2.1 को लागू करने के बारे में जानकारी के लिए, Health 2.1 को लागू करना लेख पढ़ें.
एआईडीएल एचएएल इंटरफ़ेस का वर्शन 1
इस सेक्शन में, एआईडीएल एचएएल इंटरफ़ेस के वर्शन 1 के बारे में जानकारी दी गई है.
एपीआई में हुए बदलाव
AIDL वर्शन 1 एचएएल, HIDL 2.1 एचएएल के जैसे एपीआई के साथ काम करता है. HIDL 2.1 इंटरफ़ेस की तुलना में, एपीआई में ये बदलाव किए गए हैं:
- चार्जर से जुड़े एपीआई, एचआईडीएल एचएएल 2.1 में जोड़े गए हैं. इन्हें एआईडीएल एचएएल में पोर्ट नहीं किया गया है. ऑफ-मोड चार्जिंग की सुविधा सिर्फ़
/vendor
पार्टीशन पर काम करती है. इसलिए, वेंडर इंटरफ़ेस पर एपीआई ज़रूरी नहीं हैं. ऑफ-मोड चार्जिंग की सुविधा को सही तरीके से लागू करने के लिए, चार्जर लेख पढ़ें. - टाइप
StorageAttribute
और उससे जुड़े फ़ील्ड हटा दिए गए हैं, क्योंकि इनका इस्तेमाल नहीं किया जाता. - डॉक से चार्ज करने की सुविधा के लिए,
chargerDockOnline
कोHealthInfo
में जोड़ा गया है.
लागू करना
चौथे चित्र में, उन क्लास का यूएमएल डायग्राम दिखाया गया है जो स्वास्थ्य से जुड़े एआईडीएल एचएएल को लागू करने के लिए काम के हैं:
चौथी इमेज. Health के एआईडीएल एचएएल का यूएमएल डायग्राम.
हेल्थ एआईडीएल सेवा को लागू करने के बारे में जानकारी के लिए, हेल्थ एआईडीएल एचएएल को लागू करना लेख देखें.
रिकवरी
Android 13, रिकवरी मोड में बाइंडर के साथ काम करता है. रिकवरी में Health AIDL सेवा इंस्टॉल करने से, उसे रिकवरी मोड में चलाया जा सकता है.
रिकवरी मोड में, डिवाइस की परफ़ॉर्मेंस की जानकारी देने वाली AIDL सेवा को इंस्टॉल करने के बारे में जानने के लिए, ये लेख पढ़ें:
चार्जर
ऑफ-मोड चार्जिंग की सुविधा को /system
से /vendor
में ले जाया गया है. Android 13 के साथ लॉन्च होने वाले डिवाइसों के लिए, अगर वे ऑफ़-मोड चार्जिंग की सुविधा के साथ काम करते हैं, तो एचएएल सेवा बाइनरी में चार्जर मोड की सुविधा होनी चाहिए. ऐसा करने के लिए,
चार्जर लागू करने से जुड़ा लेख पढ़ें.
चार्जर सिस्टम की प्रॉपर्टी
/vendor
में मौजूद charger
बाइनरी, अब ro.charger.*
प्रॉपर्टी को नहीं पढ़ सकती. अगर आपके डिवाइस में ro.charger.*
सिस्टम प्रॉपर्टी सेट है, तो चार्जर के लिए सिस्टम प्रॉपर्टी देखें.