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
大功告成!
願所有開發者都不會被限制內存!