Kesehatan sistem Android

Android 13 menyertakan android.hardware.health AIDL HAL, konversi dari health@2.1 HAL. HAL baru ini memiliki keunggulan 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 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 lengkap, bukan hanya baterai.

Dokumentasi untuk menerapkan HAL Health 2.1 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 HAL 2.1 atau HAL AIDL. Perangkat yang tidak diluncurkan dengan Android 11 atau 12, tetapi berencana mengupdate image vendor ke Target Framework Compatibility Matrix Versi 5 (dirilis di Android 11) atau 6 (dirilis di Android 12) harus menghapus implementasi HAL 2.0 yang ada dan menyediakan HAL 2.1 atau HAL AIDL. Perangkat yang tidak diluncurkan dengan Android 11 dan tidak berencana mengupdate image vendor juga direkomendasikan untuk menyediakan HAL 2.1 atau AIDL.

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

Perangkat yang menjalankan Android 13 dan yang lebih baru

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

AOSP menyertakan beberapa library helper yang dirancang untuk membantu Anda mengimplementasikan HAL AIDL dan transisi dari HAL HIDL 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. HIDL kesehatan versi 1 dirilis di Android 11.
HAL AIDL kesehatan
Singkatan dari android.hardware.health. Versi 1 HAL AIDL kesehatan dirilis di Android 13.
charger
File yang dapat dieksekusi yang berjalan dalam pengisian daya mode nonaktif yang menampilkan animasi pengisian daya ponsel.
pemulihan
File yang dapat dieksekusi yang berjalan dalam mode pemulihan yang harus mengambil informasi baterai.
storaged
Daemon yang mengambil informasi penyimpanan dan memberikannya 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 sederhana berikut untuk berbagai mode:

Infrastruktur Health HIDL HAL 2.1

Gambar 1. Infrastruktur Health HIDL HAL 2.1.

Kesehatan di Android 13

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

Infrastruktur HAL Health AIDL

Gambar 2. Infrastruktur HAL Health AIDL.

Antarmuka HIDL HAL 2.1

HAL health@2.1 mendukung pengisian daya dalam mode nonaktif dan memberikan informasi selengkapnya 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, implementasi @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.

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

  • Level kapasitas baterai
  • Waktu pengisian daya baterai hingga penuh sekarang (dalam detik)
  • Kapasitas desain pengisian penuh baterai (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 informasi tentang cara menerapkan layanan Kesehatan 2.1, lihat Menerapkan Kesehatan 2.1.

Antarmuka AIDL HAL versi 1

Bagian ini berisi informasi tentang antarmuka AIDL HAL versi 1.

Perubahan API

HAL AIDL versi 1 mendukung API yang serupa dengan HAL HIDL 2.1. Dibandingkan dengan antarmuka HIDL 2.1, hal berikut diubah di 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 dalam 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.

Implementasi

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

Diagram UML HAL AIDL Kesehatan

Gambar 4. Diagram UML HAL AIDL Kesehatan.

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

Pemulihan

Android 13 mendukung binder dalam pemulihan. Menginstal layanan AIDL Kesehatan 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 dalam mode nonaktif, biner layanan HAL harus mendukung mode pengisi daya. Untuk melakukannya, lihat mengimplementasikan pengisi daya.

Properti sistem pengisi daya

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