ServiceManager add_service SELinux Permission Denied

问题点:

在systemserver.java中添加如下代码,向servicemanager进程中添加一个service

<span style="font-size:18px;">			try {

			Slog.i(TAG, "Hello Service");

			ServiceManager.addService("hello", new HelloService());// 

			} catch (Throwable e) {

			Slog.e(TAG, "Failure starting Hello Service", e);

			} </span>

servicemanager是BINDER的管理者,负责协调Android里的进程通信。这里添加的helloservice是一个硬件管理服务,运行在单独的进程里,如果APP想要使用这个服务就必须通过servicemanager查询和调用。

执行代码的时候出现了如下错误:

<span style="font-size:18px;"> E SELinux : avc:  denied  { add } for service=hello scontext=u:r:system_server:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager
 E ServiceManager: add_service('hello',62) uid=1000 - PERMISSION DENIED</span>
提示为SELinux Permission Denied 。解决办法参考:http://stackoverflow.com/questions/30165852/selinux-permission-denied-for-a-new-framework-service-in-android 

解决办法:

To file:

android-dev\external\sepolicy\service.te

Add:

type mytest_service, system_api_service, system_server_service, service_manager_type;

To file:

android-dev\external\sepolicy\service_contexts

Add:

mytestservice u:object_r:mytest_service:s0

where mytestservice your name service

我的hello 在\external\sepolicy\service.te 添加了:

<span style="font-size:18px;">type hello_service, system_api_service, system_server_service, service_manager_type;</span>
在 \external\sepolicy\service_contexts
添加

<span style="font-size:18px;">hello	 		u:object_r:hello_service:s0</span>
然后重新编译 

make -j32 

就不会有

<span style="font-size:18px;">E ServiceManager: add_service('hello',62) uid=1000 - PERMISSION DENIED</span>
的提示了!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值