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.
-
healthd
daemon sehat yang tidak perlu. - Tingkat kebebasan yang lebih besar untuk kustomisasi vendor dalam laporan informasi kesehatan.
- Lebih banyak informasi kesehatan perangkat daripada hanya 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 diimplementasikan
- Kesesuaian yang lebih baik dengan 2.0 HAL API yang ada
- Pemisahan Treble yang lebih baik dalam kode pengisian daya off-mode
- Dukungan yang lebih baik untuk kerangka kerja 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 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 untuk memperbarui citra 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 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 untuk memperbarui citra 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 citra 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 yang lebih baru
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 memperbarui citra 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 memperbarui citra 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. - health AIDL HAL : singkatan dari
android.hardware.health
.- Versi 1 dirilis di Android 13.
- charger : eksekusi berjalan dalam mode pengisian daya yang menampilkan animasi pengisian daya ponsel.
- recovery : eksekusi berjalan dalam mode pemulihan yang harus mengambil informasi baterai.
- healthd : daemon lawas yang berjalan di Android yang mengambil informasi terkait kesehatan dan menyediakannya ke framework.
- storaged : daemon yang berjalan di Android yang mengambil informasi penyimpanan dan menyediakannya ke framework.
Kesehatan di Android 8.x
Di Android 8.x, komponen kesehatan berfungsi seperti yang dijelaskan dalam diagram berikut:
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
secara statis menautkan kelibhealthd_android
,libbatterymonitor
, danlibbatteryservice
. - health@1.0-impl secara statis menautkan ke
libhealthd. BOARD
.
Setiap papan dapat menyesuaikan libhealthd. BOARD
; itu ditentukan pada waktu pembuatan apa pengisi daya, kesehatan@1.0-impl, dan tautan pemulihan.
Untuk mode lainnya:
Gambar 2. Kesehatan di Android 8.x, mode pengisian daya dan mode pemulihan off-mode
- pengisi daya secara statis menautkan ke
libhealthd. BOARD
,libhealthd_charger
danlibbatterymonitor
. - pemulihan secara statis tertaut ke
libhealthd. BOARD
danlibbatterymonitor
.
Kesehatan di Android 9
Di Android 9, komponen kesehatan berfungsi seperti yang dijelaskan dalam diagram berikut:
Gambar 3 . Kesehatan di Android 9
Kerangka kerja mencoba untuk mengambil layanan health@2.0 dari hwservicemanager
. Jika gagal, panggilan ke health@1.0 (di Android 8.x). Jalur kode lama disimpan sehingga citra sistem Android 9 kompatibel dengan citra vendor Android 8.x. Kerangka kerja tidak mengambil informasi dari kedua HAL karena hanya satu versi layanan (1.0 atau 2.0) yang dapat ada di perangkat.
Untuk mode lainnya:
Gambar 4. Kesehatan di Android 9, mode pengisian daya dan mode pemulihan off-mode
Kesehatan di Android 11
Di Android 11, 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) ] |
+-------------------------------------+
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 mode yang berbeda:
Gambar 5. Infrastruktur HAL 2.1 Kesehatan
Kesehatan di Android 13
Di Android 13, AIDL HAL kesehatan diperkenalkan. Komponen kesehatan bekerja seperti yang dijelaskan dalam diagram berikut:
Gambar 6. Infrastruktur HAL AIDL Kesehatan
Antarmuka HIDL HAL 2.0
health@2.0 HAL menyediakan fungsionalitas yang sama ke framework seperti daemon healthd yang lama. Ini juga menyediakan API yang serupa dengan apa yang sebelumnya disediakan sebagai layanan pengikat (yaitu IBatteryPropertiesRegistrar ).
Antarmuka utama, IHealth , menyediakan fungsi-fungsi berikut:
-
registerCallback
, untuk menggantikanIBatteryPropertiesRegistrar.registerListener
-
unregisterCallback
, untuk menggantikanIBatteryPropertiesRegistrar.unregisterListener
-
update
, untuk menggantikanIBatteryPropertiesRegistrar.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
Sebuah struct 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, tegangan, dll.)
- Informasi baterai (keberadaan, level baterai, arus, voltase, pengisian daya, teknologi, dll.)
- Informasi penyimpanan (informasi perangkat penyimpanan, statistik disk)
Untuk informasi tentang penerapan layanan Kesehatan 2.0, lihat Menerapkan Kesehatan 2.0 .
Antarmuka HIDL HAL 2.1
Health@2.1 HAL mendukung pengisian daya off-mode dan memberikan informasi lebih lanjut tentang baterai.
Antarmuka utama, IHealth , menyediakan fungsi tambahan berikut:
-
getHealthConfig
: untuk mengambil konfigurasi HAL ini -
getHealthInfo_2_1
: versi minor peningkatan kegetHealthInfo
-
shouldKeepScreenOn
: untuk menentukan apakah layar harus tetap menyala dalam mode pengisi daya
Selain itu, implementasi @2.1::IHealth
diperlukan untuk mendukung @2.1::IHealthInfoCallback
untuk fungsi registerCallback
dan unregisterCallback
yang diwariskan. Antarmuka panggilan balik baru mengembalikan informasi kesehatan kesehatan ke klien menggunakan fungsi healthInfoChanged_2_1
alih-alih fungsi healthInfoChanged
yang diwariskan.
Sebuah struct 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 detik)
- Kapasitas desain pengisian penuh baterai (dalam Ah)
Lihat diagram UML berikut untuk kelas-kelas yang berguna untuk implementasi HAL kesehatan:
Gambar 7. Diagram UML HAL 2.1 Kesehatan
Untuk informasi pelaksanaan pelayanan Kesehatan 2.1, lihat Penyelenggaraan 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, berikut ini diubah di API:
- API terkait pengisi daya yang diperkenalkan di HIDL HAL 2.1 tidak di-porting ke AIDL HAL. Karena fungsionalitas pengisian daya di luar mode hanya hidup di partisi
/vendor
, API pada Antarmuka Vendor tidak diperlukan. Untuk menerapkan pengisian daya off-mode dengan benar, lihat pengisi daya di bawah. - Ketik
StorageAttribute
dan bidang terkait dihapus karena tidak digunakan. -
chargerDockOnline
ditambahkan keHealthInfo
untuk mendukung pengisian daya dok.
Penerapan
Lihat diagram UML berikut untuk kelas-kelas yang berguna untuk implementasi HAL kesehatan:
Gambar 8. Diagram UML HAL AIDL Kesehatan
Untuk informasi pelaksanaan layanan AIDL kesehatan, lihat Implementasi HAL AIDL Kesehatan .
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 ke pemulihan, lihat 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 penerapan 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 pengisi daya .