
回复
NAPI(Native API)组件是一套对外接口基于Node.js N-API规范开发的原生模块扩展开发框架。
图 1 NAPI组件架构图
NativeEngine
JS引擎抽象层,统一JS引擎在NAPI层的接口行为。
ModuleManager
管理模块,用于模块加载、模块信息缓存。
ScopeManager
管理NativeValue的生命周期。
ReferenceManager
管理NativeReference的生命周期。
NAPI组件源代码在/foundation/ace/napi下,目录结构如下图所示:
NAPI适合封装IO、CPU密集型、OS底层等能力并对外暴露JS接口,通过NAPI可以实现JS与C/C++代码互相访问。我们可以通过NAPI接口构建例如网络通信、串口访问、多媒体解码、传感器数据收集等模块。
接口实现详见:foundation/ace/napi。
表 1 NAPI接口说明
接口分类 | 描述 |
---|---|
模块注册 | 向模块管理注册模块信息的接口。 |
异常&错误处理 | 向JS抛出异常。 |
对象生命周期管理 | 作用域管理,用于限定某个作用域范围内的NAPI对象的生命周期。 |
创建JS对象 | 创建标准的对象类型。 |
C类型转NAPI类型 | C到NAPI的类型转换。 |
NAPI类型转C类型 | NAPI到C的类型转换。 |
获取全局实例的函数 | 获取全局实例。 |
JS值的操作 | ===、typeof、instanceof等操作符的NAPI接口。 |
JS对象的属性操作 | 操作对象属性函数集。 |
JS函数的操作 | 方法调用、实例创建。 |
对象封装 | 绑定JS对象的外部上下文关系。 |
简单异步 | 创建异步任务。 |
promise | 创建promise对象的函数集。 |
脚本运行 | 运行JS代码。 |
下面以开发一个获取应用包名的JS接口为例介绍如何使用NAPI。
我们要实现的JS接口原型是:
以下是实现源码:
对应编译脚本的实现:
应用中的JS测试代码:
JS UI框架子系统
ace_ace_engine
ace_ace_engine_lite
ace_napi