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

Android Health

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

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

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

  • Lebih mudah diterapkan
  • Kesesuaian yang lebih baik dengan 2.0 HAL API yang ada
  • Pemisahan Treble yang lebih baik dalam kode pengisian mode mati
  • 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 memperbarui gambar vendor ke Target Framework Compatibility Matrix Versi 3 (dirilis di Android 9) harus menghapus implementasi HAL 1.0 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 memperbarui gambar vendor ke Target Framework Compatibility Matrix Versi 5 (dirilis di Android 11) harus menghapus implementasi HAL 2.0 yang ada dan menyediakan 2.1 HAL. Perangkat yang tidak diluncurkan dengan Android 11 dan tidak berencana memperbarui image vendor juga disarankan untuk menyediakan 2.1 HAL.

AOSP menyertakan beberapa pustaka pembantu yang dirancang untuk membantu Anda mengimplementasikan HAL 2.1 dan transisi dari HAL 1.0 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 : dapat dijalankan dalam mode off-charging yang menampilkan animasi pengisian daya ponsel.
  • pemulihan : dapat dijalankan dalam mode pemulihan yang harus mengambil informasi baterai.
  • healthd : daemon lama yang berjalan di Android yang mengambil informasi terkait kesehatan dan menyediakannya ke framework.
  • storageaged : daemon berjalan di Android yang mengambil informasi penyimpanan dan menyediakannya ke framework.

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 framework untuk berkomunikasi dengan perangkat keras.
  • healthd secara statis menautkan ke libhealthd_android , libbatterymonitor , dan libbatteryservice .
  • health@1.0-impl secara statis tertaut ke libhealthd. BOARD .

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

Untuk mode lain:

Charing off-mode dan mode pemulihan di Android 8.x.

Gambar 2. Kesehatan di Android 8.x, pengisian non-mode dan mode pemulihan

  • charger secara statis tertaut ke libhealthd. BOARD , libhealthd_charger , dan libbatterymonitor .
  • pemulihan secara statis tertaut 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

Framework mencoba mengambil layanan hwservicemanager dari hwservicemanager . Jika gagal, itu memanggil ke health@1.0 (di Android 8.x). Jalur kode lama disimpan sehingga image sistem Android 9 kompatibel dengan image 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 lain:

Charing dan pemulihan mode mati di Android 9

Gambar 4. Kesehatan di Android 9, pengisian non-mode dan mode pemulihan

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 health 2.1 tidak ada, sistem akan kembali ke jalur kode lama seperti yang dijelaskan di bagian sebelumnya

Untuk mode lain:

[       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

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

Antarmuka utama, IHealth , menyediakan fungsi berikut:

  • registerCallback , untuk menggantikan IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , untuk menggantikan IBatteryPropertiesRegistrar.unregisterListener
  • update , untuk menggantikan IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties diganti dengan yang berikut ini:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

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

  • getStorageInfo
  • getDiskStats

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

  • Informasi pengisian daya (AC / USB / nirkabel, arus, voltase, 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 mode mati dan memberikan lebih banyak informasi tentang baterai.

Antarmuka utama, IHealth , menyediakan fungsi tambahan berikut

  • getHealthConfig : untuk mengambil konfigurasi HAL ini
  • getHealthInfo_2_1 : peningkatan versi kecil ke getHealthInfo
  • shouldKeepScreenOn : untuk menentukan apakah layar harus tetap menyala dalam mode pengisi daya

Selain itu, implementasi @2.1::IHealth diperlukan untuk mendukung @2.1::IHealthInfoCallback untuk fungsi registerCallback dan unregisterCallback diwariskan. 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 . Struct 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 implementasi layanan Kesehatan, lihat Implementing Health .