如何为无电池设备配置Android AOSP 6(Marshmallow)
解决AOSP 6无电池设备的充电/电量指示器隐藏问题
针对你这种用于工业部署、无内置电池的类平板设备(基于Android Marshmallow 6.0),要让系统正确识别无电池状态并移除充电指示器和0%电量显示,主要需要从硬件配置声明和系统UI定制两个方向入手,下面是具体可落地的修改步骤:
一、告知系统无电池:修改硬件配置
这一步是核心,让Android底层服务跳过电池状态的检测和上报:
- 修改设备专属配置文件:在
device/<你的厂商名>/<设备型号>/device.mk(或BoardConfig.mk)中添加宏定义:
这个宏会被系统服务读取,直接标记设备无内置电池,电池相关的底层逻辑会被跳过。BOARD_HAS_NO_BATTERY := true - 内核设备树(Device Tree)调整:如果你的设备使用DT来定义硬件,找到对应设备树的
.dts文件,定位到battery节点,要么直接删除该节点,要么添加status = "disabled";属性,让内核不再枚举电池硬件。
二、移除UI层的电量/充电显示
即使底层识别了无电池,部分系统UI可能还会残留默认显示,需要针对性修改:
- 全局关闭电量显示:打开
frameworks/base/core/res/res/values/config.xml,找到以下配置项并修改:<bool name="config_showBatteryLevel">false</bool> <bool name="config_showChargingIndicator">false</bool> - 定制SystemUI状态栏:进入
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java,找到updateBattery()方法,添加判断逻辑——当系统检测到无电池时(可通过BatteryManager的状态或读取BOARD_HAS_NO_BATTERY宏),隐藏电量图标和充电状态View。 - 锁屏界面清理:打开
frameworks/base/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardStatusView.java,同样添加判断,隐藏锁屏上的电量显示控件。
三、额外验证与补充
- 编译前可通过模拟器测试:在模拟器的设备配置中添加
BOARD_HAS_NO_BATTERY := true,确认系统是否会自动隐藏电量UI,提前验证逻辑有效性。 - 检查电池驱动:如果设备有自定义的电池驱动(路径一般为
kernel/drivers/power/supply/),确保驱动不会强制上报电池状态,必要时注释掉相关的状态上报代码。 - 编译后验证:烧录系统后,通过
adb shell dumpsys battery命令查看电池状态,确认输出中显示设备无电池;同时检查状态栏、锁屏是否还有残留的充电/电量元素。
内容的提问来源于stack exchange,提问作者jdm




