2019-05-08

关键字:Android 系统裁剪、移除 BatteryService 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 

Android 的电池监测服务功能还是很成熟的,但并不是所有的设备都需要这么一个电池监测服务的。尤其是在我们的 Android 开发板内存资源比较紧张的时候,裁剪掉一些起不了作用的服务就显的尤为必要了。话不多说,直接干。

 

1、SystemServer.java

 

Android 的 framework 层所有原生系统服务都是在 SystemServer.java 中被注册并实例化的。我们首先从源头上关闭 BatteryService 的实例化。

 

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

在这里,我们找到 BatteryService 的变量声明,并将它注释掉。

Android 移除 BatteryService 服务 随笔 第1张

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

Android 移除 BatteryService 服务 随笔 第2张

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

Android 移除 BatteryService 服务 随笔 第3张

Android 移除 BatteryService 服务 随笔 第4张

Android 移除 BatteryService 服务 随笔 第5张

Android 移除 BatteryService 服务 随笔 第6张

Android 移除 BatteryService 服务 随笔 第7张

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

 

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

 

2、IdleMaintenanceService.java

 

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

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

 

Android 移除 BatteryService 服务 随笔 第8张

Android 移除 BatteryService 服务 随笔 第9张

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

 

Android 移除 BatteryService 服务 随笔 第10张

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

 

Android 移除 BatteryService 服务 随笔 第11张

Android 移除 BatteryService 服务 随笔 第12张

Android 移除 BatteryService 服务 随笔 第13张

 

Android 移除 BatteryService 服务 随笔 第14张

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

 

3、Watchdog.java

 

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

 

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

 

Android 移除 BatteryService 服务 随笔 第15张

Android 移除 BatteryService 服务 随笔 第16张

 

4、PowerManagerService.java

 

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

 

Android 移除 BatteryService 服务 随笔 第17张

Android 移除 BatteryService 服务 随笔 第18张

 

Android 移除 BatteryService 服务 随笔 第19张

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

 

Android 移除 BatteryService 服务 随笔 第20张

 

 

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

 

mmm frameworks/base/services/java/

 

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

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

 

大功告成!

 

 

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

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄