【问题标题】:Executing a native File from init.rc in Android在 Android 中从 init.rc 执行本机文件
【发布时间】:2019-11-02 22:09:51
【问题描述】:

我想从我的 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 身份运行时,它工作正常。

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

-rwxr-xr-x 1 root      shell 

我在这里做错了什么? SE linux 政策已经被禁用来测试这个。

【问题讨论】:

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


    【解决方案1】:

    尽量只用

    exec -- /vendor/bin/testBinary
    

    【讨论】:

      【解决方案2】:

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

      首先在init.rc某处定义服务

      service testBinary /vendor/bin/testBinary 
              disabled
              oneshot
      

      init.rc 的某个位置,您将sys.vendor.Test_callback 设置为1 调用。

      star testBinary 
      

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

      【讨论】:

      • 我试过了,但没有成功。欢迎提出建议!
      • 没有新的观察,事实上在 adb 日志中我看不到任何关于这个测试二进制文件的消息。早些时候,当我使用“exec - system system -- /vendor/bin/testBinary”执行此操作时,我遇到了一些 Selinux 策略错误。后来我禁用了 se 政策
      • 此解决方案仅适用于用户调试版本,但在用户构建时失败。有什么建议吗?
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2019-10-26
        • 1970-01-01
        • 2017-08-03
        • 1970-01-01
        • 2023-01-27
        • 2019-09-17
        • 2016-10-22
        • 1970-01-01
        • 2021-12-30
        相关资源
        最近更新 更多