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

openharmony-基础篇-模块配置规则 模块编译 阅读详情

在面向全场景、全连接、全智能时代背景下,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 预期目标

  • 目标一:新服务如何配置,编译

  • 目标二:如何整合一个新服务到OHOS中

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

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=.
【OpenHarmony】使用手工编译的ohos-sdk 问题:修改了badge组件position属性,使其支持(x,y)坐标输入,但是previewer预览无效。 阅读详情

相关推荐

HarmonyOS (鸿蒙操作系统)你值得拥有

今天我们来谈谈当下最火爆的万物互联的操作系统—Harmony OS,这是国人的骄傲,也是每一个中华儿女值得去学习和研究的国产操作系统。在这里主要是想通过自己所写的一个小 Demo 来初探一下 Harmony OS 系统下的 app 应用开发,如有不对之处还望指出,共勉之。 Step 1: 开发环境的搭建 IDE & SDK 的安装就不在这里详细讲解了,华为的官网上面既有安装包也有相关的步骤,相信大家可以通过文档自行完成。 Step2: app开发的相关术语学习(摘至华为官网) 第一部

Python+大数据+数据分析+自动化+Vue组件开发 2437

2024最新版鸿蒙HarmonyOS开发工具安装使用指南

华为鸿蒙系统(HUAWEI Harmony OS),是华为公司在2019年8月9日于东莞举行的华为开发者大会(HDC.2019)上正式发布的分布式操作系统。华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,创造一个超级虚拟终端互联的世界,将人、设备、场景有机地联系在一起,将消费者在全场景生活中接触的多种智能终端,实现极速发现、极速连接、硬件互助、资源共享,用合适的设备提供场景体验。

jackson_lingua的博客 9959

鸿蒙系统编译方式

鸿蒙系统三种编译方式:hb、build脚本、hpm

卓越之路 2141

OpenHarmony 鸿蒙南向设备开发系列课,带你从入门到实战(环境搭建、源码下载&分析&编译、GN语法、Uboot、鸿蒙内核启动流程、硬件开发)

《OpenHarmony南向开发实战指南》摘要:本文系统介绍了OpenHarmony设备侧开发全流程,重点讲解了环境搭建(包含Ubuntu配置、DevEcoDeviceTool安装)、源码获取与编译、GN语法解析等核心技术。通过Hi3516/Hi3861开发板案例,详细剖析了Uboot引导、内核启动流程及GPIO/I2C驱动开发等实战内容。针对南向开发特点,文章提供了从工具链配置到驱动开发的完整解决方案,并推荐了进阶学习路径。本教程可作为嵌入式工程师掌握OpenHarmony南向开发的实用手册,帮助开发者快

abcdlwt的博客 2195

【HarmonyOS 鸿蒙实战开发】自定义装饰器

本示例介绍通过自定义装饰器在自定义组件中自动添加 inspector (布局回调) 方法并进行调用。

CTrup的博客 1337

【鸿蒙实战开发】—— NDK构建工程

HarmonyOS NDK默认使用CMake作为构建系统,随包提供了符合HarmonyOS工具链的基础配置文件 ohos.toolchain.cmake,用于预定义CMake变量来简化开发者配置。从源码构建源码构建也有不同方式:* 可以使用DevEco Studio提供的C++应用模板,用DevEco Studio来编译构建* 也可以使用命令行CMake来编译构建使用预构建库构建本章节将通过具体示例介绍如何在Native工程中使用NDK,以及如何编写CMake脚本来构建NDK工程。

2401_88547687的博客 1271

【HarmonyOS实战开发】鸿蒙系统图片视频选择器之Flutter插件实践

本文主要在Fanbook原有图片选择器插件的基础上,新增鸿蒙系统支持,实现了针对鸿蒙系统特定图片视频选器,里面包含了图片压缩、图片基础信息获取、视频压缩、获取视频基本信息、取视频封面等操作。当然,在实现这块需求的过程中,遇到了不少的问题和解决方案,我挑选了几条核心功能点来和大家分享,相信看完之后,对于鸿蒙系统的图片选择器实现有一定的帮助。阅读本文需要有一个定Flutter插件开发基础和鸿蒙ArkTS开发基础。

好运来的博客 2375

鸿蒙HarmonyOS应用开发之NDK工程构建

ohos.toolchain.cmake是OpenHarmony NDK提供给CMake的toolchain脚本,里面预定义了编译OpenHarmony应用需要设置的编译参数,如交叉编译设备的目标、C++运行时库的链接方式等;这些参数在调用CMake命令时,可以从命令行传入,来改变默认编译链接行为。此文件中的常用参数见下表。参数类型说明OHOS_STLlibc++的链接方式。默认为c++_shared。c++_shared表示采用动态链接libc++_shared.so;

YHDMYBY的博客 1416

鸿蒙HarmonyOS应用开发之NDK工程构建概述

ohos.toolchain.cmake是OpenHarmony NDK提供给CMake的toolchain脚本,里面预定义了编译OpenHarmony应用需要设置的编译参数,如交叉编译设备的目标、C++运行时库的链接方式等;这些参数在调用CMake命令时,可以从命令行传入,来改变默认编译链接行为。此文件中的常用参数见下表。参数类型说明OHOS_STLlibc++的链接方式。默认为c++_shared。c++_shared表示采用动态链接libc++_shared.so;

2401_83047642的博客 1427

【鸿蒙南向开发实战教程】OpenHarmony中SystemAbility的实现方法详解

在系统服务管理子系统中safwk组件定义OpenHarmony中SystemAbility的实现方法,并提供启动、注册等接口实现。系统架构图 1 系统服务框架图定义该服务对外提供的能力集合函数,统一继承IPC接口类IRemoteBroker;同时实现该IPC对外接口唯一标识符DECLARE_INTERFACE_DESCRIPTOR(XXX);该标识符用于IPC通信的校验等目的。

HarmonyOS_001的博客 1381

人大金仓数据库Kingbase FlySync同步程序安装

Kingbase FlySync同步程序(以下简称 KFS)是面向异地容灾、数据集中共享的场景推出的具备在异构数据平台间实现实时、增量数据同步的工具类产品,主要采用了物理日志解析技术,帮助用户解决不同数据平台的数据间可实现任意方向实时移动流转的问题,并保证此过程中数据不丢失,状态可监控,流转数据量可统计。KFS 需要安装的主要组件有 2 个,分别是后端同步程序和管理控制平台,另外KFS的部署方式也有2种,为分离部署何集中部署•集中部署:KFS与数据库部署在同一机器上。

weixin_44312518的博客 1170

PSIM+PIL+CCS三剑客:手把手教你搞定DSP28335的软硬件联合调试

本文详细介绍了如何利用PSIM、PIL与CCS三款工具,实现DSP28335的软硬件联合调试。通过搭建兼容环境、从PSIM仿真生成PIL代码,再到实战联合调试与问题诊断,手把手指导开发者构建从虚拟模型到实际硬件的完整验证闭环,有效提升电力电子与电机驱动等领域的开发效率与可靠性。

weixin_29183637的博客 182

遥感生态指数(RSEI)——四个指数的计算

遥感生态指数是在4个生态指数的基础上通过主成分变换得出的一个评价生态环境质量的指标。因此,第二部分就是要分别计算出这4个指数的值。 ①首先,是绿度指数的计算,一般用归一化植被指数(NDVI) NDVI=(NIR-Red)/(NIR+Red) 在Bandmath工具中输入NDVI计算公式 (float(b4-b3))/(b4+b3) 其中,b3、b4分别是红波段和近红外波段 ②其次,是湿度计算。 WET = c1B1 + c2B2 + c3B3...

qq_41978498的博客 9万+

SQL手工注入及sqlmap注入(文章管理系统实例练习)

sql手工注入及sqlmap注入练习

weixin_53303754的博客 518

【ERROR】ERROR1: PROJ: proj_create_from_database: Cannot find proj.db - 环境变量配置与路径修复指南

本文详细解析了地理空间数据处理中常见的【ERROR】ERROR1: PROJ: proj_create_from_database: Cannot find proj.db 错误。该错误的根源是PROJ库无法定位其核心数据文件proj.db。文章提供了从问题诊断到修复的完整指南,包括如何在不同系统(Windows/macOS/Linux)和安装方式(Conda/pip/源码编译)下找到正确的proj.db文件路径,并通过设置PROJ_LIB环境变量(临时、代码内或永久)彻底解决问题,同时给出了进阶排查技巧和

m2n3o4p5的博客 551

ubuntu20.04开机黑屏卡在/dev/sda1:clean,***files,***blocks,解决心得记录

这个问题如果你百度,会发现目前有很多种解决方法。 有更新显卡驱动的,有卸载上一次安装软件的,还有各种奇奇怪怪的故障原因。 如果你是属于上述情况,那么按照百度和论坛的各种指引操作一般都能解决。 但我这里主要说一种特殊情况,就是我什么也没有操作,我什么也没干。就是正常使用系统关了机突然就报错了。 这也是自己亲自遇到的问题,做个小记录方便以后自己回顾。 上一次出现这种情况我重装系统了,这次用了两个月又出现了,重装成本太高,我接受不了,于是找到解决办法。 首先找个终端进入,进入终端的方法很多,用安装u盘

qq_41517017的博客 2万+

【项目实战】Java9的新特性模块化(Module)

Java 9引入了模块化系统,称为"Java Platform Module System"(JPMS)这个系统允许将Java程序分成模块,每个模块都有自己的规范,可以明确地声明它依赖于哪些其他模块,并且只能访问被其所依赖的模块暴露的API。这样可以模块化就是增加了更高级别的聚合,是Package的封装体。Package是一些类路径名字的约定,而模块是一个或多个Package组成的封装体。

奶爸的编程之路,也就一周冷个三天 1893

手把手教你学Simulink——基础电机控制场景实例:基于Simulink的永磁同步发电机温度场耦合仿真

摘要:本文详细介绍了基于Simulink的永磁同步发电机(PMSG)电-热耦合仿真方法。通过Simscape Electrical搭建含热端口的PMSG模型,结合集总参数热网络(LPTN)实现损耗计算与温度反馈,分析了过载工况下温升对电阻和永磁体性能的影响。仿真结果表明:150%过载20秒会导致绕组温升132°C,电阻增加42%,磁链衰减10.5%。文章还提供了自然冷却与强迫风冷的对比数据,并建议通过多物理场耦合仿真预防实机过热问题。该方法可有效支撑高功率密度电机热设计,避免永磁体退磁风险。

MHD0815的博客 240

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 【鸿蒙南向开发】OpenHarmony源码解析之获取显示状态功能
下一篇: 【鸿蒙南向开发】OpenHarmony——hilog命令行使用手册
普通网友
博客等级 码龄2年 3992粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值