背景:

SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):

1)untrusted_app 第三方app,没有Android平台签名,没有system权限;

2)platform_app 有Android平台签名,没有system权限;

3)system_app 有android平台签名和system权限。

当APP需要做一些系统或系统设备相关的访问读写,新加的权限会跟android内置的neverallow规则冲突,从而造成编译不过。解决方法是为应用新建一个域,添加自定义规则,绕开编译问题。

新建方法:

1,在device/[product]/sepolicy/seapp_contexts 添加上APK的域定义:

user=system seinfo=platform name=com.fiill.fiillplayer domain=fiillplayer_app type=fiillplayer_app_data_file

user=_app,可以是untrusted_app或platform_app,如果seinfo=platform,则是platform_app。根据需要添加。

2,在/device/[product]/sepolicy/vendor/file.te加上

type fiillplayer_app_data_file, file_type, data_file_type ,core_data_file_type ;

3,新建/device/[product]/sepolicy/vendor/fiillplayer_app.te,部分内容参考:

type fiillplayer_app, domain;
app_domain(fiillplayer_app)
binder_use(fiillplayer_app)

allow fiillplayer_app system_app_data_file:file create_file_perms;
allow fiillplayer_app system_app_data_file:dir create_dir_perms;
allow fiillplayer_app system_data_file:dir r_dir_perms;
allow fiillplayer_app system_data_file:file r_file_perms;

#prop
allow fiillplayer_app hwservicemanager_prop:file { read getattr map open };
get_prop(fiillplayer_app, hwservicemanager_prop)
set_prop(fiillplayer_app, hwservicemanager_prop)

至此已经完成。注意,由于uid设置为system,所以权限有时候需要在system_app配置。如果想独立于system_app,试试user=_app。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐