Kesehatan Sistem Android

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.
  • Menghentikan daemon healthd yang tidak diperlukan.
  • Tingkat kebebasan yang lebih besar untuk penyesuaian vendor dalam laporan informasi kesehatan.
  • Lebih banyak informasi kesehatan perangkat daripada sekadar 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 untuk diterapkan
  • Kesesuaian yang lebih baik dengan API 2.0 HAL yang ada
  • Pemisahan Treble yang lebih baik dalam kode pengisian daya di luar mode
  • Dukungan kerangka kerja yang lebih baik untuk menunjukkan kesehatan baterai perangkat

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

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

Persyaratan

Perangkat yang menjalankan Android 9 dan Android 10

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

AOSP menyertakan beberapa pustaka pembantu yang dirancang untuk membantu Anda mengimplementasikan 2.0 HAL dan transisi dari 1.0 HAL yang lama.

Perangkat yang menjalankan Android 11 dan Android 12

Perangkat yang diluncurkan dengan Android 11 harus menyediakan 2.1 HAL (dan tidak boleh menyediakan 1.0 atau 2.0 HAL) atau AIDL HAL. Perangkat yang tidak diluncurkan dengan Android 11 tetapi berencana mengupdate image vendor ke Target Framework Compatibility Matrix Versi 5 (dirilis di Android 11) 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 memperbarui image vendor juga disarankan untuk menyediakan 2.1 HAL.

AOSP menyertakan beberapa pustaka pembantu yang dirancang untuk membantu Anda mengimplementasikan 2.1 HAL dan transisi dari 1.0 HAL yang lama.

Perangkat yang menjalankan Android 13 dan 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 untuk mengupdate image vendor ke Target Framework Compatibility Matrix Versi 7 (dirilis pada Android 13) harus menghapus implementasi HIDL HAL yang ada dan menyediakan AIDL HAL. Perangkat yang tidak diluncurkan dengan Android 13 dan tidak berencana memperbarui image vendor juga disarankan untuk menyediakan AIDL HAL.

Perangkat tidak boleh menyediakan HIDL 1.0 HAL.

AOSP menyertakan beberapa pustaka pembantu 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 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.
  • kesehatan AIDL HAL : singkatan dari android.hardware.health .
    • Versi 1 dirilis di Android 13.
  • pengisi daya : dapat dijalankan dalam mode pengisian daya di luar yang menampilkan animasi pengisian daya ponsel.
  • recovery : 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 kerangka kerja.
  • storaged : daemon yang berjalan di Android yang mengambil informasi penyimpanan dan menyediakannya ke kerangka kerja.

Kesehatan di Android 8.x

Di Android 8.x, komponen kesehatan berfungsi sebagaimana dirinci 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 kerangka kerja untuk berkomunikasi dengan perangkat keras.
  • healthd tertaut secara statis ke libhealthd_android , libbatterymonitor , dan libbatteryservice .
  • health@1.0-impl tertaut secara statis ke libhealthd. BOARD .

Setiap papan dapat menyesuaikan libhealthd. BOARD ; pada waktu pembuatan ditentukan pengisi daya, health@1.0-impl, dan tautan pemulihan mana yang digunakan.

Untuk mode lainnya:

Mode pengisian dan pemulihan di luar mode di Android 8.x

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

  • pengisi daya terhubung secara statis 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 sebagaimana dirinci dalam diagram berikut: Kesehatan di Android 9

Gambar 3 . Kesehatan di Android 9

Kerangka kerja ini mencoba mengambil layanan health@2.0 dari hwservicemanager . Jika gagal, ia akan memanggil health@1.0 (di Android 8.x). Jalur kode lama dipertahankan sehingga image sistem Android 9 kompatibel dengan image vendor 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 dan pemulihan di luar mode di Android 9

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

Kesehatan di Android 11

Di Android 11, komponen kesehatan berfungsi sebagaimana dirinci 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 kesehatan 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 Kesehatan HAL 2.1

Gambar 5. Infrastruktur HAL Kesehatan 2.1

Kesehatan di Android 13

Di Android 13, AIDL HAL kesehatan diperkenalkan. Komponen kesehatan bekerja sebagaimana dirinci dalam diagram berikut:

Infrastruktur AIDL HAL Kesehatan

Gambar 6. Infrastruktur AIDL HAL Kesehatan

Antarmuka HIDL HAL 2.0

health@2.0 HAL menyediakan fungsionalitas yang sama pada kerangka kerja seperti daemon healthd lama. Ia juga menyediakan API yang mirip dengan apa yang healthd sediakan sebelumnya 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

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

Untuk informasi penerapan layanan Kesehatan 2.0, lihat Implementasi Kesehatan 2.0 .

Antarmuka HIDL HAL 2.1

health@2.1 HAL mendukung pengisian daya di luar mode dan memberikan informasi lebih lanjut tentang baterai.

Antarmuka utama, IHealth , menyediakan fungsi tambahan berikut

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

Selain itu, penerapan @2.1::IHealth diperlukan untuk mendukung @2.1::IHealthInfoCallback untuk fungsi registerCallback dan unregisterCallback yang diwarisinya. Antarmuka panggilan balik baru mengembalikan informasi kesehatan ke klien menggunakan fungsi healthInfoChanged_2_1 alih-alih fungsi healthInfoChanged yang diwarisi.

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

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

Lihat diagram UML berikut untuk mengetahui kelas-kelas yang berguna untuk implementasi HAL kesehatan:

Diagram Kesehatan 2.1 HAL UML

Gambar 7. Diagram UML HAL 2.1 Kesehatan

Untuk informasi pelaksanaan pelayanan Kesehatan 2.1 lihat Implementasi Kesehatan 2.1 .

Antarmuka AIDL HAL versi 1

Perubahan API

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

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

Penerapan

Lihat diagram UML berikut untuk mengetahui kelas-kelas yang berguna untuk implementasi HAL kesehatan:

Diagram UML AIDL HAL Kesehatan

Gambar 8. Diagram UML AIDL HAL Kesehatan

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

Pemulihan

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

Untuk informasi tentang menginstal layanan AIDL kesehatan untuk pemulihan, lihat yang berikut ini:

Pengisi daya

Fungsionalitas pengisian daya di luar mode dipindahkan dari /system ke /vendor . Untuk perangkat yang diluncurkan dengan Android 13, jika mendukung pengisian daya di luar mode, biner layanan HAL harus mendukung mode pengisi daya. Untuk melakukannya, lihat implementasi 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 disetel, lihat properti sistem untuk charger .