修改 android 公共控件和后台服务

#移动开发 #Android

1.位置
公共控件的代码在源码目录 android/frameworks/base/core/java/android/ 中
后台服务的代码在源码目录 android/frameworks/base/services/java/android/server 中

2.修改
修改其中代码并执行 mm 编译
形如:
** $ cd frameworks/base/services/java/com/android/server/
$ vi IntentResolver.java
$ mm **

3.替换
编译后用生成的包替换手机上 /system/framework/ 中相应的包
编译后生成的文件见提示
形如:
** $ cd out/target/product/general/system/framework/
$ adb push services.jar /system/framework/ **

4.使新的包生效

  1. 方法 1:
    重启手机后生效

  2. 方法 2:
    杀死 system_server 进程,使系统重新启动,这种方法速度快
    ** $ ps
    ** 找到 system_server 对应的 pid, 假设它为 1219
    ** $ kill 1219 **

5.注意

  1. 绝大多数情况下都能成功,不过最好在替换前备份原有 jar 包

  2. 如果替换重要的包使机器不能启动到桌面了,可以通过重新打包 system.img,然后重新烧写(fastboot

)到系统中解决此问题,注意 system.img 的大小
** $./out/host/linux-x86/bin/mkyaffs2image -f

out/target/product/generic/system

out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
$ out/host/linux-x86/bin/acp -fpt

out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img

out/target product/generic/system.img
$ fastboot flash system system.img
** 此时用 fastboot 烧写方式重启手机