HarmonyOS:Node-API實現跨語言互動(1)Node-API簡介

为敢技术發表於2024-10-26

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤部落格園地址:為敢技術(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++之間的互動流程,主要分為以下兩步:

  1. 初始化階段:當ArkTS側在import一個Native模組時,ArkTS引擎會呼叫ModuleManager載入模組對應的so及其依賴。首次載入時會觸發模組的註冊,將模組定義的方法屬性掛載到exports物件上並返回該物件。

  2. 呼叫階段:當ArkTS側透過上述import返回的物件呼叫方法時,ArkTS引擎會找到並呼叫對應的C/C++方法。

相關文章