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