我正在开发一个新的硬件平台,我需要在该平台上刷新 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 回答
假设您已经成功启动,那么您可以使用以下命令关闭 android 框架:
setprop vold.decrypt trigger_shutdown_framework
该命令是作为 Honeycomb 中加密系统的一部分实现的。它将关闭除核心本机服务之外的所有服务:
- 在里面
- adbd - 这样你仍然可以 adb shell 进入手机
- servicemanager - 处理本机(非安卓)服务
- 事件
您可以使用以下命令重新启动 android 框架:
setprop vold.decrypt trigger_restart_framework
显然,您必须是 root 才能执行此操作。
我搜索了很多,并找到了一个特定的解决方案来禁用可能有效的 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
android服务是在SystemServer.java的run()方法中声明的。文件的路径是如果我们注释掉zygote,android服务可能没有初始化。由于内核启动时有些恐慌,我没有测试过,但希望这将是解决方案。:) /frameworks/base/services/java/com/android/server/SystemServer.java