1 原理
主要 修改系统编译配置文件,rc文件,SELinux相关文件。
2 解决方案(Android O)
@1 创建工程和 rc配置文件
创建一个新的目录 frameworks/native/services/surfaceflinger/spaceXA(这里只是举例,实际上可以根据实际情况 进行调整),主要是建立一个新的工程并有自己的Android.mk文件。
在文件 frameworks/native/services/surfaceflinger/surfaceflinger.rc(这里只是举例,实际上可以根据实际情况 进行调整,不一定是这个rc文件)中做如下修改:
@@ -7,3 +7,7 @@ service surfaceflinger /system/bin/surfaceflinger
socket pdx/system/vr/display/client stream 0666 system graphics u:object_r:pdx_display_client_endpoint_socket:s0
socket pdx/system/vr/display/manager stream 0666 system graphics u:object_r:pdx_display_manager_endpoint_socket:s0
socket pdx/system/vr/display/vsync stream 0666 system graphics u:object_r:pdx_display_vsync_endpoint_socket:s0
+service spaceXA /system/bin/spaceXA
+ class main
+ seclabel u:r:spacem:s0
+ socket space stream 0666 system system
@2 系统编译配置文件
在文件 system/core/rootdir/Android.mk 中做如下修改:
@@ -89,6 +89,7 @@ SANITIZE_ASAN_OPTIONS_FOR := \
servicemanager \
slim_daemon \
surfaceflinger \
+ spaceXA \
thermal-engine \
time_daemon \
update_engine \
在文件 build/make/target/product/embedded.mk中做如下修改:
@@ -77,6 +77,7 @@ PRODUCT_PACKAGES += \
shell_and_utilities \
storaged \
surfaceflinger \
+ spaceXA \
thermalserviced \
tombstoned \
tzdatacheck \
@3 SELinux 相关配置文件修改
在文件 device/qcom/sepolicy/private/file_contexts中做如下修改:
@@ -51,6 +51,7 @@
/system/bin/wfdservice u:object_r:wfdservice_exec:s0
/system/bin/mmi u:object_r:mmi_sys_exec:s0
/system/bin/mmi_diag u:object_r:mmi_sys_exec:s0
+/system/bin/spaceXA u:object_r:spaceXA_exec:s0
####### data files ################
/data/misc/seemp(/.*)? u:object_r:seemp_data_file:s0
在文件 device/qcom/sepolicy/private/spaceXA.te中做如下修改:
+type spaceXA, domain;
+type spaceXA_exec, exec_type, file_type;
+allow spaceXA self:udp_socket { connect getattr read recvfrom sendto write };