Android7下app以root权限运行shell脚本的一种方法

如果我们想要以root权限运行一个shell脚本(如此以来可以做很多的事情,比如直接控制设备节点等操作),那我们可以按照如下方法来做
1)修改system/core/rootdir/init.rc,添加如下的service和对应属性修改时启动的服务(在init.rc中可以添加服务,也可以添加系统属性改变时的对应动作),比如我们添加背光灯控制的相关服务和属性动做如下
service bri_off /system/bin/bri_off.sh
class main
user root
group root
oneshot
disabled
seclabel u:r:bri_off:s0

on property:sys.start_brightness_on=0
start bri_off

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

on property:sys.start_brightness_on=1
start bri_on

小注:service后面的服务名字和sh脚本的名字要一样(.sh除外),不然不起作用。
也就是service名字要和bri_on.sh的名字一致是bri_on才能行。

当我们加好service和属性动作后,如果起作用后(到此还没完成,后续还要再给脚本文件添加属性配置),我们在终端输入,setprop sys.start_brightness_on 0就可以关闭背光灯,setprop sys.start_brightness_on 1就可以开启背光灯。这里需要注意,device/rockchip/rk3288/rk3288_Box/init.rc中的内容可能也需要和上面的init.rc中的内容同步修改,我目前是这么做的,但是是否是必须的,还需要验证。
2)可以看到我们添加的服务其运行主体就是两个shell脚本,那么为了使得脚本在运行时具有高权限,我们需要在配置文件中为脚本文件配置权限。在system/sepolicy/file_contexts中加入如下配置
/system/bin/bri_off.sh u:object_r:bri_off_exec:s0
/system/bin/bri_on.sh u:object_r:bri_on_exec:s0
在system/sepolicy/目录下,新增两个文件,分别为bri_on.te和bri_off.te;
bri_on.te的内容如下:

type bri_on, domain;
type bri_on_exec, exec_type, file_type;
init_daemon_domain(bri_on)
bri_off.te的内容如下:

type bri_off, domain;
type bri_off_exec, exec_type, file_type;
init_daemon_domain(bri_off)
至此重新编译源码就可以实现以root权限运行脚本了,这样做的好处就是既可以对外开放特定root权限的操作,但是又不用开放root权限。直接通过读写系统属性值的形式来操作。
上面的bri_on.sh和bri_off.sh是我们加入到内核中的脚本,具体的加入方式是,在
device/rockchip/common目录下新建这两个运行脚本,然后在device/rockchip/common目录下的device.mk中新增加对这两个文件的拷贝动作,
就是在变量PRODUCT_copY_FILES中新增这俩文件的拷贝动作。
device/rockchip/common/bri_on.sh:system/bin/bri_on.sh
device/rockchip/common/bri_off.sh:system/bin/bri_off.sh
之后再编译这俩文件就会被拷贝到对应的位置,从而最终在运行的rom中处于/system/bin/目录下面

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...