Android Sağlık

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 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 bilgisi raporlarında satıcının kişiselleştirilmesi için daha fazla özgürlük derecesi.
  • Pilden daha fazla cihaz sağlığı bilgisi.

Android 11, health@2.0 HAL'in 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'leriyle daha iyi uyumluluk
  • Kapalı mod şarj kodunda daha iyi Tiz ayrımı
  • Cihazın pil sağlığını gösteren çerçeveye daha iyi destek

Android 13, health@2.1 HAL'den bir dönüşüm olan android.hardware.health AIDL HAL'i 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
  • Bağlantı istasyonu şarjını destekleyin.

Gereksinimler

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

Android 9 ile başlatılan cihazların 2.x HAL sağlaması gerekir (ve 1.0 HAL sağlamaması gerekir) veya AIDL HAL. Android 9 ile başlatılmayan ancak satıcı imajını Target Framework Uyumluluk Matrisi Sürüm 3'e (Android 9'da yayımlanan) güncellemeyi planlayan cihazların mevcut 1.0 HAL uygulamalarını kaldırması ve 2.x HAL veya AIDL HAL sağlaması gerekir.

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

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

Android 11 ile başlatılan cihazların 2.1 HAL sağlaması gerekir (ve 1.0 veya 2.0 HAL sağlamaması gerekir) veya AIDL HAL. 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ın mevcut 2.0 HAL uygulamalarını kaldırması ve 2.1 HAL veya AIDL HAL sağlaması gerekir. Android 11 ile başlatılmayan ve satıcı görselini 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ış çok sayıda yardımcı kitaplık içerir.

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

Android 13 ile başlatılan cihazların AIDL HAL sağlaması gerekir (ve HIDL HAL sağlamaması gerekir). 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ın mevcut HIDL HAL uygulamalarını kaldırması ve AIDL HAL sağlaması gerekir. Android 13 ile başlatılmayan ve satıcı imajını güncellemeyi planlamayan cihazların da AIDL HAL sağlaması önerilir.

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

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

Terminoloji

  • health@1.0 : android.hardware.health@1.0 kısaltmasıdır. Android 8.0'da yayımlanan sağlık HIDL HAL sürüm 1.0'ı ifade eder.
  • health@2.0 : android.hardware.health@2.0 kısaltmasıdır. Android 9'da yayınlanan sağlık HIDL HAL sürüm 2.0'ı ifade eder.
  • health@2.1 : android.hardware.health@2.1 kısaltmasıdır. 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ı : telefonun şarj animasyonunu görüntüleyen, kapalı mod şarjında ​​çalışan yürütülebilir 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 bunları çerçeveye sağlayan eski arka plan programı.
  • depolanan : Android'de çalışan ve depolama bilgilerini alan ve bunu çerçeveye sağlayan arka plan programı.

Android 8.x'te sağlık

Android 8.x'te sistem durumu bileşeni aşağıdaki şemada ayrıntılı olarak açıklandığı şekilde çalışır:

Android 8.x'te sağlık

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

Bu diyagramda:

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

Her kurul farklı bir libhealthd. BOARD ; Şarj cihazının, health@1.0-impl'in ve kurtarma bağlantısının hangisi olduğu derleme sırasında belirlenir.

Diğer modlar için:

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

Şekil 2. Android 8.x'te sağlık, kapalı mod ş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ığı şekilde çalışır: Android 9'da sağlık

Figür 3 . Android 9'da sağlık

Çerçeve hwservicemanager health@2.0 hizmetini almaya çalışır. Başarısız olursa, health@1.0'ı (Android 8.x'te) arar. Eski kod yolu korunur, böylece Android 9 sistem görüntüsü Android 8.x satıcı görüntüsüyle uyumlu olur. Cihazda yalnızca bir hizmet sürümü (1.0 veya 2.0) mevcut olabileceğinden, çerçeve her iki HAL'den de bilgi almaz.

Diğer modlar için:

Android 9'da kapalı mod şarjı ve kurtarma

Şekil 4. Android 9'da sağlık, kapalı mod ş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ığı ş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)      ] |
+-------------------------------------+

Sistem durumu 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)      ] |
+-------------------------------------+
[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 diyagramda ayrıntılı olarak açıklandığı şekilde çalışır:

Sağlık AIDL HAL altyapısı

Şekil 6. Sağlık AIDL HAL altyapısı

HIDL HAL arayüzü 2.0

health@2.0 HAL, çerçeveye eski healthd arka plan programıyla aynı işlevselliği sağlar. Aynı zamanda daha önce bağlayıcı hizmet olarak sağlanan sağlık hizmetine benzer API'ler de sağlar (ör. IBatteryPropertiesRegistrar ).

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

  • registerCallback , IBatteryPropertiesRegistrar.registerListener yerine geçmek için
  • unregisterCallback , IBatteryPropertiesRegistrar.unregisterListener yerine geçmek için
  • IBatteryPropertiesRegistrar.scheduleUpdate yerini alacak update
  • IBatteryPropertiesRegistrar.getProperties aşağıdaki şekilde değiştirildi:
    • 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

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

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

Sağlık hizmeti 2.0'ın uygulanması hakkında bilgi için bkz. Sağlık 2.0'ın Uygulanması .

HIDL HAL arayüzü 2.1

health@2.1 HAL, kapalı mod şarjını 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'ın yapılandırmasını almak için
  • getHealthInfo_2_1 : getHealthInfo küçük bir sürüm yükseltmesi
  • shouldKeepScreenOn : ekranın şarj cihazı modunda açık tutulması gerekip gerekmediğini belirlemek için

Ek olarak, @2.1::IHealth uygulanmasının, devralınan registerCallback ve unregisterCallback işlevleri için @2.1::IHealthInfoCallback desteklemesi gerekir. Yeni geri çağırma arayüzü, devralınan healthInfoChanged_2_1 işlevi yerine healthInfoChanged işlevini kullanarak istemciye sağlık durumu bilgilerini döndürür.

Yeni bir yapı olan @2.1::HealthInfo , geri aramalar ve getHealthInfo_2_1 yoluyla döndürülür. Bu yapı, health@2.0 HAL aracılığıyla mevcut olan ek cihaz durumu bilgilerini içerir:

  • Pil kapasitesi seviyesi
  • Pilin şu an tam şarj olma süresi (saniye cinsinden)
  • Pilin tam şarjlı tasarım kapasitesi (μAh cinsinden)

Sistem durumu HAL uygulamasına yararlı sınıflar için aşağıdaki UML şeması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ına ilişkin bilgi için bkz. Sağlık 2.1'in Uygulanması .

AIDL HAL arayüzü 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üyle karşılaştırıldığında API'de aşağıdakiler değişir:

  • HIDL HAL 2.1'de tanıtılan şarj cihazıyla ilgili API'ler, AIDL HAL'e taşınmaz. Kapalı mod şarjının işlevselliği yalnızca /vendor bölümünde geçerli olduğundan, Satıcı Arayüzünde API'ler gerekli değildir. Kapalı mod şarjını düzgün bir şekilde uygulamak için aşağıdaki şarj cihazına bakın.
  • StorageAttribute yazın ve ilgili alanlar kullanılmadığı için kaldırılır.
  • chargerDockOnline dock şarjını desteklemek için HealthInfo eklendi.

Uygulama

Sistem durumu HAL uygulamasına yararlı sınıflar için aşağıdaki UML şemasına bakın:

Sağlık AIDL HAL UML diyagramı

Şekil 8. Sağlık AIDL HAL UML diyagramı

Sağlık AIDL hizmetinin uygulanması hakkında bilgi için bkz. Sağlık AIDL HAL'in Uygulanması .

İyileşmek

Android 13, kurtarma işleminde bağlayıcıyı destekler. Health AIDL hizmetinin kurtarma işlemine yüklenmesi, hizmetin kurtarma modunda çalışmasına olanak tanır.

Kurtarmaya yönelik sağlık AIDL hizmetini yükleme hakkında bilgi için aşağıdakilere bakın:

Şarj cihazı

Kapalı mod şarjının işlevselliği /system /vendor taşındı. Android 13 ile başlatılan cihazlar için kapalı modda şarjı destekliyorlarsa HAL hizmeti ikili programının şarj cihazı modunu desteklemesi gerekir. Bunu yapmak için şarj cihazının uygulanmasına bakın.

Şarj cihazı sistemi özellikleri

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