如何使用 DevEco Studio 创建 Native C++ 应用
简介
本篇主要介绍如何使用 DevEco Studio for OpenAtom OpenHarmony (以下简称“OpenHarmony”)创建一个 Native C++应用。应用采用“Native C++”模板,实现了通过 Node-API 调用 C 标准库的功能。本示例通过调用 C 标准库接口来演示调用过程,具体接口是 C 标准库的计算两个给定数和,并将结果返回到页面展示。通过这个应用我们可以掌握 OpenHarmony 系统的 ArkTS/JS 与 C/C++混合开发。ArkTS/JS 与 C/C++ 混合开发是 OpenHarmony 系统中的一套原生模块扩展开发框架,它基于 Node.js N-API 规范开发,为开发者提供了 ArkTS/JS 与 C/C++模块之间相互调用的交互能力。这套机制对于 OpenHarmony 系统开发的价值有两方面:
1、OpenHarmony 系统可以将框架层丰富的模块功能通过 js 接口开放给上层应用使用。
2、应用开发者也可以选择将一些对性能、底层系统调用有要求的核心功能用 C/C++封装实现,再通过 js 接口使用,提高应用本身的执行效率。
效果图
实现效果如下图所示:
通过 ArkTS 编写界面,根据界面展示点击输入框输入两个数,再点击计算按钮调用接口,将数据传入到 C++端,C++端计算后再作为返回值到 ArkTS 端。
环境搭建
我们首先要完成应用开发环境的搭建,本示例运行 RK3568 开发板上。
1、 搭建应用开发环境
1.1、开始前请参考应用开发快速上手链接,完成 DevEco Studio 的安装和开发环境配置:参考链接
1.2、开发环境配置完成后,创建工程(模板选择“Native C++”),选择 JS 或者 eTS 语言开发。
2、应用调测
工程创建完成后,选择使用真机进行调测。
2.1、将搭载 OpenHarmony 标准系统的开发板与电脑连接。
2.2、点击 File> Project Structure... > Project>SigningConfigs 界面勾选“Automatically generate signature”,等待自动签名完成即可,最后点击“OK”。如下图所示:
在编辑窗口右上角的工具栏,点击"
"按钮运行。
源码结构
代码结构分析,整个工程的代码结构如下:
文件说明如下:
C++端方法实现
C++端方法源码是工程的 entry/src/main/cpp/add.cpp 文件。
1、 注册模块
先定义一个模块,对应结构体为 napi_module,模块定义好后,调用 NAPI 提供的模块注册函数 napi_module_register(napi_module* mod)注册到系统中;参考如下示例,nm_modname 可以根据实际情况修改。
2、 接口定义
接口定义是固定写法,在 napi_property_descriptor desc[]中,我们需要将编写的“hyPotC”方法(从左至右第三个参数)与对应暴露的接口“hyPot”接口(从左至右第一个参数)进行关联,其他参考示例默认填写即可。如下所示,其中 Add 对应的是 Native C++的接口,其应用端的接口对应为 add,NAPI 通过 napi_define_properties 接口将 napi_property_descriptor 结构体中的 2 个接口绑定在一起,并通过 exports 变量对外导出,使应用层可以调用 add 方法。
3、 接口实现
4、 接口对外配置
4.1、修改 index.d.ts 用于对外提供方法、说明(名字可以更改,点击方法可以直接链接到 index.d.ts)。
4.2、在 package.json 文件中将 index.d.ts 与 cpp 文件关联起来。
4.3、CMakeLists.txt 配置 CMake 打包参数,CMakeLists.txt 是 CMake 打包的配置文件,里面的大部分内容无需修改,project、add_library 方法中的内容可以根据实际情况修改。
ArkTS 端实现
界面整体规划效果如下图所示:
界面实现部分代码,具体请查看源码(见参考链接源码路径)。
ArkTS 调用 C++方法流程
在 ArkTS 调用 C++流程的过程中,需要使用到 Node_API、Cmake 等工具来做中间转换,整个流程如下:
(1) add.cpp 源码用来编写 C++代码,并通过 index.d.ts 文件对外提供接口。
(2) C++代码通过 Cmake 打包工具打包成动态链接库 SO 文件。
(3) arkTs 端 index.ets 源码通过引入 SO 包的方式去调用 SO 文件中的接口,最终通过 hivgor 一起打包成可执行的 xxx.hap 包。
1、导入 SO 包
在 index.ets 文件中引入编译好的 SO 包。
2、添加点击事件
Button 组件添加点击事件,调用 libadd.so 中的方法。
3、hivgor 打包
hivgor 打包将 SO 文件与 eTS 代码一起打包成 hap 包。
4、安装 hap 包
点击"
"按钮安装 hap 包运行。
总结
通过本篇介绍,我们了解了 C++代码如何与 ArkTS 实现关联,ArkTS 如何调用 SO 包中的接口等,同时也掌握了 C++代码的具体编写与打包流程。
参考链接
DevEco Studio 安装和开发环境配置
源码路径
https://gitee.com/openharmony-sig/knowledge/tree/knowledge/typical_demo/NativeApp
NAPI 课程学习路径
评论