Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用android treble架构向ServiceManager添加供应商服务[SELinux策略]_Android_Linux Kernel_Android Source_Selinux_Servicemanager - Fatal编程技术网

使用android treble架构向ServiceManager添加供应商服务[SELinux策略]

使用android treble架构向ServiceManager添加供应商服务[SELinux策略],android,linux-kernel,android-source,selinux,servicemanager,Android,Linux Kernel,Android Source,Selinux,Servicemanager,注意:我是SELinux策略的初学者,并遵循 我有一个java服务(MyService),它在BootComplete接收器上启动。 现在,我在onCreate的myservice.java中将myservice添加到ServiceManager中 ServiceManager.addService(mysystemservice, mybinder); 按照三重架构, 通过在应用程序的Android.mk中添加以下内容,我将应用程序移动到供应商映像分区 LOCAL_VENDOR_MODULE

注意:我是SELinux策略的初学者,并遵循

我有一个java服务(MyService),它在BootComplete接收器上启动。 现在,我在onCreate的myservice.java中将myservice添加到ServiceManager中

ServiceManager.addService(mysystemservice, mybinder);
按照三重架构, 通过在应用程序的Android.mk中添加以下内容,我将应用程序移动到供应商映像分区

LOCAL_VENDOR_MODULE := true
我在OEM SELinux策略中做了以下更改,之前它是为系统服务编写的,现在我将应用程序移动到供应商,因此对供应商服务进行了更改,提供了旧的和当前的SE策略

已创建上下文“我的服务”

旧的

在私有/服务上下文中

mysystemservice-u:object\r:my\u-service:s0

现在

在供应商/公共/vndservice_上下文中

mysystemservice-u:object\r:my\u-service:s0

定义的服务类型

旧的

公共服务

输入我的服务、服务管理器类型

现在

在vendor/common/vndservice.te中

输入my\u服务,vndservice\u管理器\u类型

现在正在授予添加权限

旧的

在public/servicemanager.te中

允许系统应用程序我的服务:服务管理器添加

现在

在abc.te

在进行上述更改并进行完整构建后,我可以看到我的服务上下文是out/product/target/vendor/etc/selinux/vndservice\u上下文的一部分,而不是out/product/target/system

但是一旦Myservice.java尝试通过以下方式在ServiceManager中添加“mysystemservice”

addService(mysystemservice,mybinder)

我发现以下**avc被拒绝**错误

E/SELinux:avc:denied{add}for service=mysystemservice pid=7588 uid=1000 scontext=u:r:system\u app:s0 tcontext=u:object\r:default\u android\u service:s0 tclass=service\u manager permission=0 2019-11-14 12:44:39.613 592-592/? E/ServiceManager:add_服务('mysystemservice',b0)uid=1000-权限被拒绝

正如我们在上面的日志中看到的,目标上下文使用默认的“tcontext=u:object\u r:default\u android\u service:s0”代替“my\u service”

注意:若我保留对系统映像的更改,一切正常,唯一的问题是当我将SE策略更改移动到供应商时


请让我知道我是否遗漏了什么或任何其他方法是添加服务。

我看到的一个问题是,您使用的是
abc.te
,但您尚未在
seapp\u上下文中定义这一点

您应该定义如下内容:

user=system
seinfo=platform
name=your.package.name
domain=adbc
type=system_app_data_file

更改后,
avc
错误将指向
abc
app域。

请检查
audit2allow
建议添加的允许规则:您好,已尝试,但audit2allow在这里没有帮助,建议添加“默认的安卓服务”来代替“我的服务”以下是audit2allow的输出:#========================================允许系统应用程序默认\u android\u服务:服务\u管理器添加;请检查
vendor/common/vndservice\u上下文中的第一行是否包含二进制文件的完整路径(例如
/vendor/bin/mysystemservice
)。您好,建议的更改也存在同样的问题。但有一点我注意到了,我没有在“out/target/product/XYZ/vendor/bin”位置看到“mysystemservice”。它应该在那里吗?位置取决于您在
Android.mk
Android.bp
中指定的内容。但是,是的,我希望默认的供应商二进制文件位于那里。您的
mysystemservice
在哪里?
user=system
seinfo=platform
name=your.package.name
domain=adbc
type=system_app_data_file