Skip to content

Releases: CaiGit1/RootBatteryMonitor

Root Battery Monitor v1.4.0

Choose a tag to compare

@CaiGit1 CaiGit1 released this 06 Oct 15:59

v1.4.0

不再强制要求 root。

新增

  • 免 root 模式 — 没有 root(或 ROM 拦截 sysfs)时自动改用系统公开 API,
    仍能显示电量、温度、电压、电流、功率、充电状态、充电类型与循环次数
  • 顶部状态行直接标明当前走哪条路:Root 直读 / 免 root 模式
  • 关于页与设置页的说明随模式变化

修正

  • 实况通知的状态栏胶囊不显示文本 — 胶囊的字符数是硬上限,实测 9 个字符能显示、
    10 个就一个字都不渲染。改为固定短格式 -1.3W·33°
  • 只开「实况通知」时后台服务不启动,该开关形同虚设
  • 读不到数据时通知走的是普通路径,状态栏反而最安静;现在也走实况通知

说明

免 root 模式下这些指标拿不到,需要 root:充电协议、满电/设计容量(健康度)、
原始 uevent、供电侧节点。


上一个版本 v1.3.0
加入了实况通知与小米超级岛。

Root Battery Monitor v1.3.0

Choose a tag to compare

@CaiGit1 CaiGit1 released this 06 Oct 14:22

v1.3.0

电池状态现在会出现在状态栏和锁屏上。

[🔋]  +2438 mW                    40.8°C

新增

  • 实况通知 — 支持 Android 16 的 Live Updates
  • 小米超级岛 — HyperOS 上显示为超级岛,左区功率、右区温度
  • 呈现方式可切换 — 设置里可选自动 / 小米超级岛 / 类原生 AOSP
  • 设备检测 — 自动识别 ROM 与系统能力,设置页显示当前实际使用哪种方案
  • 状态栏图标改为电池轮廓

说明

实况通知与超级岛在 HyperOS 上是两套互斥的机制,同时使用会让系统忽略岛参数,所以只能选一条。默认的「自动」按设备判断;设备不支持原生岛时自动退回实况通知。

岛的宽度由系统决定,应用侧调整不了。

需要 root,Android 8.0+。


上一个版本 v1.2.0 加入了悬浮窗、四页界面与深色模式。

Root Battery Monitor v1.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Oct 13:26

v1.2.0

  • 悬浮窗 — 在其他应用上层显示自选指标,可拖动;背景取 Material You 壁纸色,可选主色 / 次色 / 第三色 / 中性灰,不透明度 20%–100%
  • 刷新间隔滑块 — 0.2s – 5.0s,步进 0.1s;高频档位复用常驻 su 进程
  • 界面重构 — 概览 / 详情 / 曲线 / 设置 四页,卡片可展开,带过渡动画
  • 曲线页 — 温度 / 电压 / 电流 / 功率 四张折线图,带单位与极值统计
  • 深色模式 — 可独立于系统设置;Android 12+ 跟随壁纸取色
  • 数据修正 — 充电协议解析取当前生效项;功率改由「电压 × 电流」计算
  • 新增应用图标与关于页

需要 root,Android 8.0+。

Root Battery Monitor v1.1.0

Choose a tag to compare

@CaiGit1 CaiGit1 released this 06 Oct 11:28

Root Battery Monitor v1.1.0

适配 Android 14/15(targetSdk 35)· 仅支持已 root 设备 · minSdk 26

🔧 修复(均由真机实测暴露)

问题 根因
一直显示「未找到电池 uevent 路径」、指标全为 -- readBatteryUevent() 先用 File.exists()(App 自身 UID)做拦截。Android 10+ 起 /sys 受 SELinux 限制,普通 App 连 stat 都被拒,root 明明能读却被判成「文件不存在」
环境自检自相矛盾:「路径存在=失败」但「可读=通过」 存在性检查用 App 权限、可读性检查用 su,两项出自不同权限环境,结论必然冲突
点「环境自检 / 立即刷新」偶发闪退 runCommand 超时后仍调用 process.exitValue(),进程未退出时抛 IllegalThreadStateException(su 首次授权弹窗超过 4 秒即触发)
点「前台服务」开关直接闪退 AndroidManifest.xml 声明了 foregroundServiceType="dataSync",却缺 FOREGROUND_SERVICE_DATA_SYNC 权限。Android 14+ 下 startForeground() 抛 SecurityException
部分 ROM 完全读不到数据 电池节点路径被硬编码为 /sys/class/power_supply/battery/uevent

✨ 新增

字段扩展(原实现仅解析 6 项,实机可达 26 项)

  • 电压:VOLTAGE_OCV(开路电压)、VOLTAGE_MAX
  • 功率:POWER_NOW、POWER_AVG
  • 容量与寿命:CHARGE_FULL、CHARGE_FULL_DESIGN、CHARGE_COUNTER、CYCLE_COUNT
  • 充电:CHARGE_TYPE、CONSTANT_CHARGE_CURRENT、CHARGE_CONTROL_LIMIT(_MAX)
  • 身份:NAME、TYPE、PRESENT、TECHNOLOGY、MODEL_NAME
  • 时间:TIME_TO_FULL_NOW/_AVG、TIME_TO_EMPTY_NOW/_AVG

派生指标

  • 电池健康度 = 满电容量 ÷ 设计容量(最能反映损耗,原实现完全没有)
  • 计算功率 V×I —— 与内核 POWER_NOW 并列显示,用于交叉校验

供电侧节点读取

除 battery 外,新增读取 usb / wireless / ucsi 节点(输入电压/电流、USB_TYPE、电流上限、输入限流、充电器温度),并按信息量择优选取,而非取「第一个 online 的」。

其他

  • 电池节点改为遍历 /sys/class/power_supply 自动探测(兼容 battery / bms / BAT0 / maxfg 等命名)
  • 原始 uevent 全量展开视图,26 项一个不藏,便于排障
  • 运行时申请 POST_NOTIFICATIONS(Android 13+)
  • 自检新增「供电节点」一项

⚠️ 数据口径说明(不替内核"修数")

  • CHARGE_COUNTER 各 ROM 单位不统一。实测原值 3220,若按 µAh→mAh 换算会得到误导性的「3 mAh」,故按原值展示
  • POWER_NOW 实测与 V×I 相差百倍(10 W vs 0.87 W),故并列显示两者而非二选一
  • CURRENT_NOW 充电时为负值(内核符号约定),保留原始符号并加注说明
  • 内核用 -1 / 0xFFFF(65535) 表示「未知」,已统一显示为 --(否则会误显示成 18 小时)

📦 构建信息

  • versionCode 1 → 2,versionName 1.0.0 → 1.1.0
  • AGP 8.6.0 / Kotlin 2.0.21 / Gradle 8.7 / compileSdk 35 / JDK 17
  • 已接入 release 签名,签名配置从 keystore.properties 读取(该文件与密钥库不入库);文件缺失时自动退化为不签名,CI 不受影响

仓库:https://github.com/CaiGit1/RootBatteryMonitor
版本:首个独立版本,tag v1.1.0 → commit db72b2b
APK SHA-256:16A813D9BE6F01C0021633257DB32AA92F0B0FBE7A0A81BBAA160CDFE3387EB3