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 प्रदान करना चाहिए। डिवाइस जो एंड्रॉइड 9 के साथ लॉन्च नहीं हो रहे हैं, लेकिन वेंडर इमेज को टारगेट फ्रेमवर्क कम्पैटिबिलिटी मैट्रिक्स वर्जन 3 (एंड्रॉइड 9 में जारी) में अपडेट करने की योजना बना रहे हैं, मौजूदा 1.0 एचएएल कार्यान्वयन को हटा देना चाहिए और 2.x एचएएल या एआईडीएल एचएएल प्रदान करना चाहिए।
एओएसपी में 2.0 एचएएल और पुराने 1.0 एचएएल से संक्रमण को लागू करने में आपकी सहायता के लिए डिज़ाइन किए गए कई सहायक पुस्तकालय शामिल हैं।
Android 11 और Android 12 running चलाने वाले डिवाइस
Android 11 के साथ लॉन्च होने वाले उपकरणों को 2.1 HAL (और 1.0 या 2.0 HAL प्रदान नहीं करना चाहिए) या AIDL HAL प्रदान करना चाहिए। एंड्रॉइड 11 के साथ लॉन्च नहीं होने वाले डिवाइस, लेकिन वेंडर इमेज को टारगेट फ्रेमवर्क कम्पैटिबिलिटी मैट्रिक्स वर्जन 5 (एंड्रॉइड 11 में जारी) में अपडेट करने की योजना बना रहे हैं, मौजूदा 2.0 एचएएल कार्यान्वयन को हटा देना चाहिए और 2.1 एचएएल या एआईडीएल एचएएल प्रदान करना चाहिए। एंड्रॉइड 11 के साथ लॉन्च नहीं होने वाले डिवाइस और विक्रेता की छवि को अपडेट करने की योजना नहीं बनाने के लिए भी 2.1 एचएएल प्रदान करने की सिफारिश की जाती है।
एओएसपी में 2.1 एचएएल और पुराने 1.0 एचएएल से संक्रमण को लागू करने में आपकी सहायता के लिए डिज़ाइन किए गए कई सहायक पुस्तकालय शामिल हैं।
Android 13 और उसके बाद के वर्शन चला रहे डिवाइस
Android 13 के साथ लॉन्च होने वाले उपकरणों को AIDL HAL प्रदान करना चाहिए (और HIDL HAL प्रदान नहीं करना चाहिए)। डिवाइस जो Android 13 के साथ लॉन्च नहीं हो रहे हैं, लेकिन वेंडर इमेज को टारगेट फ्रेमवर्क कम्पैटिबिलिटी मैट्रिक्स वर्जन 7 (एंड्रॉइड 13 में जारी) में अपडेट करने की योजना बना रहे हैं, उन्हें मौजूदा HIDL HAL कार्यान्वयन को हटा देना चाहिए और AIDL HAL प्रदान करना चाहिए। Android 13 के साथ लॉन्च नहीं होने वाले और विक्रेता छवि को अपडेट करने की योजना नहीं बनाने वाले उपकरणों को भी AIDL HAL प्रदान करने की अनुशंसा की जाती है।
उपकरणों को HIDL 1.0 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 में जारी स्वास्थ्य HIDL HAL संस्करण 2.0 को संदर्भित करता है। - health@2.1 :
android.hardware.health@2.1
का संक्षिप्त नाम। Android 11 में जारी स्वास्थ्य HIDL HAL संस्करण 2.1 को संदर्भित करता है। - स्वास्थ्य एआईडीएल एचएएल :
android.hardware.health
का संक्षिप्त नाम।- संस्करण 1 Android 13 में जारी किया गया है।
- चार्जर : ऑफ-मोड चार्जिंग में चलने वाला निष्पादन योग्य जो फोन-चार्जिंग एनीमेशन प्रदर्शित करता है।
- पुनर्प्राप्ति : पुनर्प्राप्ति मोड में निष्पादन योग्य चल रहा है जिसे बैटरी जानकारी पुनर्प्राप्त करनी होगी।
- healthd : Android में चलने वाला लीगेसी डेमॉन जो स्वास्थ्य संबंधी जानकारी प्राप्त करता है और उसे फ्रेमवर्क प्रदान करता है।
- स्टोरेज : एंड्रॉइड में चल रहा डेमॉन जो स्टोरेज की जानकारी को पुनः प्राप्त करता है और इसे फ्रेमवर्क प्रदान करता है।
Android 8.x . में स्वास्थ्य
Android 8.x में, स्वास्थ्य घटक निम्न आरेख में विस्तृत रूप से कार्य करता है:
चित्र 1 . Android 8.x . में स्वास्थ्य
इस आरेख में:
- एक (1) बाइंडर कॉल और एक (1) hwbinder कॉल का उपयोग फ्रेमवर्क द्वारा हार्डवेयर के साथ संचार करने के लिए किया जाता है।
-
healthd
स्थिर रूप सेlibhealthd_android
,libbatterymonitor
, औरlibbatteryservice
से लिंक करता है। - health@1.0-impl स्थिर रूप से libhealthd से लिंक करता है
libhealthd. BOARD
।
प्रत्येक बोर्ड एक अलग libhealthd. BOARD
; यह निर्माण समय पर निर्धारित किया जाता है कि चार्जर, health@1.0-impl, और पुनर्प्राप्ति किससे लिंक है।
अन्य मोड के लिए:
चित्र 2. Android 8.x में स्वास्थ्य, ऑफ-मोड चार्जिंग और पुनर्प्राप्ति मोड
- चार्जर स्थिर रूप से
libhealthd. BOARD
,libhealthd_charger
औरlibbatterymonitor
। - पुनर्प्राप्ति स्थिर रूप से
libhealthd. BOARD
औरlibbatterymonitor
।
Android 9 . में स्वास्थ्य
एंड्रॉइड 9 में, स्वास्थ्य घटक निम्नलिखित आरेख में विस्तृत रूप से काम करता है:
चित्रा 3 । Android 9 . में स्वास्थ्य
ढांचा hwservicemanager से hwservicemanager
सेवा को पुनः प्राप्त करने का प्रयास करता है। यदि यह विफल हो जाता है, तो यह health@1.0 (एंड्रॉइड 8.x में) पर कॉल करता है। लीगेसी कोड पथ रखा गया है ताकि Android 9 सिस्टम छवि Android 8.x विक्रेता छवि के साथ संगत हो। फ्रेमवर्क दोनों एचएएल से जानकारी प्राप्त नहीं करता है क्योंकि डिवाइस पर केवल एक सेवा संस्करण (1.0 या 2.0) मौजूद हो सकता है।
अन्य मोड के लिए:
चित्रा 4. एंड्रॉइड 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) ] |
+-------------------------------------+
विभिन्न तरीकों के लिए निम्नलिखित सरलीकृत आरेख देखें:
चित्र 5. स्वास्थ्य एचएएल 2.1 अवसंरचना
Android 13 . में स्वास्थ्य
Android 13 में हेल्थ AIDL HAL को पेश किया गया है। स्वास्थ्य घटक निम्नलिखित आरेख में विस्तृत रूप से कार्य करता है:
चित्र 6. स्वास्थ्य एआईडीएल एचएएल अवसंरचना
एचआईडीएल एचएएल इंटरफेस 2.0
Health@2.0 HAL ढांचे को पुराने स्वस्थ डेमॉन के समान कार्यक्षमता प्रदान करता है। यह एपीआई भी प्रदान करता है जो पहले एक बाइंडर सेवा के रूप में प्रदान की गई healthd के समान हैं (यानी IBtteryPropertiesRegistrar )।
मुख्य इंटरफ़ेस, IHealth , निम्नलिखित कार्य प्रदान करता है:
-
registerCallback
,IBatteryPropertiesRegistrar.registerListener
को बदलने के लिए -
unregisterCallback
कॉलबैक ,IBatteryPropertiesRegistrar.unregisterListener
को बदलने के लिए -
update
,IBatteryPropertiesRegistrar.scheduleUpdate
. को बदलने के लिए -
IBatteryPropertiesRegistrar.getProperties
को निम्नलिखित द्वारा प्रतिस्थापित किया जाता है:-
getChargeCounter
-
getCurrentNow
-
getCurrentAverage
-
getCapacity
-
getEnergyCounter
-
getChargeStatus
-
getHealthInfo
-
इसके अलावा, IHealth
विक्रेता-विशिष्ट भंडारण संबंधी जानकारी प्राप्त करने के लिए storaged
के लिए निम्नलिखित नए एपीआई प्रदान करता है:
-
getStorageInfo
-
getDiskStats
एक नया स्ट्रक्चर, @2.0::HealthInfo
कॉलबैक और getHealthInfo
के माध्यम से लौटाया जाता है। इस संरचना में health@2.0 HAL के माध्यम से उपलब्ध सभी डिवाइस स्वास्थ्य जानकारी शामिल है, जिसमें शामिल हैं:
- चार्जिंग जानकारी (एसी/यूएसबी/वायरलेस, करंट, वोल्टेज, आदि)
- बैटरी की जानकारी (उपस्थिति, बैटरी स्तर, करंट, वोल्टेज, चार्ज, तकनीक, आदि)
- स्टोरेज की जानकारी (स्टोरेज डिवाइस की जानकारी, डिस्क के आंकड़े)
स्वास्थ्य सेवा 2.0 को लागू करने के बारे में जानकारी के लिए, स्वास्थ्य 2.0 लागू करना देखें।
एचआईडीएल एचएएल इंटरफ़ेस 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
फ़ंक्शन का उपयोग करके क्लाइंट को स्वास्थ्य स्वास्थ्य जानकारी लौटाता है।
एक नया स्ट्रक्चर, @2.1::HealthInfo
कॉलबैक और getHealthInfo_2_1
के माध्यम से लौटाया जाता है। इस संरचना में health@2.0 HAL के माध्यम से उपलब्ध अतिरिक्त डिवाइस स्वास्थ्य जानकारी शामिल है, जिसमें शामिल हैं:
- बैटरी क्षमता स्तर
- बैटरी चार्ज करने का समय अब पूरा हो गया है (सेकंड में)
- बैटरी पूर्ण चार्ज डिजाइन क्षमता (μAh में)
स्वास्थ्य एचएएल कार्यान्वयन के लिए उपयोगी कक्षाओं के लिए निम्नलिखित यूएमएल आरेख देखें:
चित्र 7. स्वास्थ्य एचएएल 2.1 यूएमएल आरेख
स्वास्थ्य सेवा 2.1 को लागू करने के बारे में जानकारी के लिए, स्वास्थ्य 2.1 लागू करना देखें।
एआईडीएल एचएएल इंटरफ़ेस संस्करण 1
एपीआई परिवर्तन
एआईडीएल संस्करण 1 एचएएल एचआईडीएल 2.1 एचएएल के समान एपीआई का समर्थन करता है। HIDL 2.1 इंटरफ़ेस की तुलना में, निम्नलिखित API में बदले गए हैं:
- एचआईडीएल एचएएल 2.1 में पेश किए गए चार्जर से संबंधित एपीआई एआईडीएल एचएएल में पोर्ट नहीं किए जाते हैं। चूंकि ऑफ-मोड चार्जिंग की कार्यक्षमता केवल
/vendor
विभाजन पर रहती है, इसलिए विक्रेता इंटरफेस पर एपीआई आवश्यक नहीं हैं। ऑफ-मोड चार्जिंग को ठीक से लागू करने के लिए, नीचे चार्जर देखें। - प्रकार
StorageAttribute
और संबंधित फ़ील्ड हटा दिए जाते हैं क्योंकि वे अप्रयुक्त हैं। -
chargerDockOnline
को डॉक चार्जिंग को सपोर्ट करने के लिएHealthInfo
में जोड़ा गया है।
कार्यान्वयन
स्वास्थ्य एचएएल कार्यान्वयन के लिए उपयोगी कक्षाओं के लिए निम्नलिखित यूएमएल आरेख देखें:
चित्रा 8. स्वास्थ्य एआईडीएल एचएएल यूएमएल आरेख
स्वास्थ्य एआईडीएल सेवा को लागू करने के बारे में जानकारी के लिए, स्वास्थ्य एआईडीएल एचएएल को लागू करना देखें।
वसूली
Android 13 रिकवरी में बाइंडर को सपोर्ट करता है। स्वास्थ्य एआईडीएल सेवा को पुनर्प्राप्ति के लिए स्थापित करना इसे पुनर्प्राप्ति मोड में चलाने की अनुमति देता है।
स्वास्थ्य एआईडीएल सेवा को पुनर्प्राप्ति के लिए स्थापित करने के बारे में जानकारी के लिए, निम्नलिखित देखें:
अभियोक्ता
ऑफ-मोड चार्जिंग की कार्यक्षमता को /system
से /vendor
vendor में ले जाया जाता है। एंड्रॉइड 13 के साथ लॉन्च होने वाले उपकरणों के लिए, यदि वे ऑफ-मोड चार्जिंग का समर्थन करते हैं, तो एचएएल सेवा बाइनरी को चार्जर मोड का समर्थन करना चाहिए। ऐसा करने के लिए, चार्जर लागू करने का संदर्भ लें।
चार्जर सिस्टम गुण
गुण ro.charger.*
अब charger
बाइनरी द्वारा /vendor
vendor में पढ़ने योग्य नहीं हैं। यदि आपके उपकरण में कोई ro.charger.*
सिस्टम गुण सेट है, तो चार्जर के लिए सिस्टम गुण देखें।