Android Sağlık

Android 9, health@1.0 HAL'den büyük bir sürüm yükseltmesi olan android.hardware.health HAL 2.0'ı içerir. Bu yeni HAL aşağıdaki avantajlara sahiptir:

  • Çerçeve ve satıcı kodu arasında daha temiz ayrım.
  • Gereksiz healthd arka plan programını kullanımdan kaldırır.
  • Sağlık bilgileri raporlarında satıcı ö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 aşağıdaki avantajlara sahiptir:

  • Uygulaması daha kolay
  • Mevcut 2.0 HAL API'leri ile daha iyi uyumluluk
  • Kapalı modda şarj kodunda daha iyi Tiz ayrımı
  • Cihazın pil sağlığını gösteren çerçeve için daha iyi destek

Android 13, health@2.1 HAL'den bir dönüşüm olan android.hardware.health AIDL HAL'ı içerir. Bu yeni HAL aşağıdaki avantajlara sahiptir:

  • Şarj cihazıyla ilgili kullanılmayan API'leri kaldırın
  • Kullanılmayan StorageAttribute ve ilgili alanları kaldırın
  • Destek yuvası şarjı.

Gereksinimler

Android 9 ve Android 10 çalıştıran cihazlar

Android 9 ile başlatılan aygıtlar, 2.x HAL'ı sağlamalıdır (ve 1.0 HAL'ı sağlamamalıdır) veya AIDL HAL'ı sağlamalıdır. Android 9 ile başlatılmayan ancak satıcı görüntüsünü Target Framework Uyumluluk Matrisi Sürüm 3'e (Android 9'da yayınlandı) güncellemeyi planlayan cihazlar, mevcut 1.0 HAL uygulamalarını kaldırmalı ve 2.x HAL veya AIDL HAL sağlamalıdır.

AOSP, 2.0 HAL'i ve eski 1.0 HAL'den geçişi uygulamanıza yardımcı olmak için tasarlanmış birden çok yardımcı kitaplık içerir.

Android 11 ve Android 12 çalıştıran cihazlar

Android 11 ile başlatılan cihazlar, 2.1 HAL'ı sağlamalıdır (ve 1.0 veya 2.0 HAL'i sağlamamalıdır) veya AIDL HAL'ı sağlamalıdır. Android 11 ile başlatılmayan ancak satıcı görüntüsünü Target Framework Uyumluluk Matrisi Sürüm 5'e (Android 11'de yayınlandı) güncellemeyi planlayan cihazlar, mevcut 2.0 HAL uygulamalarını kaldırmalı ve 2.1 HAL veya AIDL HAL sağlamalıdır. Android 11 ile başlatılmayan ve satıcı görüntüsünü güncellemeyi planlamayan cihazların da 2.1 HAL sağlaması önerilir.

AOSP, 2.1 HAL'i ve eski 1.0 HAL'den geçişi uygulamanıza yardımcı olmak için tasarlanmış birden çok yardımcı kitaplık içerir.

Android 13 ve sonraki sürümleri çalıştıran cihazlar

Android 13 ile başlatılan cihazlar AIDL HAL sağlamalıdır (ve HIDL HAL sağlamamalıdır). Android 13 ile başlatılmayan ancak satıcı görüntüsünü Target Framework Uyumluluk Matrisi Sürüm 7'ye (Android 13'te yayınlandı) güncellemeyi planlayan cihazlar, mevcut HIDL HAL uygulamalarını kaldırmalı ve AIDL HAL'ı sağlamalıdır. Android 13 ile başlatılmayan ve satıcı görüntüsünü güncellemeyi planlamayan cihazların da AIDL HAL sağlaması önerilir.

Cihazlar HIDL 1.0 HAL sağlamamalıdır.

AOSP, AIDL HAL'ı ve eski HIDL HAL'lerinden geçişi uygulamanıza yardımcı olmak için tasarlanmış birden çok yardımcı kitaplık içerir.

terminoloji

  • sağlık@1.0 : android.hardware.health@1.0 kısaltması . Android 8.0'da yayınlanan sağlık HIDL HAL sürüm 1.0'ı ifade eder.
  • sağlık@2.0 : android.hardware.health@2.0 kısaltması . Android 9'da yayınlanan sağlık HIDL HAL sürüm 2.0'ı ifade eder.
  • sağlık@2.1 : android.hardware.health@2.1 kısaltması . Android 11'de yayınlanan sağlık HIDL HAL sürüm 2.1'i ifade eder.
  • sağlık AIDL HAL : android.hardware.health kısaltması.
    • Sürüm 1, Android 13'te yayınlandı.
  • şarj cihazı : telefon şarj animasyonunu görüntüleyen, kapalı modda şarjda çalıştırılabilir dosya.
  • kurtarma : pil bilgilerini alması gereken kurtarma modunda çalışan yürütülebilir dosya.
  • healthd : Android'de çalışan, sağlıkla ilgili bilgileri alan ve çerçeveye sağlayan eski arka plan programı.
  • storaged : Android'de çalışan, depolama bilgilerini alan ve ç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ığı gibi çalışır:

Android 8.x'te Sağlık

Şekil 1 . Android 8.x'te Sağlık

Bu şemada:

  • Bir (1) bağlayıcı çağrısı ve bir (1) hwbinder çağrısı, donanımla iletişim kurmak için çerçeve tarafından kullanılır.
  • healthd , libhealthd_android , libbatterymonitor ve libbatteryservice statik olarak bağlanır.
  • Health@1.0-impl, libhealthd'ye statik olarak libhealthd. BOARD .

Her pano farklı bir libhealthd. BOARD ; hangi şarj cihazının, sağlık@1.0-impl'nin ve kurtarma bağlantısının oluşturulduğu yapım sırasında belirlenir.

Diğer modlar için:

Android 8.x'te mod dışı şarj etme ve kurtarma modu

Şekil 2. Android 8.x'te sağlık, mod dışı şarj ve kurtarma modu

  • şarj cihazı libhealthd. BOARD , libhealthd_charger ve libbatterymonitor .
  • kurtarma statik olarak libhealthd. BOARD ve libbatterymonitor .

Android 9'da Sağlık

Android 9'da sağlık bileşeni, aşağıdaki şemada ayrıntılı olarak açıklandığı gibi çalışır: Android 9'da Sağlık

Şekil 3 . Android 9'da Sağlık

Çerçeve, sağlık@2.0 hizmetini hwservicemanager almaya çalışır. Başarısız olursa, health@1.0'a çağrı yapar (Android 8.x'te). Eski kod yolu, Android 9 sistem görüntüsünün Android 8.x satıcı görüntüsüyle uyumlu olması için korunur. Aygıtta 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:

Android 9'da mod dışı şarj etme ve kurtarma

Şekil 4. Android 9'da sağlık, mod dışı şarj 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ığı gibi ç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ı mevcut değilse, 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)      ] |
+-------------------------------------+
tutucu2 l10n-yer
[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:

Sağlık HAL 2.1 altyapısı

Şekil 5. Sağlık HAL 2.1 altyapısı

Android 13'te Sağlık

Android 13'te sağlık AIDL HAL tanıtıldı. Sağlık bileşeni, aşağıdaki şemada ayrıntılı olarak açıklandığı gibi çalışır:

Sağlık AIDL HAL altyapısı

Şekil 6. Health AIDL HAL altyapısı

HIDL HAL arayüzü 2.0

Health@2.0 HAL, çerçeveye eski sağlıklı arka plan programı ile aynı işlevselliği sağlar. Ayrıca, daha önce bir bağlayıcı hizmeti olarak sağlanmış olana benzer API'ler sağlar (örneğin, IBatteryPropertiesRegistrar ).

Ana arayüz, IHealth , aşağıdaki işlevleri sağlar:

  • registerCallback , IBatteryPropertiesRegistrar.registerListener yerine
  • unregisterCallback , IBatteryPropertiesRegistrar.unregisterListener yerine
  • update , IBatteryPropertiesRegistrar.scheduleUpdate değiştirmek için
  • IBatteryPropertiesRegistrar.getProperties aşağıdakilerle değiştirilir:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Ek olarak, IHealth , satıcıya özel depolamayla ilgili bilgileri almak için storaged için aşağıdaki yeni API'leri sağlar:

  • getStorageInfo
  • getDiskStats

@2.0::HealthInfo adlı yeni bir yapı, geri aramalar ve getHealthInfo aracılığıyla döndürülür. Bu yapı, aşağıdakiler dahil olmak üzere, health@2.0 HAL aracılığıyla sağlanan tüm cihaz sağlığı bilgilerini içerir:

  • Şarj bilgileri (AC/USB/kablosuz, akım, voltaj vb.)
  • Pil bilgileri (varlık, pil seviyesi, akım, voltaj, şarj, teknoloji vb.)
  • Depolama bilgileri (depolama cihazı bilgileri, disk istatistikleri)

Sağlık hizmeti 2.0'ı uygulama hakkında bilgi için, bkz. Sağlık 2.0'ı Uygulama .

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, IHealth , aşağıdaki ek işlevleri sağlar

  • getHealthConfig : bu HAL'nin yapılandırmasını almak için
  • getHealthInfo_2_1 : getHealthInfo küçük bir sürüm yükseltmesi
  • shouldKeepScreenOn : ekranın şarj modunda açık tutulması gerekip gerekmediğini belirlemek için

Ek olarak, @2.1::IHealth uygulanması, devralınan registerCallback ve unregisterCallback işlevleri için @2.1::IHealthInfoCallback desteklemek için gereklidir. Yeni geri arama arabirimi, devralınan healthInfoChanged işlevi yerine healthInfoChanged_2_1 işlevini kullanarak istemciye sağlık durumu bilgilerini döndürür.

@2.1::HealthInfo adlı yeni bir yapı, geri aramalar ve getHealthInfo_2_1 aracılığıyla döndürülür. Bu yapı, aşağıdakiler dahil olmak üzere, health@2.0 HAL aracılığıyla sağlanan ek cihaz sağlığı bilgilerini içerir:

  • Pil kapasitesi seviyesi
  • Pil şarj süresi şimdi doluyor (saniye cinsinden)
  • Pil tam şarjlı tasarım kapasitesi (μAh cinsinden)

Sağlık HAL uygulaması için yararlı olan sınıflar için aşağıdaki UML diyagramına bakın:

Sağlık 2.1 HAL UML diyagramı

Şekil 7. Sağlık HAL 2.1 UML diyagramı

Sağlık hizmeti 2.1'in uygulanması hakkında bilgi için, bkz. Sağlık Hizmetinin Uygulanması 2.1 .

AIDL HAL arabirimi sürüm 1

API değişiklikleri

AIDL sürüm 1 HAL, HIDL 2.1 HAL'a benzer API'leri destekler. HIDL 2.1 arayüzü ile karşılaştırıldığında, API'de aşağıdakiler değiştirilir:

  • HIDL HAL 2.1'de sunulan şarj cihazıyla ilgili API'ler, AIDL HAL'e taşınmaz. Kapalı modda şarj etme işlevi yalnızca /vendor bölümünde bulunduğundan, Satıcı Arabirimindeki API'ler gerekli değildir. Kapalı modda şarjı doğru ş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ılmıştır.
  • Dock şarjını desteklemek için HealthInfo şarj chargerDockOnline eklendi.

uygulama

Sağlık HAL uygulaması için yararlı olan sınıflar için aşağıdaki UML diyagramına bakın:

Sağlık AIDL HAL UML diyagramı

Şekil 8. Health AIDL HAL UML diyagramı

Sağlık AIDL hizmetini uygulama hakkında bilgi için bkz. Health AIDL HAL'i Uygulama .

Kurtarma

Android 13, kurtarma işleminde bağlayıcıyı destekler. Health AIDL hizmetini kurtarmaya yüklemek, kurtarma modunda çalışmasına olanak tanır.

Sağlık AIDL hizmetini kurtarmaya yükleme hakkında bilgi için aşağıdakilere bakın:

Şarj cihazı

Kapalı modda şarj etme işlevi /system'den /system /vendor taşınır. Android 13 ile başlatılan cihazlar için, mod dışında şarjı destekliyorlarsa, HAL hizmeti ikili dosyasının şarj modunu desteklemesi gerekir. Bunu yapmak için, şarj cihazının uygulanmasına bakın.

Şarj sistemi özellikleri

ro.charger.* özellikleri artık /vendor içindeki charger ikili dosyası tarafından okunamaz. Cihazınızda ro.charger.* sistem özelliklerinden herhangi biri varsa, şarj cihazı için sistem özelliklerine bakın.