Android sistem sağlığı

Android 9, android.hardware.health HAL 2.0, Health@1.0 HAL'den ana sürüm yükseltmesi. Bu yeni HAL şunlara sahiptir: avantajları:

  • Çerçeve ile tedarikçi kodu arasında daha net bir ayırma.
  • Gereksiz healthd arka plan programını kullanımdan kaldırır.
  • Durum bilgilerinde tedarikçinin özelleştirilmesi için daha fazla serbestlik derecesi raporlar.
  • Pil bilgisinden daha fazla cihaz sağlığı bilgisi.

Android 11, android.hardware.health HAL 2.1 sürümünü içerir. Health@2.0 HAL'den küçük bir sürüm güncellemesi. Bu yeni HAL şunlara sahiptir: avantajları:

  • Uygulaması daha kolaydır
  • Mevcut 2.0 HAL API'leriyle daha iyi uygunluk
  • Çevrimdışı modda şarj kodunda daha iyi Tiz ayırma
  • Cihazın pil sağlığını göstermek için çerçeve için daha iyi destek cihaz

Android 13 android.hardware.health AIDL HAL, Health@2.1 HAL'den dönüşüm. Bu yeni HAL şunlara sahiptir: avantajları:

  • Şarj cihazıyla ilgili kullanılmayan API'leri kaldırın
  • Kullanılmayan StorageAttribute ve ilgili alanları kaldırın
  • Yuvadan şarj etme desteği.

Gereksinimler

Android 9 ve Android 10 yüklü cihazlar

Android 9 ile kullanıma sunulan cihazlar 2.x sürümünü sağlamalıdır HAL (ayrıca 1.0 HAL içermemelidir) veya AIDL HAL. Başlatılmayan cihazlar Ancak Android 9 ile birlikte satıcı görüntüsünü güncellemeyi planlıyorlar. Hedef Çerçeve Uyumluluk Matrisi Sürüm 3'e (Android 9'da yayınlandı) mevcut 1.0 HAL uygulamalarını kaldırmalı ve 2.x HAL veya AIDL HAL'yi sağlayın.

AOSP, 2.0 sürümünü uygulamanıza yardımcı olmak üzere tasarlanmış birden çok yardımcı kitaplık içerir. HAL ve eski 1.0 HAL sürümünden geçiş.

Android 11 ve Android 12 yüklü cihazlar

Android 11 ile kullanıma sunulan cihazlar 2.1 sürümünü sağlamalıdır HAL (ve 1.0 veya 2.0 HAL içermemelidir) veya AIDL HAL. Şu cihazları değil: Android 11 ile kullanıma sunulacak ancak Hedef Çerçeve Uyumluluk Matrisi Sürüm 5'e (sürüm 5'te yayınlandı) Android 11), mevcut 2.0 HAL sürümünü kaldırmalıdır ve 2.1 HAL veya AIDL HAL'yi sunmalıdır. Başlatılmayan cihazlar ve satıcıyı güncellemeyi planlamamak 2.1 HAL'yi sağlaması da önerilir.

AOSP, 2.1 sürümünü uygulamanıza yardımcı olmak üzere tasarlanmış birden çok yardımcı kitaplık içerir. HAL ve eski 1.0 HAL sürümünden geçiş.

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

Android 13 ile kullanıma sunulan cihazlar AIDL sağlamalıdır HAL (ve HIDL HAL sağlanmamalıdır). Android 13 ile kullanıma sunulmayan ancak tedarikçi firma görüntüsünü Target (hedef) olarak güncellemeyi planlayan cihazlar Çerçeve Uyumluluk Matrisi Sürüm 7 (Android 13'te kullanıma sunulmuştur), mevcut HIDL HAL uygulamalarını kaldırmalı ve AIDL HAL'yi sağlayın. Android 13 ile kullanıma sunulmayan ve tedarikçi resmini güncellemeyi planlamayan cihazlar da AIDL HAL'nin sağlanması önerilir.

Cihazlar, HIDL 1.0 HAL'yi sunmamalıdır.

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

Terminoloji

  • health@1.0: android.hardware.health@1.0 ifadesinin kısaltması. Anlamı Android 8.0'da yayınlanan sağlık HIDL HAL 1.0 sürümü
  • health@2.0: android.hardware.health@2.0 ifadesinin kısaltması. Anlamı Health HIDL HAL sürüm 2.0 Android 9'da yayınlandı.
  • health@2.1: android.hardware.health@2.1 ifadesinin kısaltması. Anlamı Health HIDL HAL sürüm 2.1, Android 11'de yayınlandı.
  • health AIDL HAL: android.hardware.health ifadesinin kısaltması.
    • Sürüm 1, Android 13'te kullanıma sunuldu.
  • şarj cihazı: çevrimdışı modda çalışan ve telefon şarjı animasyonu.
  • recovery: pili alması gereken, kurtarma modunda çalışan yürütülebilir dosya ekleyebilirsiniz.
  • healthd: Android'de çalışan ve sağlıkla ilgili bilgileri alan eski arka plan programı ve çerçeveye sunar.
  • storaged: Android'de çalışan ve depolama alanı bilgilerini alan arka plan programı ve çerçeveye sağlar.

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

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

Bu şemada:

  • Bir (1) bağlayıcı çağrısı ve bir (1) hwbinder çağrısı, çerçeve tarafından iletişim kurmalarına yardımcı olur.
  • healthd, libhealthd_android, libbatterymonitor ve bağlantılarına statik olarak bağlantı verir. libbatteryservice.
  • Health@1.0-impl, şunlara statik olarak bağlantı verir: libhealthd.BOARD

Her pano farklı bir libhealthd.BOARD özelleştirebilir; derleme sırasında şarj cihazı, Health@1.0-impl ve kurtarma bağlantısının .

Diğer modlar için:

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

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

  • şarj cihazı statik olarak libhealthd.BOARD cihazına bağlanır, libhealthd_charger ve libbatterymonitor.
  • kurtarma işlemi statik olarak libhealthd.BOARD ve libbatterymonitor.

Android 9'da sağlık

Android 9'da sağlık bileşeni ayrıntılı şekilde çalışır aşağıdaki şemada verilmiştir: Android 9'da sağlık.

3. Şekil. Android 9'da 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). Eski kod yolu Android 9 sistem görüntüsünün uyumlu olduğu, Android 8.x tedarikçi firma görüntüsü. Çerçeve, sistem tarafından oluşturulan Cihazda yalnızca bir hizmet sürümü (1.0 veya 2.0) bulunabileceğinden, her iki HAL'yi de ayrı ayrı kullanamazsınız.

Diğer modlar için:

Android 9'da çevrimdışı modda şarj etme ve kurtarma

4.Şekil Android 9'da Sağlık, çevrimdışı modda şarj ve kurtarma modu.

Android 11'de sağlık

Android 11'de sağlık bileşeni ayrıntılı şekilde çalışır aşağıdaki şemada verilmiştir:

[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)      ] |
+-------------------------------------+

Health 2.1 uygulaması mevcut değilse sistem önceki bölümlerde açıklandığı gibi eski kod yolu

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ı

5. Şekil. Health HAL 2.1 altyapısı.

Android 13'te sağlık

Android 13'te AIDL HAL sağlığı kullanıma sunuldu. İlgili içeriği oluşturmak için kullanılan 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. Sağlık AIDL HAL altyapısı.

HIDL HAL arayüzü 2.0

Health@2.0 HAL, çerçevede eskiyle aynı işlevselliği sağlar. durumundaki arka plan programı. Ayrıca, bağlayıcı hizmet (ör. IBatteryPropertiesRegistrar).

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

  • registerCallback, değiştirilecek IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback, değiştirilecek IBatteryPropertiesRegistrar.unregisterListener
  • IBatteryPropertiesRegistrar.scheduleUpdate yerine update
  • IBatteryPropertiesRegistrar.getProperties aşağıdaki şekilde değiştirilmiştir:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Buna ek olarak IHealth, storaged için aşağıdaki yeni API'leri sağlar: sağlayıcıya özgü depolama alanıyla ilgili bilgileri alma:

  • getStorageInfo
  • getDiskStats

Geri çağırma işlevleri ve getHealthInfo aracılığıyla yeni bir struct (@2.0::HealthInfo) döndürülür. Bu struct, health@2.0 üzerinden kullanılabilen tüm cihaz sağlık bilgilerini içerir Aşağıdakiler dahil HAL:

  • Ş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)

Health Service 2.0'ın uygulanması hakkında bilgi edinmek için bkz. Health 2.0'ı Uygulama.

HIDL HAL arayüzü 2.1

Health@2.1 HAL, kapalı modda şarjı destekler ve daha fazla bilgi sağlar. pille ilgili.

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

  • getHealthConfig: Bu HAL yapılandırmasını almak için
  • getHealthInfo_2_1: getHealthInfo sürümüne alt sürüm yükseltmesi
  • shouldKeepScreenOn: ekranın şurada açık tutulup tutulmayacağını belirler: şarj cihazı modu

Ayrıca, @2.1::IHealth @2.1::IHealthInfoCallback, devralınan registerCallback ve unregisterCallback işlev. Yeni geri çağırma arayüzü, sağlık durumu döndürür yerine healthInfoChanged_2_1 işlevini kullanarak istemci bilgi devralınan healthInfoChanged işlevi.

Geri çağırma işlevleriyle yeni bir struct (@2.1::HealthInfo) döndürülür ve getHealthInfo_2_1. Bu struct, ek cihaz sağlığı bilgileri içerir Health@2.0 HAL üzerinden kullanılabilir. Aşağıdakiler dahil:

  • Pil kapasitesi düzeyi
  • Şu anda pilin tamamen şarj olma süresi (saniye cinsinden)
  • Pil 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ı

7.Şekil Health HAL 2.1 UML diyagramı.

Sağlık hizmeti 2.1 sürümünün uygulanması hakkında bilgi edinmek için Sağlık 2.1'i Uygulama.

AIDL HAL arayüzü sürüm 1

API değişiklikleri

AIDL sürüm 1 HAL, HIDL 2.1 HAL'ye benzer API'leri destekler. Şuna kıyasla: HIDL 2.1 arayüzünde, API'de aşağıdakiler değiştirilmiştir:

  • HIDL HAL 2.1'de kullanıma sunulan şarj cihazıyla ilgili API'ler AIDL'ye taşınmaz HAL. Çünkü mod dışı şarj işlevi yalnızca /vendor bölümü, Tedarikçi Firma Arayüzündeki API'ler gerekli değil. Alıcı: kapalı mod şarjını düzgün şekilde uygulamanız gerekir. Aşağıdaki şarj cihazına bakın.
  • StorageAttribute türü ve ilgili alanlar şu nedenle kaldırıldı: kullanılmıyor.
  • Yuvanın şarj edilmesi için chargerDockOnline, HealthInfo cihazına eklendi.

Uygulama

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

Health AIDL HAL UML diyagramı

8. Şekil. Health AIDL HAL UML diyagramı.

Health AIDL hizmetinin uygulanması hakkında bilgi edinmek için bkz. Health AIDL HAL'yi uygulama.

Kurtarma

Android 13, kurtarma işleminde bağlayıcıyı destekler. " Kurtarma işlemi için Health AIDL hizmeti, hizmetin kurtarma modunda çalışmasına izin verir.

Health AIDL hizmetinin kurtarma işlemine yüklenmesi hakkında bilgi edinmek için bkz. takip etmek için:

Şarj cihazı

Mod dışı şarj işlevi, /system modundan /vendor değerine taşındı. Örneğin, Android 13'ü destekleyen cihazlar (Android 13) kapalı modda şarj oluyorsa, HAL hizmeti ikili programı, şarj cihazı modunu desteklemelidir. Bunun için, referans şarj cihazını devreye sokma.

Şarj cihazı sistemi özellikleri

ro.charger.* özellikleri artık charger ikili programı tarafından okunamıyor /vendor. Cihazınızda ro.charger.* sistem özelliklerinden biri ayarlanmışsa referans şarj cihazıyla ilgili sistem özellikleri'ni tıklayın.