编写native可执行程序,编写rc脚本添加到系统服务
代码目录结构如下:
mynativeservice/
├── Android.mk
├── main_mynativeservice.cpp
└── mynativeservice.rc
- 编写native可执行程序
// mynativeservice/main_mynativeservice.cpp
#include <utils/Log.h>
using namespace android;
int main(int argc, char** argv){
ALOGD("mynativeservice is running.");
}
- 编写对应的mk脚本
# mynativeservice/Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
main_mynativeservice.cpp
LOCAL_SHARED_LIBRARIES := \
libutils \
libbinder \
liblog
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE:= mynativeservice
LOCAL_INIT_RC := mynativeservice.rc
include $(BUILD_EXECUTABLE)
- 编写rc脚本,添加到系统服务
# mynativeservice/mynativeservice.rc
service mynativeservice /system/bin/mynativeservice
class main
user root
oneshot
-
配置打包进系统
-
添加selinux权限
新添加的native service,默认不能被client查找到,需要配置selinux权限
# mynativeservice/sepolicy/file_contexts
/system/bin/mynativeservice u:object_r:mynativeservice_exec:s0
# mynativeservice/sepolicy/file_contextsmynativeservice.te
# mynativeservice
type mynativeservice, domain, coredomain;
type mynativeservice_exec, exec_type, file_type, system_file_type;
init_daemon_domain(mynativeservice)
typeattribute mynativeservice coredomain;
typeattribute mynativeservice mlstrustedsubject;
binder_use(mynativeservice)
binder_service(mynativeservice)
allow mynativeservice servicemanager:binder { call transfer };
allow mynativeservice root_block_device:blk_file { read write open };
allow mynativeservice block_device:dir { search };
allow mynativeservice private_block_device:blk_file { read write open };
板型中添加
BOARD_VENDOR_SEPOLICY_DIRS += vendor/aw/public/framework/mynativeservice/sepolicy
定制aidl接口
代码目录结构如下:
mynativeservice/
├── Android.mk
├── libmynativeservice
│ ├── aidl
│ │ └── com
│ │ └── example
│ │ └── IMyNativeService.aidl
│ ├── Android.bp
│ ├── MyNativeService.cpp
│ └── MyNativeService.h
├── main_mynativeservice.cpp
└── mynativeservice.rc
- 编写aidl
// mynativeservice/libmynativeservice/aidl/com/example/IMyNativeService.aidl
package com.example;
interface IMyNativeService {
void hello();
int world();
}
编写服务,并添加到binder
aidl可以编译的时候自动生成binder相关代码,像BnMyNativeService、BpMyNativeService之类的
定义服务接口
// mynativeservice/libmynativeservice/MyNativeService.h
#ifndef BEANSERVICE_H
#define BEANSERVICE_H
#include <com/example/BnMyNativeService.h>
#incl

最低0.47元/天 解锁文章
6260

被折叠的 条评论
为什么被折叠?



