【OpenHarmony】napi基础知识学习

基本概念

  • napi即native-API是独立于javascript底层运行时的,用于构建javascript原生插件的接口。napi和javascript底层机制隔离,当javascript主线更新时,napi不需要重新编译。
  • napi有如下属性:
    • 所有的接口调用返回一个napi_status类型的状态码,用来表明接口调用成功或者失败。
    • api的返回值通过一个出参传递。
    • 所有javascript的值被抽象成了napi_value
    • 在错误状态码方面,可以通过napi_get_last_error_info获取进一步的信息,详见错误处理部分。
  • napi是一个c语言api,为了支持c++,该项目也维护了一个c++模块叫做node-addon-apinode-addon-api实际上是封装了napi。

构建

  • 需要c/c++构建工具链(gcc,clang,msvc等)。
  • node-gyp用于构建原生插件,可以使用如下命令安装:sudo npm install -g node-gyp
  • cmakejs安装sudo npm install cmake-js,可选。

上传预编译后的二进制文件

  • 上面列出来的三个工具,允许原生插件开发者创建和发布二进制形式的插件。
  • 为了方便我们的插件传播可以使用如下工具将我们的插件上传到服务器。node-pre-gypprebuildprebuildify

参考资料

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. napi_create_int32: 用于创建一个 int32 类型的 JavaScript 数值。函数原型为:napi_status napi_create_int32(napi_env env, int32_t value, napi_value *result)。其中,env 表示当前的 napi 环境,value 表示要创建的 int32 类型的数值,result 用于存储创建的 JavaScript 数值。 2. napi_get_reference_value: 用于从一个 napi 引用中获取对应的 JavaScript 对象。函数原型为:napi_status napi_get_reference_value(napi_env env, napi_ref ref, napi_value *result)。其中,env 表示当前的 napi 环境,ref 表示要获取的引用对象,result 用于存储获取到的 JavaScript 对象。 3. napi_call_function: 用于调用一个 JavaScript 函数。函数原型为:napi_status napi_call_function(napi_env env, napi_value recv, napi_value func, size_t argc, const napi_value *argv, napi_value *result)。其中,env 表示当前的 napi 环境,recv 表示函数的接收者,func 表示要调用的 JavaScript 函数,argc 表示参数个数,argv 表示参数列表,result 用于存储函数调用的结果。 4. NAPI_CALL_BASE: 用于检查 napi 方法返回的错误码,如果出现错误则将错误信息打印到日志中。函数原型为:#define NAPI_CALL_BASE(env, call) \ do { \ napi_status status = (call); \ if (status != napi_ok) { \ const napi_extended_error_info* error_info = 0; \ napi_get_last_error_info((env), &error_info); \ const char* error_message = (error_info->error_message != NULL) ? \ error_info->error_message : "empty error message"; \ printf("NAPI_CALL_BASE failed at %s:%d status=%d, error_message=%s\n", \ __FILE__, __LINE__, status, error_message); \ } \ } while(0) 5. AsyncTask::Schedule: 用于将一个异步任务添加到事件循环中执行。函数原型为:napi_status AsyncTask::Schedule(napi_env env, AsyncTaskExecuteCallback execute, AsyncTaskCompleteCallback complete, void *data, napi_async_context *context)。其中,env 表示当前的 napi 环境,execute 表示异步任务的执行函数,complete 表示异步任务执行完成后的回调函数,data 表示异步任务的数据,context 表示异步任务的上下文。 使用注意: 1. napi_create_int32 和 napi_get_reference_value 的返回值应该被检查,以确保正确地创建和获取 JavaScript 对象。 2. 在调用 napi_call_function 之前,需要确保传入的参数正确,包括函数接收者、函数本身和参数列表。 3. 需要注意异步任务的执行时间,以免阻塞主线程。 4. 在使用 NAPI_CALL_BASE 宏时,需要注意错误信息的输出方式,可以根据需要进行修改。 5. 在使用 AsyncTask::Schedule 时,需要注意异步任务的数据,以确保异步任务可以正确地访问和修改数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值