Android 下做开机启动shell脚本的大致流程如下:
目录
写shell脚本
比如新建一个init.test.sh,内容如下:
#!/system/bin/sh
###注意这里的开头一定要写正确,android一般是/system/bin/sh 或/system/xbin/sh, linux下的是/bin/sh。写错了是执行不了的,不要以为有#没有影响。###
##这里建议测试时直接设置一个属性,不建议新建文件啥的,避免引起权限等的干扰##
setprop test.prop 111
建议写完后,先push到手机里面手动执行下,看是否正常运行。
为脚本写te文件
新建test_service.te 内容如下:
type test_service, coredomain;
type test_service_exec, exec_type, vendor_file_type, file_type;
#permissive test_service;
init_daemon_domain(test_service);
#allow shell test_service_exec:file { read open getattr execute };
我所做的是MTK平台,添加在了device/mediatek/sepolicy/basic/non_plat
接着在device/mediatek/sepolicy/basic/non_plat/file_contexts 下添加如下代码:
/(system\/vendor|vendor)/bin/ init.test.sh u:object_r:test_service_exec:s0
注意:这一步即使你关闭了selinux还是要加的,不然开机启动不了。倘若你手机能接串口(不是adb),那调试起来将会相当爽。
在init.rc中启动脚本
service test_service /system/bin/ init.test.sh
class main
user root
group root
oneshot
seclabel u:object_r:test_service_exec:s0
这里一般芯片厂商一般都有专门的一个init.XXX.rc 或XXX.sh 用于客户启动自定义的脚本,不建议直接加在init.rc里面。
添加Selinux权限
这步根据你的实际报错来进行添加,可另行百度。
Ps:本文是对 https://blog.csdn.net/u012975242/article/details/83274693 理解与实际使用的优化