Sağlık 2.1'i uygulama

.

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:

  1. healthd, sistem olmasına rağmen IHealth - hwservicemanager arasında kaydediyor arka plan programı. IHealth, örnek adıyla birlikte sistem manifestine eklenir "yedekleme" gibi.
  2. Çerçeve ve storaged, hwbinder üzerinden healthd ile iletişim kurar. (binder yerine)
  3. Ç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.
  4. 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 ve healthd_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 yerini Health 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ğlayan healthd 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 hizmeti BatteryService 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 kullanmak healthd 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 kullanmak healthd kaynağından sağlık hizmeti örneği. storaged, ardından IHealth.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 öğesine android.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, güç kaynağının bağlı. Özellikle:
    • pil durumu CHARGING, NOT_CHARGING veya FULL ise ve yalnızca güç kaynağı bağlıysa;
    • pil durumu, yalnızca güç kaynağı şu ise DISCHARGING olmalıdır: bağlantı kesildi.

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ı.