★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤部落格園地址:為敢技術(https://www.cnblogs.com/strengthen/ )
➤GitHub地址:https://github.com/strengthen
➤原文地址:https://www.cnblogs.com/strengthen/p/18503923
➤如果連結不是為敢技術的部落格園地址,則可能是爬取作者的文章。
➤原文已修改更新!強烈建議點選原文地址閱讀!支援作者!支援原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
場景介紹
HarmonyOS Node-API是基於Node.js 8.x LTS的Node-API規範擴充套件開發的機制,為開發者提供了ArkTS/JS與C/C++模組之間的互動能力。它提供了一組穩定的、跨平臺的API,可以在不同的作業系統上使用。
本文中如無特別說明,後續均使用Node-API指代HarmonyOS Node-API能力。
HarmonyOS Node-API與Node.js 8.x LTS的Node-API規範的介面異同點,詳見Node-API參考
一般情況下HarmonyOS應用開發使用ArkTS/JS語言,但部分場景由於效能、效率等要求,比如遊戲、物理模擬等,需要依賴使用現有的C/C++庫。Node-API規範封裝了I/O、CPU密集型、OS底層等能力並對外暴露ArkTS/JS介面,從而實現ArkTS/JS和C/C++的互動。主要場景如下:
-
系統可以將框架層豐富的模組功能透過ArkTS/JS介面開放給上層應用。
-
應用開發者也可以選擇將一些對效能、底層系統呼叫有要求的核心功能用C/C++封裝實現,再透過ArkTS/JS介面使用,提高應用本身的執行效率。
Node-API的組成架構
圖1 Node-API的組成架構
-
Native Module:開發者使用Node-API開發的模組,用於在ArkTS側匯入使用。
-
Node-API:實現ArkTS與C/C++互動的邏輯。
-
ModuleManager:Native模組管理,包括載入、查詢等。
-
ScopeManager:管理napi_value的生命週期。
-
ReferenceManager:管理napi_ref的生命週期。
-
NativeEngine:ArkTS引擎抽象層,統一ArkTS引擎在Node-API層的介面行為。
-
ArkCompiler ArkTS Runtime:ArkTS執行時。
Node-API的關鍵互動流程
圖2 Node-API的關鍵互動流程
ArkTS和C++之間的互動流程,主要分為以下兩步:
-
初始化階段:當ArkTS側在import一個Native模組時,ArkTS引擎會呼叫ModuleManager載入模組對應的so及其依賴。首次載入時會觸發模組的註冊,將模組定義的方法屬性掛載到exports物件上並返回該物件。
-
呼叫階段:當ArkTS側透過上述import返回的物件呼叫方法時,ArkTS引擎會找到並呼叫對應的C/C++方法。