2019-05-08
关键字:Android 系统裁剪、移除 BatteryService
Android 的电池监测服务功能还是很成熟的,但并不是所有的设备都需要这么一个电池监测服务的。尤其是在我们的 Android 开发板内存资源比较紧张的时候,裁剪掉一些起不了作用的服务就显的尤为必要了。话不多说,直接干。
1、SystemServer.java
Android 的 framework 层所有原生系统服务都是在 SystemServer.java 中被注册并实例化的。我们首先从源头上关闭 BatteryService 的实例化。
./frameworks/base/services/java/com/android/server/SystemServer.java
在这里,我们找到 BatteryService 的变量声明,并将它注释掉。
其次是将 BatteryService 的实例化过程注释掉
接下来,还要将所有用到了 battery 变量的地方,都去掉 battery 的引用
到这就完成了,BatteryService 类就不会再被实例化的了。
可能有些同学会觉得少传了一个参数给别的方法会导致编译不过。这确实没错。但不要急,我们后面的工作就是直接去修改这些方法的参数列表。
2、IdleMaintenanceService.java
./frameworks/base/services/java/com/android/server/IdleMaintenanceService.java
这份代码,同样是直接注释掉和 BatteryService 相关的代码。
直接去改变它们的构造方法又有何不可呢?
上图的调用查询的是电池电量,这里直接恒定返回 99% 的电量就好了。当然,你非要返回 100% 也可以,笔者这里只是想留 1 点电量下来怕自己骄傲而已。
这里在询问设备当前是否在充电中,恒返回 true 就好。笔者的 Android 设备是直接由电源供电的,并没有配备电池器件。
3、Watchdog.java
./frameworks/base/services/java/com/android/server/Watchdog.java
老规矩,照着下图撸就是了。
4、PowerManagerService.java
./frameworks/base/services/java/com/android/server/power/PowerManagerService.java
上图的 3 条都得改。照着改就好。
OK ,修改完毕。这时可以尝试去编译一下 framework 的 service 了。
mmm frameworks/base/services/java/
一顿等待以后,看到编译通过!
Install: out/target/product/rk312x/system/framework/services.jar
大功告成!
愿所有开发者都不会被限制内存!