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