在Android中从init.rc执行本机文件

时间:2019-06-20 06:17:18

标签: android shell android-source selinux init.d

我想从init.rc执行来自vendor / bin的文件。下面的代码我已经添加到我的init.rc文件中

on property:sys.vendor.Test_callback=1
exec - system system -- /vendor/bin/testBinary
setprop sys.test.hello 62

此处添加了属性sys.test.hello,以检查该属性是否被调用。我可以看到执行后该值更新为62。

这里的问题是exec - system system -- /vendor/bin/testBinary未被执行。

当我从adb shell作为root用户运行时,效果很好。

以下是执行ls -l后获得的文件testBinary的权限

-rwxr-xr-x 1 root      shell 

我在这里做错了什么? SE linux策略已被禁用以对此进行测试。

3 个答案:

答案 0 :(得分:1)

您可以从init.rc作为服务运行它。

首先在init.rc

中定义服务
service testBinary /vendor/bin/testBinary 
        disabled
        oneshot

您在init.rc中将sys.vendor.Test_callback设置为1通话的某个地方。

star testBinary 

如果要在崩溃时重新启动服务,可以删除oneshot

答案 1 :(得分:1)

这里的问题是,我正在从未在Phone进程中运行的应用程序设置属性。 解决方案:我在com.android.phone中创建了一个服务,并从新服务中执行了命令exec - system system -- /vendor/bin/testBinary,它对我有用。

PS:@Kiran Biradar发布的答案在从新服务执行时也可以正常工作

答案 2 :(得分:0)

尝试仅使用

exec -- /vendor/bin/testBinary