寫在開頭:
OpenHarmony 中的 N-API組件定義了由ArkTS (JS/ETS)語言編寫的代碼和 native 代碼(使用 C/C++ 編寫)交互的方式,由 Node.js Node-API 框架擴(kuò)展而來。
什么是Node.js Node-API 框架
Node.js Node-API為開發(fā)者提供了一套C/C++ API用于開發(fā)Node.js的Native擴(kuò)展模塊。從Node.js 8.0.0開始,Node-API以實(shí)驗(yàn)性特性作為Node.js本身的一部分被引入,并且從Node.js 10.0.0開始正式全面支持Node-API。
本文以O(shè)penHarmony 3.2beta3源碼中的node.js三方庫為例,從third_party/node/README.OpenSource中可得知3.2beta3移植的node版本為14.19.1,因此可參考的Node.js N-API鏈接為14.19.1版本,如下:https://nodejs.org/docs/latest-v14.x/api/n-api.html
-
接口名方面,OpenHarmony 中的 N-API 組件提供的接口名與三方庫Node.js一致,目前支持部分接口,詳情見libnapi.ndk.json文件。
本篇是該系列文章的第5篇上半部分。有離北況歸的地方就一定會(huì)有樣例源碼,本文提供了一個(gè)IDE開發(fā)的NAPI工程用來學(xué)習(xí)本篇知識(shí)點(diǎn),下半部分將對(duì)源碼進(jìn)行解析。通過本文您將熟悉:
-
NAPI 導(dǎo)出類對(duì)象
-
NAPI 對(duì)象生命周期管理
1.NAPI 類對(duì)象導(dǎo)出
-
OpenHarmony NAPI提供了一種“包裝”C ++類和實(shí)例的方法,以便JS應(yīng)用可以調(diào)用類的構(gòu)造函數(shù)和方法。
-
Node.js Node-API中關(guān)于導(dǎo)出
類對(duì)象
的內(nèi)容,參考鏈接 : https://nodejs.org/docs/latest-v14.x/api/n-api.html#n_api_object_wrap
1.1. NAPI導(dǎo)出類對(duì)象流程
-
通過
napi_define_class
定義一個(gè)JS類-
它包含了與 C++ 類對(duì)應(yīng)的構(gòu)造函數(shù)、靜態(tài)屬性、方法、實(shí)例屬性和方法。
-
-
通過
napi_wrap
將 C++ 實(shí)例綁定在 JS對(duì)象中-
當(dāng) JS代碼調(diào)用構(gòu)造函數(shù)時(shí),構(gòu)造函數(shù)回調(diào)會(huì)使用napi_wrap將一個(gè)新的 C++ 實(shí)例綁定在 JS對(duì)象中,然后返回綁定的C++ 實(shí)例。
-
-
通過
napi_unwrap
獲取作為調(diào)用目標(biāo)的C++ 實(shí)例-
當(dāng) JS調(diào)用C++ 類 的方法或?qū)傩詴r(shí),會(huì)調(diào)用相應(yīng)的napi_callback C++ 函數(shù)。對(duì)于實(shí)例回調(diào),
napi_unwrap
獲取作為調(diào)用目標(biāo)的 C++ 實(shí)例 。
-
這里的napi_callback C++ 函數(shù)是指被 Node.js Node-API調(diào)用的C++ 函數(shù)
2. NAPI 對(duì)象生命周期
以下是Node-API 中關(guān)于對(duì)象生命周期的解釋:
-
程序的生命周期是指程序從啟動(dòng),運(yùn)行到結(jié)束的整個(gè)過程。
-
NAPI 對(duì)象的生命周期代表著從對(duì)象創(chuàng)建到釋放的整個(gè)過程,如下圖所示:
-
在ArkTS應(yīng)用啟動(dòng)時(shí)會(huì)加載NAPI模塊,而在NAPI模塊加載過程中會(huì)創(chuàng)建一個(gè)對(duì)象A提供給應(yīng)用使用,在應(yīng)用退出或者主動(dòng)釋放A對(duì)象前,A對(duì)象必須一直保持"活躍"狀態(tài)。從A對(duì)象創(chuàng)建到釋放的整個(gè)過程也代表著A對(duì)象的生命周期。
-
當(dāng)調(diào)用Node-API時(shí),底層虛擬機(jī)在堆中對(duì)象的句柄可能以napi_values的形式返回。這些句柄必須保持對(duì)象“活動(dòng)”,直到本地代碼不再需要它們。參考鏈接//nodejs.org/docs/latest-v14.x/api/n-api.html#n_api_object_lifetime_management
-
句柄是一個(gè)標(biāo)識(shí)符,是用來標(biāo)識(shí)對(duì)象的。
NAPI 環(huán)境生命周期API的內(nèi)容參考鏈接如下:https://nodejs.org/docs/latest-v14.x/api/n-api.html#n_api_environment_life_cycle_apis
3. 關(guān)于本文提供的樣例工程
本文提供了一個(gè)IDE開發(fā)的NAPI工程用來學(xué)習(xí)NAPI 類對(duì)象導(dǎo)出
和對(duì)象生命周期管理
。
-
筆者運(yùn)行環(huán)境:
-
觸覺智能 IDO-EVB3568-V1 開發(fā)板
-
OpenHarmony 3.2Beta2
-
DevEco Studio 3.1.0.100
-
3.1 觸覺智能 IDO-EVB3568-V1 開發(fā)板
觸覺智能的這個(gè)rk3568開發(fā)板是筆者去年8月份網(wǎng)上沖浪購買的,4GB+32GB開發(fā)板 + 一塊10.1英寸的MIPI屏幕 + 電源適配器+usb調(diào)試器(搞開源鴻蒙用不上) 一共 739米 。筆者認(rèn)為是性價(jià)比無敵的開源鴻蒙標(biāo)準(zhǔn)系統(tǒng)開發(fā)板。
觸覺智能一直在給 IDO-EVB3568-V1 開發(fā)板適配最新的OpenHarmony版本。例如2月1號(hào)發(fā)布Beta5,作為消費(fèi)者的筆者立馬收到了適配了IDO-EVB3568-V1的Beta5鏡像包,有MIPI版本的和HDMI版本。購買后的體驗(yàn)是非常不錯(cuò)的。
3.2. 樣例工程運(yùn)行
1、樣例安裝運(yùn)行后,觸覺智能 IDO-EVB3568-V1開發(fā)板顯示如下
以下圖片通過OpenHarmony預(yù)置的屏幕截圖功能獲取。截圖文件放在下面這四個(gè)文件夾下
/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工具導(dǎo)出到PC端。
2、再點(diǎn)擊中間的"導(dǎo)出對(duì)象"后,PC端DevEco Studio工具的Log窗口查看到對(duì)應(yīng)的調(diào)試信息。
系統(tǒng)的調(diào)試信息也在Hilog窗口顯示,且信息量大,不方便查看自己的調(diào)試信息,可以在log窗口設(shè)置過濾信息,讓窗口只顯示我們過濾關(guān)鍵字NapiTest
的信息。
(左右移動(dòng)查看全部內(nèi)容)
調(diào)試信息如下:
08-05 11:09:03.413 1802-1802/com.example.objectwraptest I A0fefe/JsApp: [NapiTest] Test NAPI 2 + 3 = 5
08-05 11:09:03.414 1802-1802/com.example.objectwraptest I A0fefe/JsApp: [NapiTest] Test NAPI add(2, 3) 1
08-05 1103.414 1802-1802/com.example.objectwraptest I A0fefe/JsApp: [NapiTest] Test NAPI add(2, 3) 2
08-05 1103.415 1802-1802/com.example.objectwraptest I A0fefe/JsApp: [NapiTest] Test NAPI add(2, 3) 3
08-05 1103.415 1802-1802/com.example.objectwraptest I A0fefe/JsApp: [NapiTest]Test NAPI 2+3 = 5
08-05 11:09:52.123 1802-1802/com.example.objectwraptest I A0fefe/JsApp: [NapiTest] Test NAPI 2 + 3 = 5
08-05 11:09:52.123 1802-1802/com.example.objectwraptest I A0fefe/JsApp: [NapiTest] Test NAPI add(0, 0) 1
08-05 1152.123 1802-1802/com.example.objectwraptest I A0fefe/JsApp: [NapiTest] Test NAPI add(0, 0) 2
08-05 1152.124 1802-1802/com.example.objectwraptest I A0fefe/JsApp: [NapiTest] Test NAPI add(0, 0) 3
08-05 1152.124 1802-1802/com.example.objectwraptest I A0fefe/JsApp: [NapiTest]Test NAPI 4+5 = 0
3、再在index.ets中取消下面這四行代碼的注釋。
Hilog窗口打印調(diào)試信息如下:
08-05 09:03:38.156 1911-1911/com.example.objectwraptest I A0fefe/JsApp: [NapiTest] Test NAPI 2 + 3 = 5
08-05 09:03:38.157 1911-1911/com.example.objectwraptest I A0fefe/JsApp: [NapiTest]Test NAPI error{}
08-05 09:03:38.157 1911-1911/com.example.objectwraptest I A0fefe/JsApp: [NapiTest]Test NAPI hello NapiTest = undefined
(左右移動(dòng)查看全部內(nèi)容)
以上HiLog窗口打印信息中的com.example.objectwraptest是樣例工程的包名,在樣例應(yīng)用工程AppScopeapp.json5文件中定義。AppScopeapp.json5中還可以定義樣例應(yīng)用hap的其他屬性。
entrysrcmainmodule.json5中startWindowBackground字段可以查看應(yīng)用開啟時(shí)過渡動(dòng)畫的顏色,但是在指向的同級(jí)目錄下具體的文件中設(shè)置
知識(shí)點(diǎn)附送
OpenHarmony截屏命令:
# 進(jìn)入sdk版本號(hào) oolchain輸入cmd打開命令行
hdc_std shell
snapshot_display
# 截圖默認(rèn)保存在/data/目錄下
exit
hdc_std file recv OpenHarmony設(shè)備端截圖文件路徑 PC端路徑
(左右移動(dòng)查看全部內(nèi)容)
更多熱點(diǎn)文章閱讀
- 重磅官宣,OpenHarmony技術(shù)峰會(huì)來啦
- 基于小凌派RK2206的智能垃圾桶設(shè)計(jì)
- 開源硬件系列05期:HDLgen—IC設(shè)計(jì)自動(dòng)化利器
- ArkUI新能力,助力應(yīng)用開發(fā)更便捷
-
30張開放原子開源基金會(huì)OpenHarmony技術(shù)峰會(huì)門票免費(fèi)送!
提示:本文由電子發(fā)燒友論壇發(fā)布,轉(zhuǎn)載請(qǐng)注明來源。如需社區(qū)合作及入群交流,請(qǐng)?zhí)砑游⑿臙EFans0806,或者發(fā)郵箱liuyong@huaqiu.com。
原文標(biāo)題:觸覺智能RK3568使用體驗(yàn):NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)
文章出處:【微信公眾號(hào):電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
電子發(fā)燒友
+關(guān)注
關(guān)注
33文章
563瀏覽量
33440 -
開源社區(qū)
+關(guān)注
關(guān)注
0文章
95瀏覽量
601
原文標(biāo)題:觸覺智能RK3568使用體驗(yàn):NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)
文章出處:【微信號(hào):HarmonyOS_Community,微信公眾號(hào):電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Linux修改uboot啟動(dòng)延時(shí)方法詳細(xì)攻略,觸覺智能RK3568開發(fā)板演示

Ubuntu系統(tǒng)安裝Docker詳細(xì)攻略,觸覺智能RK3568開發(fā)板演示

ServiceAbility的生命周期介紹
Linux系統(tǒng)更換開機(jī)logo方法教程,觸覺智能RK3562開發(fā)板演示

RK3568的顯示問題及其解決方法
RK3568內(nèi)置MCU開發(fā)介紹之一

Android11修改攝像頭前后置方法,觸覺智能RK3568開發(fā)板演示

什么是PLM產(chǎn)品生命周期管理系統(tǒng)?

OpenHarmony4.1藍(lán)牙芯片如何適配?觸覺智能RK3568主板SBC3568演示

瑞芯微RK3568開發(fā)板Linux編譯報(bào)錯(cuò)404怎么辦?觸覺智能教你輕松解決

瑞芯微RK3568鴻蒙開發(fā)板OpenHarmony系統(tǒng)修改cfg文件權(quán)限方法

評(píng)論