Android 11'de tüm healthd
kodu libhealthloop
ve libhealth2impl
olarak yeniden düzenlenir, ardından health@2.1 HAL'yi uygulayacak şekilde değiştirilir. Bu iki kitaplık, Health 2.1'in geçiş uygulaması olan health@2.0-impl-2.1
ile statik olarak bağlanır. Statik olarak bağlanmış kitaplıklar, health@2.0-impl-2.1
'nın healthd
ile aynı işi yapmasını sağlar. Örneğin, healthd_mainloop
çalıştırma ve yoklama. init işlevinde health@2.1-service
, IHealth
arayüzünün bir uygulamasını hwservicemanager
'ye kaydeder. Android 8.x veya 9 satıcı resmi ve Android 11 çerçevesi içeren cihazlar yükseltilirken satıcı resmi, health@2.1 hizmetini sağlamayabilir. Eski satıcı resimleriyle geriye dönük uyumluluk, destek sonlandırma takvimi ile zorunlu kılınır.
Geriye dönük uyumluluğu sağlamak için:
healthd
, sistem arka plan programı olmasına rağmenhwservicemanager
'yeIHealth
olarak kaydediliyor.IHealth
, "backup" örnek adıyla sistem manifestine eklenir.- Çerçeve ve
storaged
,binder
yerinehwbinder
üzerindenhealthd
ile iletişim kurar. - Çerçeve ve
storaged
için kod, varsa "varsayılan" örneğini, ardından "yedek" örneğini getirecek şekilde değiştirildi.- C++ istemci kodu,
libhealthhalutils
içinde tanımlanan mantığı kullanır. - Java istemci kodu,
HealthServiceWrapper
içinde tanımlanan mantığı kullanır.
- C++ istemci kodu,
- IHealth/default yaygın olarak kullanıma sunulduktan ve Android 8.1 satıcı resimleri desteği sonlandırıldıktan sonra IHealth/backup ve
healthd
desteği sonlandırılabilir.
healthd için karta özel derleme değişkenleri
BOARD_PERIODIC_CHORES_INTERVAL_*
, healthd
oluşturmak için kullanılan pano özel değişkenleridir. Sistem/satıcı derleme ayrımı kapsamında, sistem modülleri için karta özel değerler tanımlanamaz. Bu değerler, kullanımdan kaldırılan healthd_board_init
işlevinde geçersiz kılınıyordu.
health@2.1'de tedarikçiler, bu iki periyodik görev aralığı değerini healthd_config
yapısında, sağlık uygulama sınıfı oluşturucusuna geçirmeden önce geçersiz kılabilir. Health
implementation sınıfı, android::hardware::health::V2_1::implementation::Health
sınıfından devralınmalıdır.
Health 2.1 hizmetini uygulama
Health 2.1 hizmetini uygulama hakkında bilgi edinmek için hardware/interfaces/health/2.1/README.md dosyasına bakın.
Sağlık müşterileri
health@2.x'in aşağıdaki istemcileri var:
- şarj cihazı.
libbatterymonitor
vehealthd_common
kodunun kullanımıhealth@2.0-impl
ile sarmalanır. - recovery.
libbatterymonitor
ile bağlantıhealth@2.0-impl
içine alınır.BatteryMonitor
ile ilgili tüm aramalar,Health
uygulama sınıfına yapılan aramalarla değiştirilir. BatteryManager.
BatteryManager.queryProperty(int id)
,IBatteryPropertiesRegistrar.getProperty
şirketinin tek müşterisiydi.IBatteryPropertiesRegistrar.getProperty
,healthd
tarafından sağlanmış ve doğrudan/sys/class/power_supply
olarak okunmuştur.Güvenlik nedeniyle uygulamaların doğrudan health HAL'i çağırmasına izin verilmez. Android 9 ve sonraki sürümlerde, bağlayıcı hizmeti
IBatteryPropertiesRegistrar
,healthd
yerineBatteryService
tarafından sağlanır.BatteryService
, istenen bilgileri almak için çağrıyı sağlık HAL'ına devreder.BatteryService. Android 9 ve sonraki sürümlerde
BatteryService
,vendor
'deki varsayılan sağlık hizmeti örneğinin mi yoksahealthd
'daki yedek sağlık hizmeti örneğinin mi kullanılacağını belirlemek içinHealthServiceWrapper
kullanır.BatteryService
,IHealth.registerCallback
üzerinden sağlık etkinliklerini dinler.Storaged. Android 9 ve sonraki sürümlerde
storaged
,vendor
'deki varsayılan sağlık hizmeti örneğinin mi yoksahealthd
'daki yedek sağlık hizmeti örneğinin mi kullanılacağını belirlemek içinlibhealthhalutils
kullanır.storaged
ardındanIHealth.registerCallback
üzerinden sağlık etkinliklerini dinler ve depolama bilgilerini alır.
SELinux değişiklikleri
health@2.1 HAL, platformda aşağıdaki SELinux değişikliklerini içerir:
android.hardware.health@2.1-service
öğesinifile_contexts
listesine ekler.
Kendi uygulaması olan cihazlarda, bazı satıcı SELinux değişiklikleri gerekli olabilir. Örnek:
# 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.
Çekirdek arayüzleri
healthd
daemon'ı ve varsayılan uygulama, pil bilgilerini almak için aşağıdaki çekirdek arayüzlerine android.hardware.health@2.0-impl-2.1
erişir:
/sys/class/power_supply/*/capacity_level
(Sağlık 2.1'de eklendi)/sys/class/power_supply/*/capacity
/sys/class/power_supply/*/charge_counter
/sys/class/power_supply/*/charge_full
/sys/class/power_supply/*/charge_full_design
(Sağlık 2.1'de eklendi)/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
(Sağlık 2.1'de eklendi)/sys/class/power_supply/*/type
/sys/class/power_supply/*/voltage_max
/sys/class/power_supply/*/voltage_now
libbatterymonitor
kullanan cihaza özel tüm sağlık HAL uygulamaları, sağlık uygulama sınıfı oluşturucusunda geçersiz kılınmadığı sürece bu çekirdek arayüzlerine varsayılan olarak erişir.
Bu dosyalar eksikse veya healthd
ya da varsayılan hizmetten (ör. dosya, yanlış yapılandırılmış SELinux politikası nedeniyle erişimi reddeden, tedarikçiye özel bir klasöre yönelik sembolik bağlantıysa) erişilemiyorsa doğru şekilde çalışmayabilir. Bu nedenle, varsayılan uygulama kullanılsa bile satıcıya özel ek SELinux değişiklikleri gerekebilir.
Health 2.1'de kullanılan bazı çekirdek arayüzleri (ör.
/sys/class/power_supply/*/capacity_level
ve
/sys/class/power_supply/*/time_to_full_now
) isteğe bağlı olabilir. Ancak, çekirdek arayüzlerinin eksik olmasından kaynaklanan yanlış çerçeve davranışlarını önlemek için Health HAL 2.1 hizmetini oluşturmadan önce CL 1398913'ü seçerek uygulamanız önerilir.
Test
Android 11, özellikle health@2.1 HAL için yazılmış yeni VTS testleri içerir. Bir cihaz, cihaz manifestinde health@2.1 HAL'yi bildiriyorsa ilgili VTS testlerini geçmelidir.
Testler hem varsayılan örnek (cihazın HAL'yi doğru şekilde uyguladığından emin olmak için) hem de yedek örnek (healthd
kaldırılmadan önce doğru şekilde çalışmaya devam ettiğinden emin olmak için) için yazılır.
Pil bilgileriyle ilgili şartlar
Health 2.0 HAL, HAL arayüzüyle ilgili bir dizi şart belirtir ancak ilgili VTS testleri, bu şartların uygulanması konusunda nispeten esnektir. Android 11'de, Android 11 ve sonraki sürümlerle kullanıma sunulan cihazlarda aşağıdaki şartların uygulanması için yeni VTS testleri eklenmiştir:
- Anlık ve ortalama pil akımı birimleri mikroamper (μA) olmalıdır.
- Anlık ve ortalama pil akımının işareti doğru olmalıdır.
Ayrıntılı olarak:
- Pil durumu
UNKNOWN
olduğunda current == 0 - Pil durumu
CHARGING
olduğunda akım > 0 - Pil durumu
NOT_CHARGING
olduğunda current <= 0 - Pil durumu
DISCHARGING
olduğunda akım < 0 - Pil durumu
FULL
olduğunda zorunlu tutulmaz
- Pil durumu
- Pil durumu, güç kaynağının bağlı olup olmamasına göre doğru olmalıdır. Ayrıntılı olarak:
- Yalnızca bir güç kaynağı bağlıysa pil durumu
CHARGING
,NOT_CHARGING
veyaFULL
olmalıdır. - Pil durumu, yalnızca bir güç kaynağı bağlantısı kesildiğinde
DISCHARGING
olmalıdır.
- Yalnızca bir güç kaynağı bağlıysa pil durumu
Uygulamanızda libbatterymonitor
kullanıyorsanız ve çekirdek arayüzlerinden değerler geçiriyorsanız sysfs düğümlerinin doğru değerleri bildirdiğinden emin olun:
- Pil akımının doğru işaret ve birimlerle bildirildiğinden emin olun. Bu
aşağıdaki sysfs düğümlerini içerir:
/sys/class/power_supply/*/current_avg
/sys/class/power_supply/*/current_max
/sys/class/power_supply/*/current_now
- Pozitif değerler, pile gelen akımı gösterir.
- Değerler mikroamper (μA) cinsinden olmalıdır.
- Pil voltajının mikrovolt (μV) cinsinden raporlandığından emin olun. Buna aşağıdaki sysfs düğümleri dahildir:
/sys/class/power_supply/*/voltage_max
/sys/class/power_supply/*/voltage_now
- Varsayılan HAL uygulamasının
voltage_now
değerini 1.000'e böldüğünü ve değerleri milivolt (mV) cinsinden bildirdiğini unutmayın. @1.0::HealthInfo sayfasına bakın.
Ayrıntılı bilgi için Linux güç kaynağı sınıfı başlıklı makaleyi inceleyin.