首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AOSP中声明服务

在AOSP中声明服务
EN

Stack Overflow用户
提问于 2022-08-03 08:42:43
回答 1查看 159关注 0票数 0

作为培训课程的一部分,我需要在AOSP中声明一个服务,并在引导时调用它。问题是训练已经过时了,我在一台物理机器上工作,而且这个项目是不同的。

规格: Android版本: 12 Android SDK: 31

无论如何,我已经在C中构建了一个名为"exd“的模块,它存储在/system/bin/中,并且在手动调用时工作正常。接下来,我想把它声明为服务。

我在init.product.rc文件中添加了:

代码语言:javascript
复制
service exd /system/bin/exd
    oneshot

on boot
    start exd

但是当我构建并下载它到设备时,服务列表不会显示它。它不是从靴子开始的。

接下来,我将exd.te文件添加到sepolicy文件夹中:

代码语言:javascript
复制
type exd, domain;
type exd_exec, domain;
init_daemon_domain(exd)

并将这一行添加到file_contexts中:

代码语言:javascript
复制
/system/bin/exd u:object_r:exd_exec:s0

当我调用build时,它会失败,其中包含以下消息:

代码语言:javascript
复制
Error while expanding policy
[ 39% 60/151] //system/sepolicy:sepolicy.recovery Compiling cil files for sepolicy.recovery [common]
FAILED: out/soong/.intermediates/system/sepolicy/sepolicy.recovery/android_common/sepolicy
out/host/linux-x86/bin/secilc -m -M true -G -c 30 out/soong/.intermediates/system/sepolicy/recovery_sepolicy.cil/android_common/recovery_sepolicy.cil -o out/soong/.intermediates/system/sepolicy/sepolicy.recovery/android_common/sepolicy_policy -f /dev/null && cp -f out/soong/.intermediates/system/sepolicy/sepolicy.recovery/android_common/sepolicy_policy out/soong/.intermediates/system/sepolicy/sepolicy.recovery/android_common/sepolicy && rm -f out/soong/.intermediates/system/sepolicy/sepolicy.recovery/android_common/sepolicy_policy # hash of input list: 187605db6ee3f7580bafd9adbd0101d2c2a0d02f423bb7efa74ee537c43d35ce
neverallow check failed at out/soong/.intermediates/system/sepolicy/recovery_sepolicy.cil/android_common/recovery_sepolicy.cil:8770 from system/sepolicy/public/domain.te:1240
  (neverallow base_typeattr_197 domain (file (execute execute_no_trans entrypoint)))
    <root>
    allow at out/soong/.intermediates/system/sepolicy/recovery_sepolicy.cil/android_common/recovery_sepolicy.cil:28846
      (allow init exd_exec (file (read getattr map execute open)))
    <root>
    allow at out/soong/.intermediates/system/sepolicy/recovery_sepolicy.cil/android_common/recovery_sepolicy.cil:28848
      (allow exd exd_exec (file (read getattr map execute open entrypoint)))

Failed to generate binary
Failed to build policydb
10:35:34 ninja failed with: exit status 1

我试过在网上找到的所有东西都没有用。奇怪的是,还有另一个名为"bugreport“的服务,它几乎被声明为我的服务,但它列在”服务列表“命令之后。

在这一点上,即使指向一个好的方向对我来说也是很好的。

EN

Stack Overflow用户

发布于 2022-11-01 14:08:19

你得到了“永不允许”,这基本上是安卓的意思,就是你试图做一些SEPolicy定义中不允许的事情。您需要为您的服务创建一个由.te规则组成的SEPolicy文件。

示例SEPolicy文件可以如下所示:

代码语言:javascript
复制
type myservice_exec, exec_type, file_type, system_file_type;
typeattribute myservice coredomain;

# myservice servicemanager and binder access
allow shell myservice:binder { call transfer };
allow servicemanager myservice:dir search;
allow servicemanager myservice:file { open read };
allow servicemanager myservice:process getattr;
allow myservice servicemanager:binder { call transfer};
allow myservice system_server:binder call;

init_daemon_domain(myservice)

注意第二行。你错过了这一点,这很可能就是为什么你会遇到一个永远不允许的问题。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73218746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档