Android 移除 BatteryService 服务

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 的变量声明,并将它注释掉。

Android 移除 BatteryService 服务

其次是将 BatteryService 的实例化过程注释掉

Android 移除 BatteryService 服务

接下来,还要将所有用到了 battery 变量的地方,都去掉 battery 的引用

Android 移除 BatteryService 服务

Android 移除 BatteryService 服务

Android 移除 BatteryService 服务

Android 移除 BatteryService 服务

Android 移除 BatteryService 服务

到这就完成了,BatteryService 类就不会再被实例化的了。

 

可能有些同学会觉得少传了一个参数给别的方法会导致编译不过。这确实没错。但不要急,我们后面的工作就是直接去修改这些方法的参数列表。

 

2、IdleMaintenanceService.java

 

./frameworks/base/services/java/com/android/server/IdleMaintenanceService.java

这份代码,同样是直接注释掉和 BatteryService 相关的代码。

 

Android 移除 BatteryService 服务

Android 移除 BatteryService 服务

直接去改变它们的构造方法又有何不可呢?

 

Android 移除 BatteryService 服务

上图的调用查询的是电池电量,这里直接恒定返回 99% 的电量就好了。当然,你非要返回 100% 也可以,笔者这里只是想留 1 点电量下来怕自己骄傲而已。

 

Android 移除 BatteryService 服务

Android 移除 BatteryService 服务

Android 移除 BatteryService 服务

 

Android 移除 BatteryService 服务

这里在询问设备当前是否在充电中,恒返回 true 就好。笔者的 Android 设备是直接由电源供电的,并没有配备电池器件。

 

3、Watchdog.java

 

./frameworks/base/services/java/com/android/server/Watchdog.java

 

老规矩,照着下图撸就是了。

 

Android 移除 BatteryService 服务

Android 移除 BatteryService 服务

 

4、PowerManagerService.java

 

./frameworks/base/services/java/com/android/server/power/PowerManagerService.java

 

Android 移除 BatteryService 服务

Android 移除 BatteryService 服务

 

Android 移除 BatteryService 服务

上图的 3 条都得改。照着改就好。

 

Android 移除 BatteryService 服务

 

 

OK ,修改完毕。这时可以尝试去编译一下 framework 的 service 了。

 

mmm frameworks/base/services/java/

 

一顿等待以后,看到编译通过!

Install: out/target/product/rk312x/system/framework/services.jar

 

大功告成!

 


 

愿所有开发者都不会被限制内存!

 

Android 移除 BatteryService 服务

上一篇:vue.js 使用axios实现下载功能


下一篇:iOS之SDWebImage原理