Skip to content

Root Battery Monitor v1.1.0

Choose a tag to compare

@CaiGit1 CaiGit1 released this 06 Oct 11:28
· 26 commits to main since this release

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