init.rc主要有两大元素: Actions和Service
一种是定时任务——Actions,由以下构成:
on
…
一种是固定顺序的任务(初始化启动,可以重启),即Services
service
以下是
setenv
socket … //建立socket
user
group
seclabel
oneshot //服务存在是不重启
class
onrestart //启动时执行一条命令(和Actions中的
以下是Triggers分别详解
有如下trigger:
boot //这是第一个在init启动时发生的trigger
device-added-<path>
device-removed-<path> //这种trigger表示当设备节点被添加或者被移除时触发
service-exited-<name> //这种trigger表示当指定服务<name>退出时触发
以下是Command分别详解
exec
export
ifup
import
hostname
chdir
chmod
chown
chroot
class_start
class_stop
domainname
enable
insmod
mkdir
mount
restorecon
restorecon_recursive
setcon
setenforce 0|1
setprop
setrlimit
setsebool
start
stop
symlink
sysclktz <mins_west_of_gmt> //
trigger
wait
write
系统属性
init.action //=当前执行的动作的action名,没有action名,即为空
init.command //=当前执行的命令的action名,没有command名,即为空
init.svc.
调试notes:
默认,被init进程执行的子进程 stdout和stderr都会进入/dev/null中,如果你需要调试你的程序的话,你可以
使用Android logwrapper,它将会重定向stdout/stderr 到Android log 系统(你可以通过logcat导出)
用法:service zip /system/bin/logwrapper /system/bin/zipgateway