You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 13新增自定义服务Bean时SELinux权限问题求助

解决Android 13自定义服务SELinux权限问题

核心问题分析

从报错信息可见:

avc:  denied  { add } for pid=831 uid=1000 name=bean scontext=u:r:system_server:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager permissive=0

tcontext=u:object_r:default_android_service:s0说明系统未识别到bean服务对应的SELinux类型映射,自动 fallback 到默认类型,导致你定义的allow system_server bean_service:service_manager add;规则完全不生效。

第一步:修复service_contexts文件语法错误

你提供的service_contexts文件开头使用了中文冒号:

service_contexts:
bean u:object_r:bean_service:s0

SELinux配置文件对语法要求严格,中文符号会直接导致文件解析失败,服务上下文映射无法加载。

将文件修正为(可直接移除多余的标题行):

bean u:object_r:bean_service:s0

第二步:修正sepolicy目录与.mk配置

  1. 保留你的目录结构,仅在aosp/device/generic/car/emulator/aosp_car_emulator.mk中添加必要配置:

    BOARD_VENDOR_SEPOLICY_DIRS += vendor/jiangc/sepolicy
    

    无需添加BOARD_PLAT_PUBLIC_SEPOLICY_DIR或BOARD_PLAT_PRIVATE_SEPOLICY_DIR——你的sepolicy属于vendor层级,不应混入平台级配置。

  2. 验证编译合并结果
    编译完成后,检查out/target/product/emulator_x86/vendor/etc/selinux/vendor_service_contexts,确认其中包含bean u:object_r:bean_service:s0条目。如果缺失,执行make clean && make sepolicy -j单独编译sepolicy模块,查看输出是否有路径错误或语法警告。

第三步:确认sepolicy规则有效性

  1. service.te中的类型定义无问题:

    type bean_service, service_manager_type;
    

    service_manager_type是SELinux预定义属性,标记该类型为服务管理器可识别的服务类型。

  2. 若编译时出现neverallow规则冲突,说明vendor层级无法给system_server(平台域)添加权限,可将system_server.te中的规则移至平台级sepolicy的override目录(如device/generic/car/emulator/sepolicy/plat_override/system_server.te),再重新编译。

第四步:验证修复效果

  1. 重新编译系统并启动模拟器,执行getenforce确认SELinux处于Enforcing模式。
  2. 执行service list | grep bean确认服务已注册,同时查看logcat是否还有avc报错。
  3. 若仍有疑问,执行sepolicy service_contexts | grep bean,确认系统已加载正确的上下文映射。

内容的提问来源于stack exchange,提问作者Chao Jiang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:17:44