Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Kesehatan Android

Android 9 termasuk android.hardware.health HAL 2.0, upgrade versi utama dari health@1.0 HAL. HAL baru ini memiliki keunggulan sebagai berikut:

  • Pemisahan yang lebih bersih antara kerangka kerja dan kode vendor.
  • Deprecates tidak perlu healthd daemon.
  • Tingkat kebebasan yang lebih besar untuk kustomisasi vendor dalam laporan informasi kesehatan.
  • Lebih banyak informasi kesehatan perangkat daripada hanya baterai.

Android 11 termasuk android.hardware.health HAL 2.1, upgrade versi minor dari health@2.0 HAL. HAL baru ini memiliki keunggulan sebagai berikut:

  • Lebih mudah diimplementasikan
  • Kesesuaian yang lebih baik dengan 2.0 HAL API yang ada
  • Pemisahan Treble yang lebih baik dalam kode pengisian daya off-mode
  • Dukungan yang lebih baik untuk kerangka kerja untuk menunjukkan kesehatan baterai perangkat

Persyaratan

Perangkat yang diluncurkan dengan Android 9 harus menyediakan 2.0 HAL (dan tidak boleh menyediakan 1.0 HAL). Perangkat yang tidak diluncurkan dengan Android 9 tetapi berencana untuk memperbarui citra vendor ke Target Framework Compatibility Matrix Versi 3 (dirilis di Android 9) harus menghapus implementasi 1.0 HAL yang ada dan menyediakan 2.0 HAL.

Perangkat yang diluncurkan dengan Android 11 harus menyediakan 2.1 HAL (dan tidak boleh menyediakan 1.0 atau 2.0 HAL). Perangkat yang tidak diluncurkan dengan Android 11 tetapi berencana untuk memperbarui citra vendor ke Target Framework Compatibility Matrix Versi 5 (dirilis di Android 11) harus menghapus implementasi 2.0 HAL yang ada dan menyediakan 2.1 HAL. Perangkat yang tidak diluncurkan dengan Android 11 dan tidak berencana memperbarui citra vendor juga disarankan untuk menyediakan 2.1 HAL.

AOSP menyertakan beberapa pustaka pembantu yang dirancang untuk membantu Anda mengimplementasikan 2.1 HAL dan transisi dari 1.0 HAL yang lama.

Terminologi

  • health@1.0: singkatan dari android.hardware.health@1.0 . Mengacu pada kesehatan HIDL HAL versi 1.0 yang dirilis di Android 8.0.
  • health@2.0: singkatan dari android.hardware.health@2.0 . Mengacu pada kesehatan HIDL HAL versi 2.0 yang dirilis di Android 9.
  • health@2.1: singkatan dari android.hardware.health@2.1 . Mengacu pada kesehatan HIDL HAL versi 2.1 yang dirilis di Android 11.
  • charger: executable berjalan di off-mode pengisian yang menampilkan animasi telepon pengisian.
  • recovery: berjalan dieksekusi dalam modus pemulihan yang harus mengambil informasi baterai.
  • healthd: warisan daemon berjalan di Android yang mengambil informasi terkait kesehatan dan memberikan ke kerangka.
  • storaged: daemon yang berjalan di Android bahwa informasi penyimpanan mengambil dan memberikan ke kerangka.

Kesehatan di Android 8.x

Di Android 8.x, komponen kesehatan berfungsi seperti yang dijelaskan dalam diagram berikut:

Kesehatan di Android 8.x

Gambar 1. Kesehatan di Android 8.x

Dalam diagram ini:

  • Satu (1) panggilan pengikat dan satu (1) panggilan hwbinder digunakan oleh kerangka kerja untuk berkomunikasi dengan perangkat keras.
  • healthd statis link ke libhealthd_android , libbatterymonitor , dan libbatteryservice .
  • health@1.0-impl statis link ke libhealthd. BOARD .

Setiap papan dapat menyesuaikan berbeda libhealthd. BOARD ; ditentukan pada waktu pembuatan apa pengisi daya, kesehatan@1.0-impl, dan tautan pemulihan.

Untuk mode lainnya:

Mode pengisian dan pemulihan off-mode di Android 8.x

Gambar 2. Kesehatan di 8.x Android, off-mode pengisian dan recovery mode

  • charger statis link ke libhealthd. BOARD , libhealthd_charger dan libbatterymonitor .
  • pemulihan statis link ke libhealthd. BOARD dan libbatterymonitor .

Kesehatan di Android 9

Di Android 9, komponen kesehatan berfungsi seperti yang dijelaskan dalam diagram berikut: Kesehatan di Android 9

Gambar 3. Kesehatan di Android 9

Upaya kerangka kerja untuk mengambil layanan health@2.0 dari hwservicemanager . Jika gagal, panggilan ke health@1.0 (di Android 8.x). Jalur kode lama disimpan sehingga citra sistem Android 9 kompatibel dengan citra vendor Android 8.x. Kerangka kerja tidak mengambil informasi dari kedua HAL karena hanya satu versi layanan (1.0 atau 2.0) yang dapat ada di perangkat.

Untuk mode lainnya:

Pengisian dan pemulihan off-mode di Android 9

Gambar 4. Kesehatan di Android 9, off-mode pengisian dan recovery mode

Kesehatan di Android 11

Di Android 11, komponen kesehatan berfungsi seperti yang dijelaskan dalam diagram berikut:

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

Jika implementasi kesehatan 2.1 tidak ada, sistem akan kembali ke jalur kode lama seperti yang dijelaskan di bagian sebelumnya

Untuk mode lainnya:

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

Antarmuka HAL 2.0

health@2.0 HAL menyediakan fungsionalitas yang sama ke framework seperti daemon healthd yang lama. Ini juga menyediakan API yang mirip dengan apa yang healthd sebelumnya disediakan sebagai layanan pengikat (yaitu IBatteryPropertiesRegistrar ).

Antarmuka utama, iHealth , menyediakan fungsi-fungsi berikut:

  • registerCallback , untuk menggantikan IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , untuk menggantikan IBatteryPropertiesRegistrar.unregisterListener
  • update , untuk menggantikan IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties digantikan oleh berikut:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Selain itu, IHealth menyediakan API baru berikut untuk storaged untuk mengambil informasi penyimpanan khusus vendor terkait:

  • getStorageInfo
  • getDiskStats

Sebuah struct baru, @2.0::HealthInfo , dikembalikan melalui callback dan getHealthInfo . Struktur ini berisi semua informasi kesehatan perangkat yang tersedia melalui health@2.0 HAL, termasuk:

  • Informasi pengisian daya (AC/USB/nirkabel, arus, tegangan, dll.)
  • Informasi baterai (keberadaan, level baterai, arus, voltase, pengisian daya, teknologi, dll.)
  • Informasi penyimpanan (informasi perangkat penyimpanan, statistik disk)

Antarmuka HAL 2.1

Health@2.1 HAL mendukung pengisian daya off-mode dan memberikan informasi lebih lanjut tentang baterai.

Antarmuka utama, iHealth , menyediakan fungsi tambahan berikut

  • getHealthConfig : untuk mengambil konfigurasi HAL ini
  • getHealthInfo_2_1 : upgrade versi minor untuk getHealthInfo
  • shouldKeepScreenOn : untuk menentukan apakah layar harus disimpan di dalam modus charger

Selain itu, pelaksanaan @2.1::IHealth diperlukan untuk dukungan @2.1::IHealthInfoCallback untuk yang mewarisi registerCallback dan unregisterCallback fungsi. The callback antarmuka kembali informasi kesehatan kesehatan baru untuk klien menggunakan nya healthInfoChanged_2_1 fungsi bukan dari warisan healthInfoChanged fungsi.

Sebuah struct baru, @2.1::HealthInfo , dikembalikan melalui callback dan getHealthInfo_2_1 . Struktur ini berisi informasi kesehatan perangkat tambahan yang tersedia melalui health@2.0 HAL, termasuk:

  • Tingkat kapasitas baterai
  • Waktu pengisian baterai hingga penuh sekarang (dalam detik)
  • Kapasitas desain pengisian penuh baterai (dalam Ah)

Untuk informasi tentang cara menerapkan pelayanan kesehatan, lihat Pelaksana Kesehatan .