【鸿蒙南向开发】OHOS构建自定义服务实战

​ 在面向全场景、全连接、全智能时代背景下,OpenHarmony必然会受到越来越多开发者的支持,在不同场景下,会根据实际需求裁剪某些非必要的子系统或组件,也会增加新的子系统或者组件。如果你想添加子系统或者添加服务/组件的话,希望本文能够给你带来一些启示。

1 基本概念

​ 介绍自定义服务之前,先简单介绍几个概念:

​ ①在鸿蒙系统中有三个基本概念,它们是子系统(subsystems),组件(components),功能(features).

​ OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层

image.png

​ 系统功能按照“系统 > 子系统 > 组件”逐级展开。子系统是一个逻辑概念,它具体由对应的组件构成。组件是对子系统的进一步拆分,可复用的软件单元,它包含源码、配置文件、资源文件和编译脚本;能独立构建,以二进制方式集成,是具备独立验证能力的二进制单元。

​ 举例来说,鸿蒙(系统) -->多媒体(子系统) -->音频(组件)–>采集(功能)

​ ②IPC(Inter-Process Communication)机制:使用Binder驱动,用于设备内的跨进程通信。IPC通常采用客户端-服务器(Client-Server)模型,服务请求方(Client)可获取提供服务提供方(Server)的代理 (Proxy),并通过此代理读写数据来实现进程间的数据通信。

​ 通常,Server会先注册系统能力(System Ability)到系统能力管理者(System Ability Manager,缩写saMgr)中,saMgr负责管理这些SA并向Client提供相关的接口。Client要和某个具体的SA通信,必须先从saMgr中获取该SA的代理,然后使用代理和SA通信。一般使用Proxy表示服务请求方,Stub表示服务提供方。
image.png

2 预期目标

image.png

三:如何和新服务进行通信

3 实现效果

3.1.编译成功

​ 配置完成之后,代码编译成功

​ 以产品rk3568-khdvk为例,img文件生成,如下图

image.png

3.2.新服务运行

​ 烧录img文件到开发板,新服务hello以独立进程在开发板后台运行,如下图

image.png

3.3.和新服务进行通信

​ 可以通过命令行方式或者应用程序启动触发方式和服务端进行通信。

3.3.1 命令行进行通信

​ 客户端操作:执行myhello可执行程序,输入命令send,发送字符串"Hello,World"。

image.png

​ 服务端响应:在service层收到了发送的字符串"Hello,World"。

image.png

3.3.2 应用程序触发进行通信

​ 应用程序启动触发:

image.png

​ 服务端响应:返回字符串打印到应用程序窗体内。

image.png

4 代码实现目录结构

​ 整体位于目录foundation下,即foundation/mytest/hello。

mytest
    └─hello
    │  ohos.build // 管理mytest子系统各层级BUILD.gn
    │  
    ├─etc
    │      BUILD.gn  // 预编译配置管理
    │      hello.cfg
    │      hello.rc
    │      
    ├─interface
    │  │  BUILD.gn 
    │  │  
    │  ├─include
    │  │      hello_client.h
    │  │      hello_logs.h // 日志头文件
    │  │      hello_proxy.h
    │  │      ihello.h 
    │  │      
    │  ├─src
    │  │      hello_client.cpp // 接收应用层接口调用入口
    │  │      hello_proxy.cpp  // IPC通信代理
    │  │      
    │  └─test
    │      │  BUILD.gn // 对cli工具进行管理
    │      │  
    │      ├─include
    │      │      cli_tool.h 
    │      │      
    │      └─src
    │             cli_tool.cpp // 客户端测试入口
    │              
    ├─sa_profile
    │      9999.xml // 以sa ID命名
    │      BUILD.gn // 对xml进行管理
    │      
    └─service
        │  BUILD.gn // 服务端功能管理
        │  
        ├─include
        │      hello_service.h
        │      hello_stub.h
        │      
        └─src
                hello_service.cpp  // 服务程序
                hello_stub.cpp     // IPC通信桩      

5 实现过程

5.1 新服务如何配置及编译

5.1.1 新服务如何配置

​ 鸿蒙操作系统一个子系统的配置文件主要有如下四个:

5.1.1.1 模块目录中BUILD.gn文件

​ 在模块目录下配置BUILD.gn,根据类型选择对应的模板。

支持的模板类型:

ohos_executable // 指定 target 是个可执行文件
ohos_shared_library // 声明一个动态(win=.dll、linux=.so)
ohos_static_library // 静态库(win=.lib、linux=.a)
ohos_source_set // 定义源码集&
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值