aosp新增一个native服务

编写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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值