Android 9, health@1.0 HAL'den önemli bir sürüm yükseltmesi olan android.hardware.health
HAL 2.0'ı içerir. Bu yeni HAL'in avantajları şunlardır:
- Çerçeve ile tedarikçi kodu arasında daha net bir ayrım.
- Gereksiz
healthd
daemon'u kullanımdan kaldırır. - Durum bilgisi raporlarında tedarikçi firma özelleştirmesi için daha fazla serbestlik derecesi.
- Yalnızca pilden daha fazla cihaz sağlığı bilgisi
Android 11, health@2.0 HAL'den küçük bir sürüm yükseltmesi olan android.hardware.health
HAL 2.1'i içerir. Bu yeni HAL'in avantajları şunlardır:
- Uygulaması daha kolaydır
- Mevcut 2.0 HAL API'leriyle daha iyi uyumluluk
- Kapalı modda şarj kodunda daha iyi tiz ayırma
- Cihazın pil sağlığını belirtmek için çerçeve için daha iyi destek
Android 13, health@2.1 HAL'den dönüştürülmüş android.hardware.health
AIDL HAL'i içerir. Bu yeni HAL'in avantajları şunlardır:
- Kullanılmayan şarj cihazıyla ilgili API'leri kaldırma
- Kullanılmayan
StorageAttribute
ve ilgili alanları kaldırma - Şarj istasyonunda şarjı destekler.
Şartlar
Android 9 ve Android 10 çalıştıran cihazlar
Android 9 ile kullanıma sunulan cihazlar 2.x HAL'yi sağlamalıdır (ve 1.0 HAL sunmamalıdır) veya AIDL HAL sunmalıdır. Android 9 ile kullanıma sunulmayan ancak tedarikçi firma görüntüsünü Target Framework Uyumluluk Matrisi Sürüm 3'e (Android 9'da kullanıma sunulmuştur) güncellemeyi planlayan cihazlar, mevcut 1.0 HAL uygulamalarını kaldırmalı ve 2.x HAL veya AIDL HAL'yi sağlamalıdır.
AOSP, 2.0 HAL'i uygulamanıza ve eski 1.0 HAL'den geçiş yapmanıza yardımcı olmak için tasarlanmış birden fazla yardımcı kitaplık içerir.
Android 11 ve Android 12 çalıştıran cihazlar
Android 11 ile kullanıma sunulan cihazlar 2.1 HAL'i (1.0 veya 2.0 HAL'i sağlamamalıdır) ya da AIDL HAL'i sağlamalıdır. Android 11 ile kullanıma sunulmayan ancak tedarikçi firma resmini Hedef Çerçeve Uyumluluk Matrisi 5. Sürüm (Android 11'de kullanıma sunuldu) olarak güncellemeyi planlayan cihazlar, mevcut 2.0 HAL uygulamalarını kaldırıp 2.1 HAL veya AIDL HAL sağlamalıdır. Android 11 ile başlatılmayan ve tedarikçi firma imajını güncellemeyi planlamayan cihazlarda da 2.1 HAL'in sağlanması önerilir.
AOSP, 2.1 HAL'i uygulamanıza ve eski 1.0 HAL'den geçiş yapmanıza yardımcı olmak için tasarlanmış birden fazla yardımcı kitaplık içerir.
Android 13 ve sonraki sürümleri çalıştıran cihazlar
Android 13 ile kullanıma sunulan cihazlar AIDL HAL'yi sağlamalıdır (HIDL HAL sunmamalıdır). Android 13 ile kullanıma sunulmayan ancak tedarikçi firma resmini Hedef Çerçeve Uyumluluk Matrisi 7 sürümü (Android 13'te yayınlandı) ile güncellemeyi planlayan cihazlar, mevcut HIDL HAL uygulamalarını kaldırıp AIDL HAL'i sağlamalıdır. Android 13 ile kullanıma sunulmayan ve tedarikçi firma resminin güncellenmesi planlanmayan cihazlarda da AIDL HAL'in sağlanması önerilir.
Cihazlar HIDL 1.0 HAL'i sağlamamalıdır.
AOSP, AIDL HAL'i ve eski HIDL HAL'lerden geçişi uygulamanıza yardımcı olmak için tasarlanmış birden fazla yardımcı kitaplık içerir.
Terminoloji
- health@1.0:
android.hardware.health@1.0
kısaltması. Android 8.0'de yayınlanan sağlık HIDL HAL 1.0 sürümünü ifade eder. - health@2.0:
android.hardware.health@2.0
kısaltması. Android 9'da yayınlanan sağlık HIDL HAL 2.0 sürümünü ifade eder. - health@2.1:
android.hardware.health@2.1
kısaltması. Android 11'de yayınlanan sağlık HIDL HAL 2.1 sürümünü ifade eder. - health AIDL HAL:
android.hardware.health
kısaltması.- 1. sürüm, Android 13'te yayınlanmıştır.
- charger: Kapalı modda şarj olurken çalışan ve telefon şarj animasyonu gösteren yürütülebilir dosya.
- recovery: Pil bilgilerini alması gereken, kurtarma modunda çalışan yürütülebilir dosya.
- healthd: Android'de çalışan ve sağlıkla ilgili bilgileri alıp çerçeveye sağlayan eski bir daemon.
- storaged: Android'de çalışan ve depolama alanıyla ilgili bilgileri alıp çerçeveye sağlayan arka plan programı.
Android 8.x'te Sağlık
Android 8.x'te sağlık bileşeni aşağıdaki şemada ayrıntılı olarak açıklandığı şekilde çalışır:
Şekil 1. Android 8.x'te Sağlık
Bu diyagramda:
- Çerçeve, donanımla iletişim kurmak için bir (1) binder çağrısı ve bir (1) hwbinder çağrısı kullanır.
healthd
,libhealthd_android
,libbatterymonitor
velibbatteryservice
ile statik olarak bağlantılıdır.- health@1.0-impl,
libhealthd.BOARD
ile statik olarak bağlantı kurar.
Her kart farklı bir libhealthd.BOARD
özelleştirilebilir.
Derleme sırasında şarj cihazının, Health@1.0-impl
ve kurtarma bağlantısının hangisine yönlendirdiği belirlenir.
Diğer modlar için:
Şekil 2. Android 8.x'teki Sağlık, kapalı modda şarj etme ve kurtarma modu.
- şarj cihazı statik olarak
libhealthd.BOARD
,libhealthd_charger
velibbatterymonitor
bağlantılarına bağlantı veriyor. - recovery,
libhealthd.BOARD
velibbatterymonitor
adreslerine statik olarak bağlantı verir.
Android 9'da Sağlık
Android 9'da sağlık bileşeni aşağıdaki şemada ayrıntılı olarak açıklandığı şekilde çalışır:
3. Şekil. Android 9'daki Sağlık
Çerçeve, hwservicemanager
kaynağından Health@2.0 hizmetini almaya çalışır.
Başarısız olursa Health@1.0'a çağrı yapar (Android 8.x'te). Android 9 sistem görüntüsünün Android 8.x tedarikçi görüntüsüyle uyumlu olması için eski kod yolu korunur. Cihazda yalnızca bir hizmet sürümü (1.0 veya 2.0) bulunabileceğinden çerçeve, her iki HAL'den de bilgi almaz.
Diğer modlar için:
Şekil 4. Android 9'daki Sağlık, kapalı modda şarj etme ve kurtarma modu.
Android 11'de sağlık
Android 11'de sağlık bileşeni aşağıdaki şemada ayrıntılı olarak açıklandığı şekilde çalışır:
[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) ] |
+-------------------------------------+
Sağlık 2.1 uygulaması yoksa sistem, önceki bölümlerde açıklandığı gibi eski kod yoluna geri döner.
Diğer modlar için:
[ 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) ] |
+-------------------------------------+
Farklı modlar için aşağıdaki basitleştirilmiş şemaya bakın:
Şekil 5. Health HAL 2.1 altyapısı.
Android 13'te Sağlık
Android 13'te sağlık AIDL HAL kullanıma sunulmuştur. Sağlık bileşeni, aşağıdaki şemada ayrıntılı olarak açıklandığı şekilde çalışır:
6. Şekil. Health AIDL HAL altyapısı.
HIDL HAL arayüzü 2.0
Health@2.0 HAL, çerçeveye eski sağlıklı arka plan programıyla aynı işlevselliği sağlar. Ayrıca, daha önce bağlayıcı hizmet (ör. IBatteryPropertiesRegistrar) olarak sağlanan durumundakilere benzer API'ler de sunar.
Ana arayüz olan IHealth şu işlevleri sağlar:
IBatteryPropertiesRegistrar.registerListener
yerineregisterCallback
IBatteryPropertiesRegistrar.unregisterListener
yerineunregisterCallback
update
,IBatteryPropertiesRegistrar.scheduleUpdate
yerineIBatteryPropertiesRegistrar.getProperties
, aşağıdakilerle değiştirilir:getChargeCounter
getCurrentNow
getCurrentAverage
getCapacity
getEnergyCounter
getChargeStatus
getHealthInfo
Ayrıca IHealth
, storaged
'in tedarikçiye özgü depolama alanıyla ilgili bilgileri alabilmesi için aşağıdaki yeni API'leri sağlar:
getStorageInfo
getDiskStats
Yeni bir yapı (@2.0::HealthInfo
) geri çağırma işlevleri ve getHealthInfo
aracılığıyla döndürülür.
Bu yapı, health@2.0 HAL aracılığıyla kullanılabilen tüm cihaz sağlığı bilgilerini içerir. Örneğin:
- Şarj bilgileri (AC/USB/kablosuz, akım, voltaj vb.)
- Pil bilgileri (varlık, pil seviyesi, akım, voltaj, şarj, teknoloji vb.)
- Depolama alanı bilgileri (depolama cihazı bilgileri, disk istatistikleri)
Sağlık hizmeti 2.0'ın uygulanması hakkında bilgi edinmek için Sağlık 2.0'ı Uygulama bölümüne bakın.
HIDL HAL arayüzü 2.1
health@2.1 HAL, kapalı modda şarjı destekler ve pil hakkında daha fazla bilgi sağlar.
Ana arayüz olan IHealth, aşağıdaki ek işlevleri sağlar:
getHealthConfig
: bu HAL'in yapılandırmasını almak içingetHealthInfo_2_1
:getHealthInfo
sürümüne alt sürüm yükseltmesishouldKeepScreenOn
: Şarj cihazı modunda ekranın açık tutulup tutulmayacağını belirlemek için
Ayrıca, devralınan registerCallback
ve unregisterCallback
işlevleri için @2.1::IHealthInfoCallback
'ü desteklemek üzere @2.1::IHealth
'ün uygulanması gerekir. Yeni geri çağırma arayüzü, devralınan healthInfoChanged
işlevi yerine healthInfoChanged_2_1
işlevini kullanarak istemciye sağlık durumu bilgilerini döndürür.
Yeni bir yapı (@2.1::HealthInfo
) geri çağırma işlevleri ve getHealthInfo_2_1
aracılığıyla döndürülür. Bu yapı, health@2.0 HAL aracılığıyla kullanılabilen ek cihaz sağlığı bilgilerini içerir. Örneğin:
- Pil kapasitesi seviyesi
- Pilin tam şarj olması için gereken süre (saniye cinsinden)
- Pilin tam şarj tasarım kapasitesi (μAh cinsinden)
Sağlık HAL uygulaması açısından yararlı olan sınıflar için aşağıdaki UML diyagramına bakın:
Şekil 7. Health HAL 2.1 UML şeması.
Sağlık hizmeti 2.1'in uygulanması hakkında bilgi edinmek için Sağlık 2.1'i Uygulama bölümüne bakın.
AIDL HAL arayüzü sürüm 1
API değişiklikleri
AIDL sürüm 1 HAL, HIDL 2.1 HAL'e benzer API'leri destekler. HIDL 2.1 arayüzüne kıyasla API'de aşağıdakiler değiştirilmiştir:
- HIDL HAL 2.1'de kullanıma sunulan, şarj cihazıyla ilgili API'ler AIDL HAL'e taşınmamıştır. Kapalı modda şarj işlevi yalnızca
/vendor
bölümünde bulunduğundan Tedarikçi Arayüzü'ndeki API'ler gerekli değildir. Kapalı modda şarjı düzgün şekilde uygulamak için aşağıdaki şarj cihazına bakın. StorageAttribute
türü ve ilgili alanlar kullanılmadıkları için kaldırılır.- Yuvanın şarj edilmesi için
chargerDockOnline
,HealthInfo
cihazına eklendi.
Uygulama
Sağlık HAL uygulamasında faydalı olan sınıflar için aşağıdaki UML şemasına bakın:
Şekil 8. Health AIDL HAL UML diyagramı.
Health AIDL hizmetini uygulama hakkında bilgi edinmek için Health AIDL HAL'i uygulama başlıklı makaleyi inceleyin.
Kurtarma
Android 13, kurtarma modunda bağlayıcıyı destekler. Health AIDL hizmetini kurtarma moduna yüklemek, hizmetin kurtarma modunda çalışmasını sağlar.
Health AIDL hizmetini kurtarma moduna yükleme hakkında bilgi edinmek için aşağıdakilere bakın:
Şarj cihazı
Kapalı modda şarj işlevi /system
'ten /vendor
'e taşındı. Android 13 ile kullanıma sunulan ve kapalı modda şarjı destekleyen cihazlarda HAL hizmet ikilisi, şarj cihazı modunu desteklemelidir. Bunu yapmak için şarj cihazını takma konusuna bakın.
Şarj cihazı sistem özellikleri
ro.charger.*
özellikleri artık /vendor
'deki charger
ikili dosyası tarafından okunamıyor. Cihazınızda ro.charger.*
sistem özelliklerinden herhangi biri ayarlanmışsa şarj cihazıyla ilgili sistem özelliklerine bakın.