在init.rc中禁用android服务

时间:2013-04-29 07:27:57

标签: android android-service android-source android-build

我正在开发一个新的硬件平台,我需要在其上安装Android操作系统。 对于初始测试,我需要停止Android init.rc文件中的所有Android服务。 我在我的代码库中搜索了init.rc文件 ./bootable/diskinstaller/init.rc ./bootable/recovery/etc/init.rc ./system/core/rootdir/init.rc ,我需要知道如何在init.rc中识别android服务?我正在考虑禁用android dalvik VM。停止所有Android相关的服务是不是很好地停止dalvic VM或只是逐个禁用所有服务?谢谢!

2 个答案:

答案 0 :(得分:4)

假设您已成功启动,则可以使用以下命令关闭android框架:

setprop vold.decrypt trigger_shutdown_framework

此命令是作为Honeycomb中加密系统的一部分实现的。它将关闭除核心本机服务之外的所有服务:

  • 初始化
  • adbd - 这样你仍然可以将shell添加到手机中
  • servicemanager - 处理原生(不是机器人)服务
  • ueventd

您可以使用以下命令重启android框架:

setprop vold.decrypt trigger_restart_framework

显然你必须是root用户才能做到这一点。

答案 1 :(得分:1)

我搜索了很多,并找到了一个特定的解决方案来禁用可能有效的Android服务,Android源代码中有一个init.rc文件

./system/core/rootdir/init.rc

此init.rc文件描述了需要设置的系统服务,文件系统和其他参数。 由于 init进程是在加载内核后执行的第一个进程,init进程会查找此 init.rc 脚本文件,然后对其进行解析并启动系统服务进程。

有一种名为 Zygote(dalvic VM)的服务,用于初始化 SystemServer.java ,这是系统中运行的第一个java组件,其中包含所有Android服务的声明。

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server class main
  socket zygote stream 660 root system
   onrestart write /sys/android_power/request_state wake
    onrestart write /sys/power/state on
    onrestart restart media
    onrestart restart netd

安卓服务在 SystemServer.java run()方法中声明。文件的路径是/frameworks/base/services/java/com/android/server/SystemServer.java
如果我们注释掉zygote,android服务可能没有初始化。我没有测试它,因为内核启动时有些恐慌,但希望它会成为解决方案。:)