Android 11'de tüm healthd
kodları şu şekilde yeniden kodlanır:
libhealthloop
ve libhealth2impl
, daha sonra sağlık@2.1 değerini uygulamak üzere değiştirildi
HAL. Bu iki kitaplık health@2.0-impl-2.1
ile statik olarak birbirine bağlıdır.
Health 2.1'in geçişli uygulamasını ele alacağız. Statik olarak bağlantılı kitaplıklar
healthd
ile aynı işi yapması için health@2.0-impl-2.1
politikasını etkinleştirin (örneğin,
healthd_mainloop
ve anket. Başlangıçta, health@2.1-service
IHealth
arayüzünün hwservicemanager
uygulamasına uygulandığını gösterdik. Yeni sürüme geçerken
Android 8.x veya 9 yüklü cihazlar
bir Android 11 çerçevesi kullanıyorsanız
tedarikçi imajı, Health@2.1 hizmetini sağlamayabilir. Geri
eski tedarikçi firma resimleriyle uyumluluğun sağlanması
kullanımdan kaldırma programı hakkında daha fazla bilgi edinin.
Geriye dönük uyumluluk sağlamak için:
healthd
, sistem olmasına rağmenIHealth
-hwservicemanager
arasında kaydediyor arka plan programı.IHealth
, örnek adıyla birlikte sistem manifestine eklenir "yedekleme" gibi.- Çerçeve ve
storaged
,hwbinder
üzerindenhealthd
ile iletişim kurar. (binder
yerine) - Çerçevenin kodu ve
storaged
, örneği getirmek için değiştirildi "varsayılan" varsa "yedekleme"yi seçin.- C++ istemci kodu,
libhealthhalutils
bölümünde tanımlanan mantığı kullanır. - Java istemci kodu,
HealthServiceWrapper
bölümünde tanımlanan mantığı kullanır.
- C++ istemci kodu,
- IHealth/default'tan sonra yaygın olarak kullanıma sunulduğundan ve Android 8.1 tedarikçi görüntüleri
IHealth/backup ve
healthd
desteği sonlandırılabilir. Daha fazla için health@1.0 desteği sonlandırılıyor.
Durumlu kullanımlar için panoya özel derleme değişkenleri
BOARD_PERIODIC_CHORES_INTERVAL_*
, reklam öğesi oluşturmak için kullanılan panoya özel değişkenlerdir
healthd
. Sistem/sağlayıcı derleme bölmesinin bir parçası olarak panoya özel değerler
sistem modülleri için tanımlanamaz. Bu değerler daha önce geçersiz kılındı
işlevini kullanarak healthd_board_init
geri yükleyebilirsiniz.
Health@2.1'de tedarikçiler
healthd_config
yapısındaki bu iki periyodik ev işi aralığı değerine göre
durum uygulama sınıfı oluşturucusuna iletilir. Sağlık
uygulama sınıfı
android::hardware::health::V2_1::implementation::Health
Health 2.1 hizmetini uygulayın
Health 2.1 hizmetinin uygulanmasıyla ilgili bilgi edinmek için bkz. donanım/arayüzler/sağlık/2.1/BENİOKU.md yöntemini çağırın.
Sağlık hizmeti müşterileri
Health@2.x aşağıdaki istemcilere sahiptir:
- şarj aracı.
libbatterymonitor
vehealthd_common
kodunun kullanımıhealth@2.0-impl
içine alınır. - kurtarma.
libbatterymonitor
bağlantısı sarmalandıhealth@2.0-impl
.BatteryMonitor
için yapılan tüm aramaların yeriniHealth
uygulama sınıfını ele aldık. Pil Yöneticisi'ne dokunun. Sadece
BatteryManager.queryProperty(int id)
IBatteryPropertiesRegistrar.getProperty
müşterisi.IBatteryPropertiesRegistrar.getProperty
sağlayanhealthd
ve doğrudan okudu:/sys/class/power_supply
.Güvenlik nedeniyle, uygulamaların sağlık HAL'lerini aramasına izin verilmez doğrudan ekleyebilirsiniz. Android 9 ve sonraki sürümlerde bağlayıcı
IBatteryPropertiesRegistrar
hizmetiBatteryService
tarafından sağlanıyor (healthd
yerine)BatteryService
, sağlık HAL çağrısı için yetki verdi istenen bilgileri almak için.Pil Hizmeti. Android 9 ve sonraki sürümlerde
BatteryService
,HealthServiceWrapper
vendor
kaynağından varsayılan durum hizmeti örneğini kullanmak veya yedekleme özelliğini kullanmakhealthd
kaynağından sağlık hizmeti örneği.BatteryService
, ardından şunları dinliyor:IHealth.registerCallback
tarihine kadar sağlıkla ilgili olayların varlığını kabul ediyor.Depolandı. Android 9 ve sonraki sürümlerde
storaged
,libhealthhalutils
vendor
kaynağından varsayılan durum hizmeti örneğini kullanmak veya yedekleme özelliğini kullanmakhealthd
kaynağından sağlık hizmeti örneği.storaged
, ardındanIHealth.registerCallback
aracılığıyla sağlık etkinliklerini dinler ve alır depolama alanına sahip olmanız gerekir.
SELinux değişiklikleri
Health@2.1 HAL, platformda aşağıdaki SELinux değişikliklerini içerir:
file_contexts
öğesineandroid.hardware.health@2.1-service
ekler.
Kendi uygulaması olan cihazlarda, tedarikçinin bazı SELinux değişiklikleri gerekir. Ö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
arka plan programı ve varsayılan uygulama
android.hardware.health@2.0-impl-2.1
aşağıdaki çekirdek arayüzlerine erişerek şunları yapabilir:
pil bilgilerini alma:
/sys/class/power_supply/*/capacity_level
(Sağlık 2.1'e 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'e 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'e eklendi)/sys/class/power_supply/*/type
/sys/class/power_supply/*/voltage_max
/sys/class/power_supply/*/voltage_now
libbatterymonitor
kullanan cihaza özgü tüm sağlık HAL uygulamaları
sağlık durumunda geçersiz kılınmadığı sürece, varsayılan olarak bu çekirdek arayüzlerine erişir
uygulama sınıfı oluşturucusu.
Bu dosyalar eksikse veya healthd
ürününden ya da
bir bağlantıdır (örneğin, dosya, satıcıya özel bir klasöre simgesel
yanlış yapılandırılmış SELinux politikası nedeniyle erişimi reddeden bir sürüm)
düzgün şekilde çalışmasını sağlamayabilir. Bu nedenle, satıcıya özgü ek SELinux değişiklikleri
varsayılan uygulama kullanılsa bile gerekli değildir.
Sağlık 2.1'de kullanılan bazı çekirdek arayüzleri:
/sys/class/power_supply/*/capacity_level
ve
/sys/class/power_supply/*/time_to_full_now
, isteğe bağlı olabilir. Ancak,
eksik çekirdek arayüzlerinden kaynaklanan yanlış çerçeve davranışlarını önler,
paydaşlarınızın arasından
CL 1398913
.
Test
Android 11 ile yeni özellikler
VTS testleri
sağlık@2.1 HAL için özel olarak yazılmıştır. Bir cihaz
Health@2.1 HAL olarak adlandırıldığını düşünüyorsanız ilgili VTS testlerini geçmesi gerekir.
Hem varsayılan örnek için testler yazılır (cihazın
HAL'yi doğru şekilde uyguladığından) ve yedek örneği (healthd
kaldırılmadan önce doğru şekilde çalışmaya devam eder).
Pil bilgisiyle ilgili gereksinimler
Health 2.0 HAL, HAL arayüzünde bir dizi şartı belirtir ancak ilgili VTS testlerinin uygulanması nispeten esnektir. Android 11'de yeni VTS testleri, Android ile kullanıma sunulan cihazlarda aşağıdaki koşullar 11 ve sonraki sürümler:
- Intatane ve ortalama pil akımı birimleri mikroamper (μA) olmalıdır.
- Anlık ve ortalama pil akımı işareti doğru olmalıdır.
Özellikle:
- pil durumu
UNKNOWN
olduğunda akım == 0 - geçerli > Pil durumu
CHARGING
olduğunda 0 - pil durumu
NOT_CHARGING
olduğunda mevcut <= 0 - geçerli < Pil durumu
DISCHARGING
olduğunda 0 - Pil durumu
FULL
olduğunda zorunlu kılınmaz
- pil durumu
- Pil durumu, güç kaynağının
bağlı. Özellikle:
- pil durumu
CHARGING
,NOT_CHARGING
veyaFULL
ise ve yalnızca güç kaynağı bağlıysa; - pil durumu, yalnızca güç kaynağı şu ise
DISCHARGING
olmalıdır: bağlantı kesildi.
- pil durumu
Uygulamanızda libbatterymonitor
kullanıyorsanız ve değerleri iletirseniz
sysfs düğümlerinin doğru değerleri raporladığından 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ı belirtir.
- Değerler mikroamper (μA) cinsinden olmalıdır.
- Pil voltajının mikrovolt (μV) olarak belirtildiğinden emin olun. Bu,
aşağıdaki sysfs düğümleri:
/sys/class/power_supply/*/voltage_max
/sys/class/power_supply/*/voltage_now
- Varsayılan HAL uygulaması,
voltage_now
değerinin 1000'e bölündüğünü unutmayın. ve değerleri milisaniye cinsinden (mV) raporlar. Görüntüleyin @1.0::HealthInfo.
Ayrıntılar için bkz. Linux güç kaynağı sınıfı.