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

本文介绍了在Android7系统中如何以root权限运行shell脚本的方法,涉及修改`init.rc`添加服务,配置文件权限,以及创建相应的策略文件。通过这种方法,可以在不开放root权限的情况下,实现对特定操作的root级别控制,例如控制设备背光亮度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果我们想要以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/目录下面

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值