Android新增服务添加selinux权限

java 复制代码
frameworks/base/services/java/com/android/server/SystemServer.java
java 复制代码
t.traceBegin("StartMyService");
        ServiceManager.addService("MyService", new MyService());
 t.traceEnd();

在进行定制化开发的时候,有时候需要通过AIDL的方式新建一些系统服务来满足特定的需求。一般来说都是客户自己的应用需要进行某些操作,但是通过现有的公开api没办法做到,这样就需要通过aidl服务来实现了。

关于aidl的内容就不多赘述了,今天主要是遇到了新增的服务向系统注册后,运行时系统找不到对应的selinux域(之前新增没有遇到过这种情况😂)。

错误:

java 复制代码
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:949)
2026-06-09 15:30:08.537 27376-27376 AndroidRuntime          system_server                        E  *** FATAL EXCEPTION IN SYSTEM PROCESS: main
                                                                                                    java.lang.SecurityException: SELinux denied.
                                                                                                    	at android.os.Parcel.createExceptionOrNull(Parcel.java:3079)
                                                                                                    	at android.os.Parcel.createException(Parcel.java:3063)
                                                                                                    	at android.os.Parcel.readException(Parcel.java:3046)
                                                                                                    	at android.os.Parcel.readException(Parcel.java:2988)
                                                                                                    	at android.os.IServiceManager$Stub$Proxy.addService(IServiceManager.java:468)
                                                                                                    	at android.os.ServiceManagerProxy.addService(ServiceManagerNative.java:72)
                                                                                                    	at android.os.ServiceManager.addService(ServiceManager.java:213)
                                                                                                    	at android.os.ServiceManager.addService(ServiceManager.java:180)
                                                                                                    	at com.android.server.SystemServer.startOtherServices(SystemServer.java:3367)
                                                                                                    	at com.android.server.SystemServer.run(SystemServer.java:988)
                                                                                                    	at com.android.server.SystemServer.main(SystemServer.java:700)
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)

问了下deepseek:

  • 直接原因SystemServer.startOtherServices 中调用 ServiceManager.addService() 时被 SELinux 拒绝,抛出 SecurityException,引发 system_server 进程 FATAL EXCEPTION

  • 根本原因 :新添加的系统服务(很可能就是之前实现的 DeviceCtrlService)缺少相应的 SELinux 策略。system_server 进程向 servicemanager 注册服务时,需要允许 service_manageradd 权限,并且服务名称需在策略中声明。

解决方法:

  • device/rockchip/common/sepolicy/private/service_contexts 文件末尾添加一行:

    java 复制代码
    MyService                                u:object_r:my_service:s0
  • 然后在同一目录下的 service.te(若不存在则新建)中定义类型和规则:

    java 复制代码
    type my_service, service_manager_type;
  • 最后在 system_server.te 中允许添加该服务(可在 device/rockchip/common/sepolicy/private/system_server.te 中添加):

    java 复制代码
    allow system_server my_service:service_manager add;

    可能不同方案的sepolicy的路径不一样,这个就要根据自己的方案去找了。

  • 亲测有效😊

相关推荐
学计算机的计算基12 分钟前
操作系统内存管理全解:虚拟内存、页表、COW、malloc、OOM一篇搞定
java·笔记·算法
tachibana216 分钟前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
万亿少女的梦16835 分钟前
基于Spring Boot、Java与MySQL的网络订餐系统设计与实现
java·spring boot·mysql·系统设计·网络订餐
咩咩啃树皮9 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚10 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白11 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司12 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地13 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415913 小时前
TCP超时重传机制是为了解决什么问题?
java
HLC++13 小时前
Linux的进程间通信
android·linux·服务器