![](https://s5-media.51cto.com/ost/pc/static/noavatar.gif)
#星计划# OpenHarmony NAPI技术简介 原创
作者:廖家兴
简介
NAPI(Native API)是OpenHarmony系统中的一套原生模块扩展开发框架,它基于Node.js N-API规范开发,为开发者提供了JavaScript与C/C++模块之间相互调用的交互能力。可以在NodeJs官网查看各种NAPI接口定义说明。
NAPI作用
- OpenHarmony系统可以将框架层丰富的模块功能通过js接口开放给上层应用使用
- 上层应用也可以将一些对性能有要求或者需要调用到系统侧框架的功能使用C/C++封装实现,下探到系统层以提高运行效率
NAPI在系统中的位置
NAPI在OpenHarmony中属于ArkUI框架的一部分
NAIP框架代码在 foundation\arkui\napi\ 路径下。总体上可分为interface、native_engine 和 xxxManager 三部分。
interface 目录为NAPI开发者提供了各种常用功能的API接口及宏定义。
native_engine 目录是NAPI框架的核心部分,interface目录提供的接口对应的功能都在这里实现。C++与Js之间的调用交互最终是要依托JS引擎来完成的,针对系统支持的不同JS引擎,在impl目录中也有对应的4种实现(ark, jerryscript, quickjs, v8)。
此外,还有几个Manager目录,分别负责模块注册、引用对象管理、作用域管理等专项功能。
NAPI使用
假设我们在框架测使用c/c++实现了hello模块,该模块提供了一个接口int hello(const std::string &s)
,传入一个字符串,打印该字符串。
要使用js调用到如上hello接口,需要解决如下几个问题
-
模块注册(import的模块名称hello,是怎么对应到实际的c++lib库的?) — Module Manager。
-
方法名映射(js调用的hello方法,是怎么对应到native的C/C++的方法的?) — Native Engine。
-
数据传递与转换(js传入的入参、得到的返回结果,需要转换成C/C++代码可以操作的数据类型)
c++方法具体实现:
此时需要为js提供调用,需要为该接口进行NAPI封装
编译生成假设为hello.z.so
js调用代码
以上就是简单的NAPI简介以及简单的一个NAPI应用开发模版。
更多原创内容请关注:中软国际 HarmonyOS 技术团队
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
![](https://s5-media.51cto.com/ost/pc/static/noavatar.gif)