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 melalui dok.

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

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

Dokumentasi untuk mengimplementasikan 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 Matriks Kompatibilitas Framework Target 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 mengimplementasikan HAL 2.1 dan bertransisi 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 Target Framework Compatibility Matrix Versi 7 (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 HAL AIDL.

AOSP menyertakan beberapa library helper yang dirancang untuk membantu Anda mengimplementasikan 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. Versi 1 HIDL kesehatan dirilis di Android 11.
HAL AIDL health
Singkatan dari android.hardware.health. HAL AIDL kesehatan versi 1 dirilis di Android 13.
charger
Dapat dieksekusi yang berjalan dalam pengisian daya mode nonaktif yang menampilkan animasi pengisian daya ponsel.
pemulihan
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 health diperkenalkan. Gambar 2 menjelaskan cara kerja komponen kesehatan:

Infrastruktur HAL AIDL Kesehatan

Gambar 2. Infrastruktur HAL AIDL Kesehatan.

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, penerapan @2.1::IHealth diperlukan untuk mendukung @2.1::IHealthInfoCallback untuk fungsi registerCallback dan unregisterCallback yang diwariskan. Antarmuka callback baru menampilkan informasi kualitas kualitas ke klien menggunakan fungsi healthInfoChanged_2_1, bukan fungsi healthInfoChanged yang diwariskan.

Struct 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:

  • Tingkat 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 mengetahui informasi tentang penerapan layanan Kesehatan 2.1, lihat Menerapkan Health 2.1.

Versi 1 antarmuka AIDL HAL

Bagian ini berisi informasi tentang antarmuka AIDL HAL versi 1.

Perubahan API

HAL AIDL versi 1 mendukung API serupa dengan HAL HIDL 2.1. Dibandingkan dengan antarmuka HIDL 2.1, berikut 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 Vendor Interface tidak diperlukan. Untuk menerapkan pengisian daya mode nonaktif dengan benar, lihat pengisi daya.
  • Kolom Jenis StorageAttribute dan kolom terkait dihapus karena tidak digunakan.
  • chargerDockOnline ditambahkan ke HealthInfo untuk mendukung pengisian daya melalui dok.

Implementasi

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

Diagram UML HAL AIDL Kesehatan

Gambar 4. Diagram UML HAL AIDL Kesehatan.

Untuk mengetahui informasi tentang penerapan layanan AIDL kesehatan, lihat Menerapkan HAL AIDL Kesehatan.

Pemulihan

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

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

Pengisi daya

Fungsi pengisian daya mode nonaktif dipindahkan dari /system ke /vendor. Untuk perangkat yang diluncurkan dengan Android 13, jika perangkat tersebut mendukung pengisian daya 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 telah menyetel salah satu properti sistem ro.charger.*, lihat properti sistem untuk pengisi daya.