Android sistem sağlığı

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:

Android 8.x'te Sağlık

Ş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 ve libbatteryservice 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:

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

Şekil 2. Android 8.x'teki Sağlık, kapalı modda şarj etme ve kurtarma modu.

  • şarj cihazı statik olarak libhealthd.BOARD, libhealthd_charger ve libbatterymonitor bağlantılarına bağlantı veriyor.
  • recovery, libhealthd.BOARD ve libbatterymonitor 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: Android 9'da Sağlık

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:

Android 9'da kapalı modda şarj etme ve kurtarma

Ş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:

Health HAL 2.1 altyapısı

Ş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:

Sağlık AIDL HAL altyapısı

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 yerine registerCallback
  • IBatteryPropertiesRegistrar.unregisterListener yerine unregisterCallback
  • update, IBatteryPropertiesRegistrar.scheduleUpdate yerine
  • IBatteryPropertiesRegistrar.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çin
  • getHealthInfo_2_1: getHealthInfo sürümüne alt sürüm yükseltmesi
  • shouldKeepScreenOn: Ş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:

Health 2.1 HAL UML diyagramı

Ş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:

Health AIDL HAL UML şeması

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