在package/app/下创建loop文件夹,然后编写自己的cpp文件loop.cpp
#include
#include
#include
#include
int main()
{
int i=0;
for(i;i<1000;i++)
{
sleep(1000);
printf("This is a customized process\n");
}
}
然后再编写一个自定义的程序Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CLANG := true
LOCAL_SRC_FILES := loop.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/..
LOCAL_MODULE := loop
include $(BUILD_EXECUTABLE)
将loop.cpp和Android.mk放到loop的文件夹下,将loop添加到core.mk中
在build/target/produce/core.mk中添加
PRODUCT_PACKAGES += \
loop
在system/core/rootdir/init.rc中定义service
service loop_server /system/bin/loop
class main
user root
group root system
disabled
on property:sys.loop=1
start loop_server
on property:sys.loop=0
stop loop_server
我是在高通平台添加的所以在device/qcom/sepolicy/commom下添加自己的te文件,其实我这个custom不需要添加 te文件的,因为我这个应用不需要进行权限申请,只是单纯打印,这个te文件是从别的项目里拿来的,改一下名字而已.
type loop, domain, domain_deprecated;
type loop_exec, exec_type, file_type;
init_daemon_domain(loop)
allow loop smem_log_device:chr_file rw_file_perms;
allow loop self:capability {
setuid
setgid
dac_override
dac_read_search
sys_admin
net_raw
net_admin
fowner
fsetid
kill
sys_module
};
allow loop self:tcp_socket { bind create accept listen write getopt getattr read};
allow loop self:capability2 syslog;
allow loop self:packet_socket { create ioctl bind getopt setopt };
allow loop system_file:file x_file_perms;
allow loop shell_exec:file rx_file_perms;
allow loop uhid_device:chr_file ioctl;
allow loop graphics_device:chr_file open;
allow loop node:tcp_socket node_bind;
allow loop node:udp_socket node_bind;
allow loop surfaceflinger:binder transfer;
allow loop graphics_device:chr_file { read write ioctl };
allow loop uhid_device:chr_file open;
allow loop port:tcp_socket name_bind;
allow loop port:udp_socket name_bind;
allow loop surfaceflinger_service:service_manager find;
allow loop surfaceflinger:binder call;
allow loop surfaceflinger:fd use;
allow loop graphics_device:dir search;
allow loop input_device:dir search;
allow loop uhid_device:chr_file write;
allow loop loop:tcp_socket setopt;
allow loop loop:udp_socket { create write bind read };
allow loop servicemanager:binder call;
binder_call(loop, servicemanager);
allow loop fuse:dir create_dir_perms;
allow loop fuse:file create_file_perms;
allow loop kernel:system syslog_mod;
allow loop device:dir r_dir_perms;
allow loop ramdump_device:chr_file { setattr rw_file_perms };
allow loop diag_exec:file rx_file_perms;
wakelock_use(loop)
然后在device/qcom/sepolicy/common/file_contexts中添加
/system/bin/loop u:object_r:loop_exec:s0
在device/qcom/sepolicy/common/property.te中添加
type loop_prop, property_type;
在device/qcom/sepolicy/common/property_contexts中添加
sys.loop u:object_r:loop_prop:s0
在device/qcom/sepolicy/common/service.te中添加
type custom_loop_service,app_api_service, system_server_service, service_manager_type;
在device/qcom/sepolicy/common/service_contexts中添加
loop_service u:object_r:mia_loop_service:s0
在device/qcom/sepolicy/common/system_app.te中添加
allow system_app loop_prop:property_service set;
在system/sepolicy/servicemanager.te中添加
allow servicemanager loop:dir search;
allow servicemanager loop:file { open read getattr setattr ioctl };
allow servicemanager loop:process getattr;
最后编译一下ROM,刷机完成开机shell进去用命令ps -Z |grep loop就可以看到自己的service进程loop_server了~
参考:https://blog.csdn.net/qq_28899635/article/details/56289063