Kesehatan sistem Android

Android 13 menyertakan android.hardware.health AIDL HAL, konversi dari health@2.1 HAL. HAL baru ini memiliki keunggulan sebagai berikut:

  • Menghapus API terkait pengisi daya yang tidak digunakan
  • Menghapus StorageAttribute yang tidak digunakan dan kolom terkait
  • Mendukung pengisian daya dok.

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

  • Pemisahan yang lebih bersih antara kode framework dan vendor.
  • Tingkat kebebasan yang lebih besar untuk penyesuaian vendor dalam laporan informasi kesehatan.
  • Informasi kesehatan perangkat yang lebih banyak daripada hanya baterai.

Dokumentasi untuk menerapkan Health 2.1 HAL ada di halaman ini sebagai referensi.

Persyaratan

Bagian ini berisi persyaratan untuk Android 11, 12, dan 13 atau yang lebih tinggi.

Perangkat yang menjalankan Android 11 dan Android 12

Perangkat yang diluncurkan dengan Android 11 dan 12 harus menyediakan 2.1 HAL atau AIDL HAL. Perangkat yang tidak diluncurkan dengan Android 11 atau 12, tetapi berencana mengupdate image vendor ke Versi 5 Matriks Kompatibilitas Framework Target (dirilis di Android 11) atau 6 (dirilis di Android 12) harus menghapus implementasi 2.0 HAL yang ada dan menyediakan 2.1 HAL atau AIDL HAL. Perangkat yang tidak diluncurkan dengan Android 11 dan tidak berencana mengupdate image vendor juga direkomendasikan untuk menyediakan 2.1 atau AIDL HAL.

AOSP menyertakan beberapa library helper yang dirancang untuk membantu Anda menerapkan 2.1 HAL dan bertransisi dari HIDL HAL lama.

Perangkat yang menjalankan Android 13 dan yang lebih tinggi

Perangkat yang diluncurkan dengan Android 13 harus menyediakan AIDL HAL (dan tidak boleh menyediakan HIDL HAL). Perangkat yang tidak diluncurkan dengan Android 13, tetapi berencana mengupdate image vendor ke Versi 7 Matriks Kompatibilitas Framework Target (dirilis di Android 13) harus menghapus implementasi HIDL HAL yang ada dan menyediakan AIDL HAL. Perangkat yang tidak diluncurkan dengan Android 13 dan tidak berencana mengupdate image vendor juga direkomendasikan untuk menyediakan AIDL HAL.

AOSP menyertakan beberapa library helper yang dirancang untuk membantu Anda menerapkan AIDL HAL dan transisi dari HIDL HAL lama.

Terminologi

Berikut adalah istilah yang harus Anda ketahui sebelum membaca dokumentasi kesehatan sistem Android lainnya:

health@2.1
Singkatan dari android.hardware.health@2.1. Health HIDL versi 1 dirilis di Android 11.
health AIDL HAL
Singkatan dari android.hardware.health. Health AIDL HAL versi 1 dirilis di Android 13.
charger
Dapat dieksekusi yang berjalan dalam pengisian daya mode nonaktif yang menampilkan animasi pengisian daya ponsel.
recovery
Dapat dieksekusi yang berjalan dalam mode pemulihan yang harus mengambil informasi baterai.
storaged
Daemon yang mengambil informasi penyimpanan dan menyediakannya ke framework.

Kesehatan di Android 11 dan 12

Di Android 11 dan 12, 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)      ] |
+-------------------------------------+

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

Lihat diagram yang disederhanakan berikut untuk mode yang berbeda:

Infrastruktur Health HIDL HAL 2.1

Gambar 1. Infrastruktur Health HIDL HAL 2.1.

Kesehatan di Android 13

Di Android 13, Health AIDL HAL diperkenalkan. Gambar 2 menjelaskan cara kerja komponen kesehatan:

Infrastruktur HAL AIDL Kesehatan

Gambar 2. Infrastruktur Health AIDL HAL.

Antarmuka HIDL HAL 2.1

health@2.1 HAL mendukung pengisian daya mode nonaktif 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 ke getHealthInfo
  • shouldKeepScreenOn: untuk menentukan apakah layar harus tetap aktif dalam mode pengisi daya

Selain itu, penerapan @2.1::IHealth diperlukan untuk mendukung @2.1::IHealthInfoCallback untuk fungsi registerCallback dan unregisterCallback yang diwarisi. Antarmuka callback baru menampilkan informasi kesehatan ke klien menggunakan fungsi healthInfoChanged_2_1, bukan fungsi healthInfoChanged yang diwarisi.

Struct baru, @2.1::HealthInfo, ditampilkan menggunakan 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 daya baterai hingga penuh sekarang (dalam detik)
  • Kapasitas desain pengisian daya baterai penuh (dalam μAh)

Gambar 3 menunjukkan diagram UML class yang berguna untuk penerapan HAL kesehatan:

Diagram UML HAL Health 2.1

Gambar 3. Diagram UML Health HAL 2.1.

Untuk mengetahui informasi tentang cara menerapkan layanan Health 2.1, lihat Menerapkan Health 2.1.

Antarmuka AIDL HAL versi 1

Bagian ini berisi informasi tentang antarmuka AIDL HAL versi 1.

Perubahan API

AIDL HAL versi 1 mendukung API yang mirip dengan HIDL 2.1 HAL. Dibandingkan dengan antarmuka HIDL 2.1, berikut adalah perubahan dalam API:

  • API terkait pengisi daya yang diperkenalkan di HIDL HAL 2.1 tidak di-porting ke AIDL HAL. Karena fungsi pengisian daya mode nonaktif hanya ada di partisi /vendor, API di Antarmuka Vendor tidak diperlukan. Untuk menerapkan pengisian daya mode nonaktif dengan benar, lihat pengisi daya.
  • Jenis StorageAttribute dan kolom terkait dihapus karena tidak digunakan.
  • chargerDockOnline ditambahkan ke HealthInfo untuk mendukung pengisian daya dok.

Penerapan

Gambar 4 menunjukkan diagram UML class yang berguna untuk penerapan AIDL HAL kesehatan:

Diagram UML HAL AIDL Kesehatan

Gambar 4. Diagram UML Health AIDL HAL.

Untuk mengetahui informasi tentang cara menerapkan layanan AIDL kesehatan, lihat Menerapkan Health AIDL HAL.

Pemulihan

Android 13 mendukung binder dalam pemulihan. Menginstal layanan Health AIDL ke pemulihan memungkinkannya berjalan dalam mode pemulihan.

Untuk mengetahui informasi tentang cara menginstal layanan AIDL kesehatan ke pemulihan, lihat hal berikut:

Pengisi daya

Fungsi pengisian daya mode nonaktif dipindahkan dari /system ke /vendor. Untuk perangkat yang diluncurkan dengan Android 13, jika mendukung pengisian daya mode nonaktif, program biner layanan HAL harus mendukung mode pengisi daya. Untuk melakukannya, lihat menerapkan pengisi daya.

Properti sistem pengisi daya

Properti ro.charger.* tidak lagi dapat dibaca oleh program biner charger di /vendor. Jika perangkat Anda memiliki salah satu properti sistem ro.charger.* yang ditetapkan, lihat properti sistem untuk pengisi daya.