当前位置: 首页 > 科技观察

触觉智能RK3568体验——NAPI类对象导出及生命周期管理(上)

时间:2023-03-18 21:53:32 科技观察

更多开源信息请访问:开源基础软件社区https://ost.51cto.com开头写的:OpenHarmony中的N-API组件定义了方舟(JS/ETS)语言编写的代码与原生代码(C/C++编写)的交互方式,由Node.jsNode-实现API框架得到扩展。什么是Node.jsNode-API框架Node.jsNode-API提供了一套C/C++API供开发者开发Node.js的Native扩展模块。从Node.js8.0.0开始,Node-API作为Node.js本身的一部分作为实验性功能引入,从Node.js10.0.0开始,正式完全支持Node-API。本文以OpenHarmony3.2beta3源码中的node.js三方库为例。从third_party/node/README.OpenSource可以知道3.2beta3移植的node版本是14.19.1,所以可以参考Node.jsN-API链接获取14.19.1版本,如下:https://nodejs.org/docs/latest-v14.x/api/n-api.html。在接口名称方面,OpenHarmony中N-API组件提供的接口名称与第三方库Node.js一致。目前支持部分接口。有关详细信息,请参阅libnapi.ndk.json文件。本文是该系列第五篇文章的前半部分。无论您走到哪里,都会有示例源代码。本文提供一个IDE开发的NAPI工程,用于学习本文的知识点。下半部分将分析源代码。通过本文您将熟悉:NAPI导出类对象NAPI对象生命周期管理1、NAPI类对象导出OpenHarmonyNAPI提供了一种“包装”C++类和实例的方法,以便JS应用程序可以调用类构造函数和方法。关于在Node.jsNode-API中导出类对象的内容,参考链接:https://nodejs.org/docs/latest-v14.x/api/n-api.html#n_api_object_wrap(1)NAPI导出类objectprocess通过napi_define_class定义一个JS类。它包含C++类对应的构造函数、静态属性、方法、实例属性和方法。通过napi_wrap绑定JS对象中的C++实例。当JS代码调用构造函数时,构造函数回调会使用napi_wrap在JS对象中绑定一个新的C++实例,然后返回绑定的C++实例。通过napi_unwrap获取作为调用目标的C++实例。当JS调用C++类的方法或属性时,会调用相应的napi_callbackC++函数。对于实例回调,napi_unwrap获取作为调用目标的C++实例。这里的napi_callbackC++函数指的是Node.jsNode-API调用的C++函数。2.NAPI对象生命周期一个程序的生命周期是指程序从启动、运行到结束的整个过程。一个NAPI对象的生命周期代表了对象从创建到释放的整个过程,如下图:方舟应用启动时会加载NAPI模块,在NAPI加载过程中会创建一个对象A供应用程序使用的模块。在退出或主动释放A对象之前,A对象必须保持“活动”状态。A对象从创建到释放的整个过程也代表了A对象的生命周期。下面是对Node-API中对象生命周期的解释:调用Node-API时,可能会以napi_values的形式返回对象在底层虚拟机堆中的句柄。这些句柄必须使对象保持“活动”状态,直到本机代码不再需要它们为止。参考链接:https://nodejs.org/docs/latest-v14.x/api/n-api.html#n_api_object_lifetime_management句柄是用来标识一个对象的标识符。NAPI环境生命周期API内容参考链接如下:https://nodejs.org/docs/latest-v14.x/api/n-api.html#n_api_environment_life_cycle_apis3.关于本文提供的示例工程本文提供了一个IDE开发的NAPI项目,用于学习NAPI类对象导出和对象生命周期管理。笔者运行环境:触觉智能IDO-EVB3568-V1开发板OpenHarmony3.2Beta2DevEcoStudio3.1.0.100(1)触觉智能IDO-EVB3568-V1开发板触觉智能rk3568开发板是笔者去年8月上网购买的,4GB+32GB开发板+一块10.1寸MIPI屏+电源适配器 + usb调试器(开源鸿蒙不提供)共计739米。笔者认为是一款性价比无敌的开源鸿蒙标准系统开发板。HapticSmart已经将最新的OpenHarmony版本适配到IDO-EVB3568-V1开发板上。比如2月1日发布的Beta5,作为消费者,笔者第一时间就收到了适配IDO-EVB3568-V1的Beta5镜像包,包括MIPI版和HDMI版。购后体验非常好。购买链接如下:https://item.taobao.com/item.htm?spm=4645b.1.14.1.5c4a4a7dv1soeZ&id=658789039056&ns=1&abbucket=5#detail。(二)样例工程运行1、样例安装运行后,TactileSmartIDO-EVB3568-V1开发板显示如下:以下图片是通过OpenHarmony预设的截图功能得到的。截图文件放在以下四个文件夹:/data/service/el2/100/hmdfs/account/files/Pictures/Screenshots//storage/media/100/local/files/Pictures/Screenshots//mnt/hmdfs/100/account/device_view/local/files/Pictures/Screenshots//mnt/hmdfs/100/account/merge_view/files/Pictures/Screenshots/然后通过hdc工具导出到PC。2、点击中间的“ExportObject”后,可以在PC端DevEcoStudio工具的Log窗口中查看到相应的调试信息。Hilog窗口中也会显示系统的调试信息,信息量较大,不方便查看自己的调试信息。可以在日志窗口设置过滤信息,让窗口只显示我们过滤关键字NapiTest的信息。测试信息如下:08-0511:09:03.4131802-1802/com.example.objectwraptestIA0fefe/JsApp:[NapiTest]TestNAPI2+3=508-0511:09:03.4141802-1802/com.example.objectwraptestIA0fefe/JsApp:[NapiTest]测试NAPI添加(2,3)108-0511:09:03.4141802-1802/com.example.objectwraptestIA0fefe/JsApp:[NapiTest]测试NAPI添加(2,3))208-0511:09:03.4151802-1802/com.example.objectwraptestIA0fefe/JsApp:[NapiTest]测试NAPI添加(2,3)308-0511:09:03.4151802-1802/com.example。objectwraptestIA0fefe/JsApp:[NapiTest]测试NAPI2+3=508-0511:09:52.1231802-1802/com.example.objectwraptestIA0fefe/JsApp:[NapiTest]测试NAPI2+3=508-0511:09:52.1231802-1802/com.example.objectwraptestIA0fefe/JsApp:[NapiTest]测试NAPI添加(0,0)108-0511:09:52.1231802-1802/com.example.objectwraptestIA0fefe/JsApp:[NapiTest]测试NAPI添加(0,0)208-0511:09:52.1241802-1802/com.example.objectwraptestIA0fefe/JsApp:[NapiTest]测试NAPI添加(0,0)308-0511:09:52.1241802-1802/com.example.objectwraptestIA0fefe/JsApp:[NapiTest]TestNAPI4+5=03然后在index.ets中取消下面四行代码的注释,在Hilog窗口打印调试信息如下:08-0509:03:38.1561911-1911/com.example.objectwraptestIA0fefe/JsApp:[NapiTest]测试NAPI2+3=508-0509:03:38.1571911-1911/com.example.objectwraptestIA0fefe/JsApp:[NapiTest]TestNAPIerror{}08-0509:03:38.1571911-1911/com.example.objectwraptestIA0fefe/JsApp:[NapiTest]TestNAPIhelloNapiTest=undefinedCom.example.objectwraptest在上面的HiLog窗口打印信息就像示例项目的包名定义在示例应用程序项目AppScope\app.json5文件中。示例应用程序hap的其他属性也可以在AppScope\app.json5中定义。在entry\src\main\module.json5中的startWindowBackground字段中,可以查看应用启动时的过渡动画的颜色,但要在指向的同目录下的具体文件中设置。在示例应用项目entry\src\main\resources\base\element\string.json中,可以查看应用名称示例图标,修改entry\src\main\resources\base\media\icon.png,大小为114*114像素知识点自带OpenHarmony截图命令:#进入sdk\版本号\toolchain输入cmd打开命令行hdc_stdshellsnapshot_display#截图默认保存在/data/目录exitdc_std文件recvOpenHarmony设备端截图文件路径PC端路径文章相关附件可点击下方原文链接下载https://ost.51cto.com/resource/2513了解更多开源请访问:开源基础软件社区https://ost.51cto.com