ChargingRecord Evolution by f1owkang and hcnk3HrzQe writes your battery's health into the module description in your root manager, so you see it every time you open the module list. There's nothing to set up: flash it, reboot, and it updates after each charge.
Where the numbers come from
- Kernel reading: the fuel gauge's
charge_fulldivided bycharge_full_design. Many kernels calibrate this themselves. - Measured estimate: while charging it logs current and voltage every 15 seconds (every minute otherwise). After each charge it divides the charge that went in by the percentage gained, which gives the battery's real capacity, and recalculates every time so errors don't pile up.
- Sessions are thrown out if they add less than 20%, run outside 15 to 45 °C, or give a result below half or above 1.5× the design capacity. Charges you unplug early still count, at a third of the weight.
- A separate pass uses only the 30 to 90% part of each charge, where percentage readings are most honest, and nudges the result at most once a day.
Capacity trend shows a progress bar until there are 21 days of data, then "no significant change" or the weekly drop. A healthy battery staying on "no significant change" is normal.
Stable or ML
CRecordEvolution-….zip: the stable channel, a sliding average, with in-app updates.CRecordEvolution_ML-….zip: experimental. After 30 valid sessions it also drops outliers and learns how temperature, charge rate and starting voltage affect capacity, showing a ± uncertainty. Flash it by hand; it has no in-app updates.
Both use the same module ID, so installing one replaces the other.
Installation and data
- You need Magisk v20.4+, KernelSU or APatch on an arm64 phone.
- Flash the zip, confirm with Volume Up (Volume Down cancels) and reboot. Coming from the old
Charging_Recordmodule, uninstall it first. - On KernelSU, APatch or MMRL, the WebUI shows the estimate curve, charging records and trend charts. The Action button refreshes the data now.
Data is stored in data/battery.db (SQLite) inside the module folder and kept for 90 days; updates carry it over. Readings run high if you charge while gaming, since the load current gets counted. Phones without cycle_count or charge_full_design show fewer fields. GPL-2.0; the interface is in Chinese.