A battery statistics app for Android that tells you what it actually measured, and says so when it didn't measure enough.
Ad-free, offline, no telemetry, no accounts. It declares no INTERNET permission, so it
cannot transmit anything, and the build fails if that ever changes.
Existing battery apps have two habits this one avoids.
They need a full charge to estimate battery health. If your phone is set to stop charging at 80% (as most modern Android phones can be), they either report nothing or quietly extrapolate. HonestBattery estimates capacity by coulomb counting over whatever range you actually charged. A 30% → 80% session is a first-class measurement, not a degraded one.
They report one average drain figure. On the reference device, active drain measured 6.2%/h on Wi-Fi indoors versus 9.1%/h on weak 5G outdoors, a ~50% swing that a single average hides completely. HonestBattery groups drain by the conditions it happened under, so the question it answers is "why was drain high?", not just "how high was it?".
- Charge sessions: start/end level, mAh delivered, average current, duration, temperature range, and why the session ended (unplugged, full, or held at your charge limit).
- Battery health: effective capacity in mAh against design capacity, via coulomb counting, with a confidence badge that stays honest about how few sessions it has seen. Outlier estimates are shown and excluded, not deleted.
- Discharge analytics: screen-on time per charge, screen-on and screen-off drain in %/h and mA, projected screen-on time per charge.
- What drains you: drain grouped by network transport, signal strength and screen brightness. Buckets with under 20 minutes of data say "collecting data" instead of showing a number.
- Per-app breakdown: estimated from foreground screen time, and labelled as such. Android exposes no per-app power API; this app does not pretend otherwise.
- Live dashboard: current, voltage, temperature, level, and time to your charge limit.
- Home screen widgets: five of them. Battery gauge shows the level as a gauge; Battery live adds current and temperature; Since last charge shows screen-on time and drain; Charging shows charge speed while charging and falls back to screen-on time otherwise; Battery board plots the level over 12 hours alongside drain and measured capacity. Each one applies the same gates the app does, and marks itself stale rather than keep showing a number that stopped updating.
- Charging alarms: when the battery reaches your charge limit, when it reaches full, when it gets too hot (42 °C by default), and when it drops low. The limit alarm follows the detected ceiling by default rather than a number you typed once, so it still fires correctly under an adaptive charging scheme. Each alarm is toggled on its own.
- Android 12 (API 31) or newer
- No root
./gradlew :app:assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apkFor a signed release build, copy keystore.properties.example to keystore.properties and
fill it in. Without that file, release builds are unsigned and debug builds are unaffected.
| Permission | Why |
|---|---|
FOREGROUND_SERVICE + _SPECIAL_USE |
Continuous sampling. Deferrable schedulers would shred the cadence health estimation depends on. |
POST_NOTIFICATIONS |
The service notification, which doubles as a live readout. Silent, low priority. |
RECEIVE_BOOT_COMPLETED |
Resume recording after a reboot. |
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS |
Without the exemption, aggressive OEM power management eventually kills the recorder. |
PACKAGE_USAGE_STATS |
Per-app foreground time. Granted in Settings, not a runtime prompt. Optional. |
ACCESS_NETWORK_STATE |
Which transport is active (Wi-Fi / cellular / none). Not internet access. |
READ_BASIC_PHONE_STATE |
Optional, opt-in from Settings, only to tell 5G from LTE in drain buckets. Never requested at first launch. |
Notably absent: INTERNET.
Everything stays on the device. Raw samples are pruned after 30 days; sessions and health estimates are kept indefinitely (they are tiny). The whole database can be exported to a JSON file and imported again from Settings.
Copyright (C) 2026 BasilSkyWalk
GNU General Public License v3.0. See LICENSE.
This is copyleft. You may use, modify and redistribute this app, including commercially, but any version you distribute has to be released under the GPL too, with its source available to the people you distribute it to.