一、概述:

在Android项目开发中,有时候需要在init.rc中执行一些脚本命令,但是init.rc文件支持的shell命令并不完整 ,有一种方案,可以在init.rc文件中创建服务,开机则启动脚本实现相应的需求。

本文介绍了如何在展锐平台Android 13设备上通过init.rc配置开机后执行shell脚本来创建目录、复制文件和修改文件的权限。主要步骤包括创建执行脚本,将脚本copy到system/bin目录下,在init.rc文件中创建服务,让系统启动完成后执行脚本,并调整SELinux权限以确保脚本能够顺利执行。

二、创建脚本并将myshell.sh复制到/system/bin

1、创建脚本

在device/sprd/sharkl5/ums312_2h10/product/ums312_2h10_Natvc目录下创建脚本myshell.sh

#!/bin/sh

mkdir /mnt/myfile //创建文件myfile

chmod -R 777 /mnt/myfile //修改文件的权限

cp -r /data/data /mnt/myfile //复制文件

2、复制脚本到/system/bin

在device/sprd/sharkl5/ums312_2h10/product/ums312_2h10_Natv/var.mk添加如下内容

RODUCT_COPY_FILES +=device/sprd/sharkl5/ums312_2h10/product/ums312_2h10_Natvc/myshell.sh:system/bin/myshell.sh

三、init.rc中创建执行脚本的服务

service myshell /system/bin/myshell.sh

user root

group root

disabled

seclabel u:r:shell:s0

oneshot

on property:sys.boot_completed=1

start myshell

四、打开selinux

在system/core/init/selinux.cpp文件中修改selinux的权限,这一点很关键,否则开机后脚本不会执行

bool IsEnforcing() {

{

+ return false; //add

int fd(open("/mboot/selinux", O_RDONLY | O_CLOEXEC | O_BINARY));

if (fd != -1) {

char v = 0xff;

if (read(fd, &v, 1) < 0)

PLOG(ERROR) << "Failed to read /mboot/selinux";

close(fd);

LOG(WARNING) << "/mboot/selinux is " << v;

return v == '1';

}

}

if (ALLOW_PERMISSIVE_SELINUX) {

return StatusFromProperty() == SELINUX_ENFORCING;

}

return true;

}

以上就是Anddroid13 创建脚本,在init.rc中添加shell脚本执行服务,实现开机自启动的完整流程