Android 10 开机启动sh脚本

本文介绍了如何在Mediatek设备上配置开机后运行的sh脚本,实现SD卡目录下文件夹的创建和客户文件的复制,包括PRODUCT_COPY_FILES设置、脚本编写、init.rc中的服务配置,以及权限管理和SELinux调整。

客户需求要在sdcard目录下增加文件和文件夹

开机后增加运行sh脚本,脚本中执行mkdir和cp操作

1、拷贝客户文件和脚本

PRODUCT_COPY_FILES += device/mediatek/vendor/common/xxx.zjs:/data/preloadmedia/xxx.zjs
PRODUCT_COPY_FILES += device/mediatek/vendor/common/preloadmedia.sh:/system/bin/preloadmedia.sh

2、脚本代码

#!/system/bin/sh
PRELOAD_DEST=/storage/emulated/0/xxx
PRELOAD_FLAG=${PRELOAD_DEST}/xxx.zjs
PRELOAD_SOURCE=/data/preloadmedia

if [ ! -d ${PRELOAD_DEST} ]
then
mkdir -p ${PRELOAD_DEST}
cat  ${PRELOAD_SOURCE}/xxx.zjs > ${PRELOAD_DEST}/xxx.zjs
fi

3、开机完成后执行脚本 init.rc

service preloadmedia /system/bin/preloadmedia.sh
    disabled
    user root
    group root
    seclabel u:r:preloadmedia:s0
    oneshot

on property:sys.boot_completed=1
    wait /sdcard/Android
    start preloadmedia

4、添加权限

preloadmedia.te
type preloadmedia, domain, mlstrustedsubject;
type preloadmedia_exec, exec_type, file_type, system_file_type;
typeattribute preloadmedia coredomain;
init_daemon_domain(preloadmedia)
permissive  preloadmedia;
domain_trans(init, shell_exec, preloadmedia)
allow preloadmedia shell_exec:file { read execute getattr};
allow preloadmedia system_data_file:file {  getattr};
allow preloadmedia storage_file:lnk_file { read };
allow preloadmedia toolbox_exec:file { getattr execute  read open execute_no_trans};

 file_contexts
 /(system\/vendor|vendor)/bin/preloadmedia.sh u:object_r:preloadmedia_exec:s0

然后根据log中的avc报错修改权限,或者关闭selinux

Android 系统中实现开机自动运行 Shell 脚本,通常可以通过修改系统启动配置文件 `init.rc` 或其衍生文件(如 `init.<device>.rc`)来完成。以下是一个完整的配置流程: ### 配置步骤 #### 1. 编写 Shell 脚本 首先,编写一个简单的 Shell 脚本,并将其放置到 `/system/bin/` 或 `/vendor/bin/` 目录下。例如: ```sh #!/system/bin/sh echo "this is init script" log -t initscript "this is initscript!" ``` 确保脚本具有可执行权限,可以通过 `chmod +x /system/bin/your_script.sh` 设置权限。 #### 2. 修改 `init.rc` 或设备特定的 `init.<device>.rc` 文件 在 `init.rc` 或设备特定的启动配置文件中添加一个服务定义,确保脚本在系统启动过程中运行。例如: ```rc service your_service_name /system/bin/sh /system/bin/your_script.sh class main user root group root oneshot ``` #### 3. 确保脚本在系统启动运行 为了确保脚本在系统启动完成后执行,可以在 `on property:sys.boot_completed=1` 事件中启动服务。例如: ```rc on property:sys.boot_completed=1 start your_service_name ``` #### 4. 使用 `exec` 直接执行脚本 在某些情况下,可以直接使用 `exec` 命令执行脚本,例如: ```rc exec /system/bin/sh /system/bin/your_script.sh ``` ### 示例:配置开机启动服务 以下是一个具体的示例,展示如何在 Rockchip Android 7 上配置开机启动服务: ```rc service xfwuApp /system/bin/sh /system/bin/xfwuApp.sh class main user root group root oneshot on property:sys.boot_completed=1 start xfwuApp ``` 脚本文件 `/system/bin/xfwuApp.sh` 的内容如下: ```sh #!/system/bin/sh am startservice -n com.aaa.smartdev/.SmartDeviceMain ``` ### 注意事项 - **路径选择**:确保脚本放置在系统可执行路径中,如 `/system/bin/` 或 `/vendor/bin/`。 - **权限设置**:脚本文件需要具有可执行权限。 - **日志记录**:可以使用 `log` 命令记录脚本执行过程中的信息,便于调试。 - **系统限制**:某些 Android 系统可能对启动脚本有特定限制,需根据设备和系统版本进行调整。 通过以上步骤,可以在 Android 系统中成功配置一个开机自动运行Shell 脚本[^3]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值