这对我有用
在 init.mydevice.rc 我有
on property:sys.boot_completed=1
start init-myservice-sh
service init-myservice-sh /vendor/bin/init.myscript.sh
class main
user root
group root system
disabled
oneshot
这是 init.myscript.sh
#!/system/bin/sh
echo '################# It works ##################'
cd /system/app
ls -hal
在 device/myvendor/mydevice/sepolicy 文件夹中,我有 file_contexts
/vendor/bin/init\.myscript\.sh u:object_r:init-myservice_exec:s0
和 init-myservice.te
type init-myservice, domain;
type init-myservice_exec, exec_type, vendor_file_type, file_type;
init_daemon_domain(init-myservice)
allow init-myservice vendor_shell_exec:file rx_file_perms;
allow init-myservice vendor_toolbox_exec:file rx_file_perms;
当然你必须将脚本复制到 bin 目录
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/init.myscript.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.myscript.sh
并在 BoardConfig.mk 中
BOARD_SEPOLICY_DIRS := device/myvendor/mydevice/sepolicy
在我的控制台中我可以看到这个
console:/ $ dmesg | grep myservice
[ 21.098013] init: starting service 'init-myservice-sh'...
[ 21.148562] init: Command 'start init-myservice-sh' action=sys.boot_completed=1 (/vendor/etc/init/hw/init.mydevice.rc:66) took 51ms and succeeded
并尝试这个
console:/ $ init.myscript.sh
################# It works ##################
有关更多详细信息,请参阅这篇文章https://source.android.com/security/selinux/device-policy#label_new_services_and_address_denials