Kesehatan sistem Android

Android 9 menyertakan android.hardware.health HAL 2.0, upgrade versi utama dari health@1.0 HAL. HAL baru ini memiliki hal berikut kelebihan:

  • Pemisahan yang lebih jelas antara kode vendor dan kerangka kerja.
  • Menghentikan penggunaan daemon healthd yang tidak diperlukan.
  • Tingkat kebebasan yang lebih besar untuk penyesuaian vendor dalam informasi kesehatan laporan.
  • Lebih banyak informasi kesehatan perangkat daripada sekadar baterai.

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

  • Lebih mudah diterapkan
  • Kesesuaian yang lebih baik dengan 2.0 HAL API yang sudah ada
  • Pemisahan Treble yang lebih baik dalam kode pengisian daya tidak aktif
  • Dukungan yang lebih baik untuk kerangka kerja guna menunjukkan kesehatan baterai perangkat alat

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

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

Persyaratan

Perangkat yang menjalankan Android 9 dan Android 10

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

AOSP menyertakan beberapa library bantuan yang dirancang untuk membantu Anda mengimplementasikan versi 2.0 HAL dan transisi dari HAL 1.0 yang lama.

Perangkat yang menjalankan Android 11 dan Android 12

Perangkat yang diluncurkan dengan Android 11 harus menyediakan versi 2.1 HAL (dan tidak boleh menyediakan 1.0 atau 2.0 HAL) atau HAL AIDL. Perangkat tidak diluncurkan dengan Android 11, tetapi berencana untuk mengupdate image vendor ke Target Framework Compatibility Matrix Versi 5 (dirilis pada Android 11) harus menghapus HAL 2.0 yang ada dan menyediakan HAL 2.1 atau HAL AIDL. Perangkat tidak diluncurkan dengan Android 11 dan tidak berencana mengupdate vendor juga disarankan untuk menyediakan HAL 2.1.

AOSP menyertakan beberapa library bantuan yang dirancang untuk membantu Anda mengimplementasikan versi 2.1 HAL dan transisi dari HAL 1.0 yang lama.

Perangkat yang menjalankan Android 13 dan yang lebih baru

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

Perangkat tidak boleh menyediakan HIDL 1.0 HAL.

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

Terminologi

  • health@1.0: singkatan dari android.hardware.health@1.0. Mengacu pada health HIDL HAL versi 1.0 dirilis di Android 8.0.
  • health@2.0: singkatan dari android.hardware.health@2.0. Mengacu pada health HIDL HAL versi 2.0 dirilis pada Android 9.
  • health@2.1: singkatan dari android.hardware.health@2.1. Mengacu pada health HIDL HAL versi 2.1 dirilis di Android 11.
  • health AIDL HAL: singkatan dari android.hardware.health.
    • Versi 1 dirilis di Android 13.
  • charger: dapat dieksekusi yang berjalan dalam pengisian daya nonaktif yang menampilkan animasi pengisian daya ponsel.
  • recovery: file yang dapat dieksekusi berjalan dalam mode pemulihan yang harus mengambil daya baterai tidak akurat atau tidak sesuai.
  • healthd: daemon lama yang berjalan di Android yang mengambil informasi terkait kesehatan informasi dan memberikannya pada kerangka kerja.
  • storaged: daemon yang berjalan di Android yang mengambil informasi penyimpanan dan memberikannya ke kerangka kerja.

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 binder 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 board dapat menyesuaikan libhealthd.BOARD yang berbeda; ditentukan pada waktu build apa pengisi daya, health@1.0-impl, dan link pemulihan tempat mesin terhubung.

Untuk mode lainnya:

Pengisian daya dan mode pemulihan nonaktif mode di Android 8.x

Gambar 2. Kesehatan di Android 8.x, pengisian daya tidak aktif, dan mode pemulihan.

  • pengisi daya secara statis terhubung ke libhealthd.BOARD, libhealthd_charger dan libbatterymonitor.
  • pemulihan secara statis menautkan ke libhealthd.BOARD dan libbatterymonitor.

Kesehatan di Android 9

Di Android 9, komponen kesehatan berfungsi secara terperinci dalam diagram berikut: Kesehatan di Android 9

Gambar 3. Health di Android 9.

Framework ini mencoba mengambil layanan health@2.0 dari hwservicemanager. Jika gagal, ia memanggil health@1.0 (di Android 8.x). Jalur kode lama adalah dipertahankan agar image sistem Android 9 kompatibel dengan vendor image Android 8.x. Kerangka kerja ini tidak mengambil informasi dari kedua HAL karena hanya satu versi layanan (1.0 atau 2.0) yang dapat ada pada perangkat.

Untuk mode lainnya:

Pengisian daya dan pemulihan mode nonaktif di Android 9

Gambar 4. Kesehatan di Android 9, pengisian daya tidak aktif, dan mode pemulihan.

Kesehatan di Android 11

Di Android 11, komponen kesehatan berfungsi secara mendetail 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 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 HAL 2.1

Gambar 5. Infrastruktur Health HAL 2.1.

Kesehatan di Android 13

Di Android 13, HAL AIDL kesehatan diperkenalkan. Tujuan komponen kesehatan berfungsi seperti yang dijelaskan dalam diagram berikut:

Infrastruktur Health AIDL HAL

Gambar 6. Infrastruktur Health AIDL HAL.

Antarmuka HIDL HAL 2.0

Health@2.0 HAL menyediakan fungsi yang sama ke framework dengan {i>daemon<i} healthd. Protokol ini juga menyediakan API yang mirip dengan layanan yang sebelumnya disediakan sebagai layanan binder (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 yang terkait dengan penyimpanan khusus vendor:

  • getStorageInfo
  • getDiskStats

Struktur baru, @2.0::HealthInfo, ditampilkan 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, voltase, dll.)
  • Informasi baterai (kehadiran, level baterai, arus, voltase, pengisian daya, teknologi, dll.)
  • Informasi penyimpanan (informasi perangkat penyimpanan, statistik disk)

Untuk informasi tentang cara menerapkan Fitur kesehatan 2.0, lihat Menerapkan Health 2.0.

Antarmuka HIDL HAL 2.1

Health@2.1 HAL mendukung pengisian daya di luar mode dan memberikan informasi selengkapnya 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 diaktifkan di mode pengisi daya

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

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

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

Lihat diagram UML berikut untuk class yang berguna bagi implementasi HAL kesehatan:

Diagram UML HAL Kesehatan 2.1

Gambar 7. Diagram UML HAL 2.1 Kesehatan.

Untuk informasi tentang cara menerapkan Fitur kesehatan 2.1, lihat Menerapkan Kesehatan 2.1.

Antarmuka AIDL HAL versi 1

Perubahan API

AIDL versi 1 HAL mendukung API yang serupa dengan HIDL 2.1 HAL. Dibandingkan dengan antarmuka HIDL 2.1, hal berikut ini diubah di API:

  • API terkait pengisi daya yang diperkenalkan dalam HIDL HAL 2.1 tidak ditransfer ke AIDL HAL. Karena fungsi pengisian daya tidak aktif hanya aktif pada /vendor, API pada Antarmuka Vendor tidak diperlukan. Kepada menerapkan pengisian daya di luar mode dengan benar, lihat pengisi daya di bawah.
  • Jenis StorageAttribute dan kolom terkait dihapus karena keduanya tidak digunakan.
  • chargerDockOnline ditambahkan ke HealthInfo untuk mendukung pengisian daya ke dok.

Implementasi

Lihat diagram UML berikut untuk class yang berguna bagi implementasi HAL kesehatan:

Diagram Health AIDL HAL UML

Gambar 8. Diagram Health AIDL HAL UML.

Untuk informasi tentang cara mengimplementasikan layanan AIDL kesehatan, lihat Menerapkan HAL AIDL Kesehatan.

Pemulihan

Android 13 mendukung binder dalam pemulihan. Menginstal Layanan AIDL kesehatan untuk pemulihan memungkinkannya berjalan dalam mode pemulihan.

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

Pengisi daya

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

Properti sistem pengisi daya

Properti ro.charger.* tidak lagi dapat dibaca oleh biner charger di /vendor. Jika salah satu properti sistem ro.charger.* disetel di perangkat Anda, rujuk ke properti sistem untuk pengisi daya.