Tüm healthd
kodları, Health@2.0-impl ve
libhealthservice
, daha sonrahealth@2.0 HAL'yi uygulamak üzere değiştirildi. Bu ikisi
kitaplıklar, Health@2.0-service tarafından statik olarak bağlanarak
daha önce healthd
tarafından yapılan iştir (yani, healthd_mainloop
komutunu çalıştırın ve
yoklama) saptar. Init özelliğinde, Health@2.0-hizmeti,
IHealth
ile hwservicemanager
arayüzü arasında. Cihazları yeni sürüme geçirirken
Android 8.x tedarikçi görüntüsü ve Android 9 çerçevesi,
Health@2.0 hizmeti, tedarikçi firma görüntüsü tarafından sağlanmıyor olabilir. Zorunlu kılınır
tarafından
kullanımdan kaldırma programı hakkında daha fazla bilgi edinin.
Bu sorunu çözmek için:
healthd
,IHealth
adresinihwservicemanager
örneğine kaydediyor (sistem olmasına rağmen) arka plan programı) ekleyebilirsiniz.IHealth
, örnek adıyla birlikte sistem manifestine eklendi"backup"
.- Ç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 Varsa"default"
, ardından"backup"
.- 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 kullanımdan kaldırma@1.0 bölümüne bakın.
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/tedarikçi firma derleme bölmesinin bir parçası olarak panoya özel değerler
sistem modülleri için tanımlanamaz. Health@2.0'da tedarikçiler
bu iki değer healthd_mode_ops->init
içinde (libhealthservice
health@2.0-service.<device>
bağımlılığı ve bu işlevin yeniden uygulanması).
Statik uygulama kitaplığı
Diğer HAL uygulama kitaplıklarının aksine, sağlık@2.0-impl, sağlık@2.0-service, şarj cihazının, kurtarma ve eski durum bağlantısı.
Health@2.0.impl, yukarıda açıklandığı gibi IHealth
öğesini uygular ve sarmalama amaçlıdır.
yaklaşık libbatterymonitor
ve libhealthd.BOARD
civarında. Bu
Health@2.0-impl kullanıcıları, BatteryMonitor
veya
Doğrudan libhealthd
; bu çağrıların yerine,
IHealth
arayüzünün bir uygulaması olan Health
sınıfı. Genelleştirmek için
Ayrıca, Health@2.0-impl'e healthd_common
kodu da dahildir. Yeni
healthd_common
, saglik@2.0-hizmeti ve
şarj cihazı ve healthd
ile BatteryMonitor yerine IHealth yöntemlerine çağrı.
Health 2.0 hizmetini uygulayın
Bir cihaz için Health@2.0 hizmetini kullanırken varsayılan uygulama şununla eşleşir:
- Cihaz için yeterli,
android.hardware.health@2.0-service
kullanın doğrudan ekleyebilirsiniz. Cihaz için yeterli değil.
android.hardware.health@2.0-service.(device)
yürütülebilir ve şunları içerir:#include <health2/service.h> int main() { return health_service_main(); }
Ardından:
Panoya özgü ise
libhealthd:
- Varsa ona bağlantı verin.
- Mevcut değil,
healthd_board_init
için boş uygulamalar sağlayın vehealthd_board_battery_update
işlev.
Panele özel
BOARD_PERIODIC_CHORES_INTERVAL_*
değişkenleri:- Tanımlanmışsa cihaza özel bir
HealthServiceCommon.cpp
(kopyalanmış) oluşturun kalkış:hardware/interfaces/health/2.0/utils/libhealthservice
) vehealthd_mode_service_2_0_init
içinde özelleştirebilirsiniz. - Tanımlanmamış,
libhealthservice
hizmetine statik olarak bağlantı oluşturun.
- Tanımlanmışsa cihaza özel bir
Cihaz:
getStorageInfo
vegetDiskStats
API'lerini uygulamalı,get_storage_info
veget_disk_stats
işlevlerinde uygulama.- Bu API'ler uygulanmamalıdır,
libstoragehealthdefault
ile bağlantı oluşturun statik olarak.
Gerekli SELinux izinlerini güncelleyin.
kurtarma görüntüsü Örnek:
// Android.bp cc_library_shared { name: "android.hardware.health@2.0-impl-<device>", recovery_available: true, relative_install_path: "hw", static_libs: [ "android.hardware.health@2.0-impl", "libhealthd.<device>" // Include the following or implement device-specific storage APIs "libhealthstoragedefault", ], srcs: [ "HealthImpl.cpp", ], overrides: [ "android.hardware.health@2.0-impl-default", ], }
// HealthImpl.cpp #include <health2/Health.h> #include <healthd/healthd.h> using android::hardware::health::V2_0::IHealth; using android::hardware::health::V2_0::implementation::Health; extern "C" IHealth* HIDL_FETCH_IHealth(const char* name) { const static std::string providedInstance{"default"}; if (providedInstance != name) return nullptr; return Health::initInstance(&gHealthdConfig).get(); }
# device.mk PRODUCT_PACKAGES += android.hardware.health@2.0-impl-<device>
Ayrıntılı bilgi için donanım/arayüzler/sağlık/2.0/BENİOKU.md.
Sağlık hizmeti müşterileri
Health 2.1 HAL için sağlık istemcileri başlıklı makaleyi inceleyin.
SELinux değişiklikleri
Yeni Health@2.0 HAL, aşağıdaki SELinux değişikliklerini içerir:
file_contexts
hesabına sağlık@2.0-hizmeti ekler.system_server
vestoraged
uygulamalarınınhal_health
kullanmasına izin verir.system_server
(BatteryService
) adlı kullanıcının kaydolmasına izin verirbatteryproperties_service
(IBatteryPropertiesRegistrar
).healthd
uygulamasının,hal_health
öğesini sağlamasına izin verir.system_server
vestoraged
adlı kullanıcıların şuraya telefon etmesine izin veren kuralları kaldırır:healthd
.healthd
uygulamasınınbatteryproperties_service
dosyasını kaydetmesine izin veren kuralları kaldırır (IBatteryPropertiesRegistrar
).
Kendi uygulaması olan cihazlarda, tedarikçinin bazı SELinux değişiklikleri gerekir. Örnek:
# device/<manufacturer>/<device>/sepolicy/vendor/file_contexts
/vendor/bin/hw/android\.hardware\.health@2\.0-service.<device> u:object_r:hal_health_default_exec:s0
# 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
Health 2.1 HAL için çekirdek arayüzleri başlıklı makaleyi inceleyin.
Test
Android 9'a yeni VTS testleri dahildir
sağlık@2.0 HAL için özel olarak yazılmıştır. Bir cihaz
Health@2.0 HAL olarak değiştirirseniz ilgili VTS testlerini geçmelidir.
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
Pil bilgisi gereksinimleri bölümüne bakın.