笔者从事OpenHarmony的北向应用开发,关于NAPI的应用这里做一个笔记总结,包含NAPI的OpenHarmony工程的创建、cpp文件详解、如何编写NAPI函数等,都是基于笔者的开发经验和网上参考资料汇集而成,笔者也处于学习阶段,如有错误,欢迎指正。
一、NAPI的介绍
1、简介
NAPI,全称 Native API,是OpenHarmony系统中的一套原生模块拓展开发框架。基于Nodejs中的N-API开发,为开发者提供了JS与C/C++不同语言模块之间的相互访问,交互的能力,方便开发者使用C或者C++语言实现应用的关键功能。在应用中使用Native API会编译成动态库打包到应用中。
个人理解:允许开发者用C/C++去编写一些功能函数,然后通过NAPI使得可以调用这些函数去完成特定的功能,如操作开发板中某个GPIO节点的状态(OpenHarmony并没有提供直接操作GPIO口状态的API),实现JS与C/C++不同语言模块之间的相互访问,交互的能力。
2、目的优势:
(1)、OpenHarmony系统系统可以将框架层丰富的模块功能通过js接口开放给上层应用使用。
(2)、应用开发者也可以选择将一些对性能、底层系统调用有要求的核心功能用C/C++封装实现,再通过js接口使用,提高应用本身的执行效率。
二、创建含NAPI的Openharmony工程
在进行OpenHarmony应用开发时,若要调用自己编写的NAPI函数,则必须建立一个支持NAPI的OpenHarmony工程。
在DevEco Studio 3.0 Release版本中,OpenHarmony工程创建有自带了一个Native C++ hello的模板,我们只需新建该模板的一个工程即可,如下图所示。
然而在DevEco Studio 4.0 Release版本,并没有提供OpenHarmony工程的Native C++ hello的模板;Native C++ 的模板创建的是Harmony工程的模板,如下图。
下面演示如何创建一个支持NAPI的OpenHarmony工程,演示环境:
电脑:Windows11
Deveco Studio 版本:4.0.0.600
1、首先使用Native C++ 的模板创建一个Harmony的NAPI工程。
(1) Harmony的NAPI工程的目录如下
2、创建一个OpenHarmony工程,并使之支持NAPI,分三步
(1)按正常流程,创建一个OpenHarmony工程。创建好,目录如下
(2)将Harmony的NAPI工程的../main目录下的cpp文件夹整个复制,粘贴到OpenHarmony工程的../main目录下。(为OpenHarmony工程添加支持NAPI所需要的包含c/c++源码、接口导出文件以及编译文件的文件夹)
(3)将Harmony的NAPI工程目录...\entry\build-profile.json5文件中"buildOption"配置项的部分代码复制,然后粘贴到OpenHarmony工程目录...\entry\build-profile.json5文件中"buildOption"配置项的内容中去,如下图如所示。(为OpenHarmony工程添加支持NAPI的配置声明,使整个工程在编译时能够执行相应NAPI的编译链接的脚本文件CMakeLists.txt)
(4)将Harmony的NAPI工程目录...\entry\oh-package.json5文件中"dependencies"配置项的部分代码复制,然后粘贴到OpenHarmony工程目录...\entry\oh-package.json5文件中"dependencies"配置项的内容中去,如下图如所示。(为OpenHarmony工程的引入调用NAPI函数时,添加验证依赖)
补充说明:"libentry.so": "file:./src/main/cpp/types/libentry",libentry对应cpp\types文件夹中的libentry文件夹,
"libentry.so"对应...\cpp\types\libentry\oh-package.json5文件中的name配置项的值如下图。如果不进行这一步,调用NAPI的函数时,编译会有如下图的警告。
至此、OpenHarmony工程支持NAPI的配置完成。
3、验证
只需要将Harmony的NAPI工程目录...\entry\src\main\ets\pages\Index.ets文件中内容复制,然后粘贴到OpenHarmony工程目录...\entry\src\main\ets\pages\Index.ets文件中,然后签名、编译下载到开发板验证NAPI的接口是否调用成功即可
参考资料:
1、napi系列学习基础篇——如何通过DevEco Studio开发一个NAPI工程_napi构建方法-CSDN博客
2、【坚果派-坚果】Napi入门_libnapi-CSDN博客