FFI能力(N-API)
ArkUI-X中支持的N-API接口情況
Node-API是封裝底層JavaScript運行時能力的一套Native接口。OpenHarmony的N-API組件對Node-API的接口進行了重新實現,ArkUI-X同樣擁有這部分能力,目前支持部分接口,支持列表。
Node-API
簡介
Node-API是封裝底層JavaScript運行時能力的一套Native接口。
支持的能力
Node-API屏蔽了底層不同JavaScript引擎的差異,提供一套穩定的接口。
OpenHarmony的N-API組件對Node-API的接口進行了重新實現,ArkUI-X在此基礎上進行了跨平臺擴展,N-API接口可以在OpenHarmony/HarmonyOS/Android/iOS多個平臺上使用。當前支持[Node-API]標準庫中的部分接口,如下表所示。
N-API組件擴展的符號列表
開發前請熟悉鴻蒙開發指導文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
標準庫中導出的符號列表
符號類型 | 符號名 | 說明 |
---|---|---|
FUNC | napi_module_register | napi native模塊注冊接口。 |
FUNC | napi_get_last_error_info | 獲取napi_extended_error_info 結構體,其中包含最近一次出現的error信息。 |
FUNC | napi_throw | 拋出一個js value。 |
FUNC | napi_throw_error | 拋出一個帶文本信息的jsError 。 |
FUNC | napi_throw_type_error | 拋出一個帶文本信息的jsTypeError 。 |
FUNC | napi_throw_range_error | 拋出一個帶文本信息的jsRangeError 。 |
FUNC | napi_is_error | 判斷napi_value 是否表示為一個error對象。 |
FUNC | napi_create_error | 創建并獲取一個帶文本信息的jsError 。 |
FUNC | napi_create_type_error | 創建并獲取一個帶文本信息的jsTypeError 。 |
FUNC | napi_create_range_error | 創建并獲取一個帶文本信息的jsRangeError 。 |
FUNC | napi_get_and_clear_last_exception | 獲取并清除最近一次出現的異常。 |
FUNC | napi_is_exception_pending | 判斷是否出現了異常。 |
FUNC | napi_fatal_error | 引發致命錯誤以立即終止進程。 |
FUNC | napi_open_handle_scope | 創建一個上下文環境使用。 |
FUNC | napi_close_handle_scope | 關閉傳入的上下文環境,關閉后,在其中聲明的全部napi_value 都將被回收。 |
FUNC | napi_open_escapable_handle_scope | 創建出一個可逃逸的handel scope,可將范圍內聲明的值返回到父作用域。 |
FUNC | napi_close_escapable_handle_scope | 關閉傳入的可逃逸的handel scope。 |
FUNC | napi_escape_handle | 提升傳入的js object的生命周期到其父作用域。 |
FUNC | napi_create_reference | 為napi_value 創建一個reference,提升js對象生命周期。調用者需要自己管理reference生命周期。 |
FUNC | napi_delete_reference | 刪除傳入的reference。 |
FUNC | napi_reference_ref | 增加傳入的reference的引用計數,并獲取該計數。 |
FUNC | napi_reference_unref | 減少傳入的reference的引用計數,并獲取該計數。 |
FUNC | napi_get_reference_value | 獲取與reference相關聯的jsObject 。 |
FUNC | napi_create_array | 創建并獲取一個jsArray 。 |
FUNC | napi_create_array_with_length | 創建并獲取一個指定長度的jsArray 。 |
FUNC | napi_create_arraybuffer | 創建并獲取一個指定大小的jsArrayBuffer 。 |
FUNC | napi_create_external | 分配一個附加有外部數據的js value。 |
FUNC | napi_create_external_arraybuffer | 分配一個附加有外部數據的jsArrayBuffer 。 |
FUNC | napi_create_object | 創建一個默認的jsObject 。 |
FUNC | napi_create_symbol | 創建一個jsSymbol 。 |
FUNC | napi_create_typedarray | 通過現有的ArrayBuffer 創建一個jsTypeArray 。 |
FUNC | napi_create_dataview | 通過現有的ArrayBuffer 創建一個jsDataView 。 |
FUNC | napi_create_int32 | 通過一個C的int32_t 數據創建jsNumber 。 |
FUNC | napi_create_uint32 | 通過一個C的uint32_t 數據創建jsNumber 。 |
FUNC | napi_create_int64 | 通過一個C的int64_t 數據創建jsNumber 。 |
FUNC | napi_create_double | 通過一個C的double 數據創建jsNumber 。 |
FUNC | napi_create_string_latin1 | 通過ISO-8859-1編碼的C字符串數據創建jsString 。 |
FUNC | napi_create_string_utf8 | 通過UTF8編碼的C字符串數據創建jsString 。 |
FUNC | napi_create_string_utf16 | 通過UTF16編碼的C字符串數據創建jsString 。 |
FUNC | napi_get_array_length | 獲取array的length。 |
FUNC | napi_get_arraybuffer_info | 獲取ArrayBuffer 的底層data buffer及其長度。 |
FUNC | napi_get_prototype | 獲取給定jsObject 的prototype 。 |
FUNC | napi_get_typedarray_info | 獲取給定TypedArray 的各種屬性。 |
FUNC | napi_get_dataview_info | 獲取給定DataView 的各種屬性。 |
FUNC | napi_get_value_bool | 獲取給定jsBoolean 對應的C bool值。 |
FUNC | napi_get_value_double | 獲取給定jsNumber 對應的C double值。 |
FUNC | napi_get_value_external | 獲取先前通過napi_create_external()傳遞的外部數據指針。 |
FUNC | napi_get_value_int32 | 獲取給定jsNumber 對應的C int32值。 |
FUNC | napi_get_value_int64 | 獲取給定jsNumber 對應的C int64值。 |
FUNC | napi_get_value_string_latin1 | 獲取給定js vaule對應的ISO-8859-1編碼的字符串。 |
FUNC | napi_get_value_string_utf8 | 獲取給定js vaule對應的UTF8編碼的字符串。 |
FUNC | napi_get_value_string_utf16 | 獲取給定js vaule對應的UTF16編碼的字符串。 |
FUNC | napi_get_value_uint32 | 獲取給定jsNumber 對應的C uint32值。 |
FUNC | napi_get_boolean | 根據給定的C boolean值,獲取js bool對象。 |
FUNC | napi_get_global | 獲取global 對象。 |
FUNC | napi_get_null | 獲取null 對象。 |
FUNC | napi_get_undefined | 獲取undefined 對象。 |
FUNC | napi_coerce_to_bool | 將給定的js value強轉成jsBoolean 。 |
FUNC | napi_coerce_to_number | 將給定的js value強轉成jsNumber 。 |
FUNC | napi_coerce_to_object | 將給定的js value強轉成jsObject 。 |
FUNC | napi_coerce_to_string | 將給定的js value強轉成jsString 。 |
FUNC | napi_typeof | 獲取給定js value的js type。 |
FUNC | napi_instanceof | 判斷給定object是否為給定constructor的實例。 |
FUNC | napi_is_array | 判斷給定js value是否為array。 |
FUNC | napi_is_arraybuffer | 判斷給定js value是否為ArrayBuffer 。 |
FUNC | napi_is_typedarray | 判斷給定js value是否表示一個TypedArray 。 |
FUNC | napi_is_dataview | 判斷給定js value是否表示一個DataView 。 |
FUNC | napi_is_date | 判斷給定js value是否為jsDate 對象。 |
FUNC | napi_strict_equals | 判斷給定的兩個js value是否嚴格相等。 |
FUNC | napi_get_property_names | 以字符串數組的形式獲取對象的可枚舉屬性的名稱。 |
FUNC | napi_set_property | 對給定Object 設置屬性。 |
FUNC | napi_get_property | 獲取給定Object 的給定屬性。 |
FUNC | napi_has_property | 判斷給定對象中是否存在給定屬性。 |
FUNC | napi_delete_property | 嘗試從給定Object 中刪除給定key 屬性。 |
FUNC | napi_has_own_property | 判斷給定Object 中是否有名為key 的own property。 |
FUNC | napi_set_named_property | 對給定Object 設置一個給定名稱的屬性。 |
FUNC | napi_get_named_property | 獲取給定Object 中指定名稱的屬性。 |
FUNC | napi_has_named_property | 判斷給定Object 中是否有給定名稱的屬性。 |
FUNC | napi_set_element | 在給定Object 的指定索引處,設置元素。 |
FUNC | napi_get_element | 獲取給定Object 指定索引處的元素。 |
FUNC | napi_has_element | 若給定Object 的指定索引處擁有屬性,獲取該元素。 |
FUNC | napi_delete_element | 嘗試刪除給定Object 的指定索引處的元素。 |
FUNC | napi_define_properties | 批量的向給定Object 中定義屬性。 |
FUNC | napi_type_tag_object | 將tag指針的值與Object 關聯。 |
FUNC | napi_check_object_type_tag | 判斷給定的tag指針是否被關聯到了jsObject 上。 |
FUNC | napi_call_function | 在Native方法中調用js function,即native call js。 |
FUNC | napi_create_function | 創建native方法給js使用,以便于js call native。 |
FUNC | napi_get_cb_info | 從給定的callback info中獲取有關調用的詳細信息,如參數和this指針。 |
FUNC | napi_get_new_target | 獲取構造函數調用的new.target 。 |
FUNC | napi_new_instance | 通過給定的構造函數,構建一個實例。 |
FUNC | napi_define_class | 定義與C++類相對應的JavaScript類。 |
FUNC | napi_wrap | 在js object上綁定一個native對象實例。 |
FUNC | napi_unwrap | 從js object上獲取先前綁定的native對象實例。 |
FUNC | napi_remove_wrap | 從js object上獲取先前綁定的native對象實例,并解除綁定。 |
FUNC | napi_create_async_work | 創建一個異步工作對象。 |
FUNC | napi_delete_async_work | 釋放先前創建的異步工作對象。 |
FUNC | napi_queue_async_work | 將異步工作對象加到隊列,由底層去調度執行。 |
FUNC | napi_cancel_async_work | 取消入隊的異步任務。 |
FUNC | napi_get_node_version | 獲取node的版本信息。 |
FUNC | napi_get_version | 獲取Node運行時支持的最高 N-API 版本。 |
FUNC | napi_create_promise | 創建一個延遲對象和js promise。 |
FUNC | napi_resolve_deferred | resolve與js promise對象關聯的延遲函數。 |
FUNC | napi_reject_deferred | reject與js promise對象關聯的延遲函數。 |
FUNC | napi_is_promise | 判斷給定js value是否為promise對象。 |
FUNC | napi_get_uv_event_loop | 獲取當前libuv loop實例。 |
FUNC | napi_create_threadsafe_function | 創建線程安全函數。 |
FUNC | napi_get_threadsafe_function_context | 獲取線程安全函數中的context。 |
FUNC | napi_call_threadsafe_function | 調用線程安全函數。 |
FUNC | napi_acquire_threadsafe_function | 指示線程安全函數可以開始使用。 |
FUNC | napi_release_threadsafe_function | 指示線程安全函數將停止使用。 |
FUNC | napi_ref_threadsafe_function | 指示在主線程上運行的事件循環在線程安全函數被銷毀之前不應退出。 |
FUNC | napi_unref_threadsafe_function | 指示在主線程上運行的事件循環可能會在線程安全函數被銷毀之前退出。 |
FUNC | napi_create_date | 通過一個C的double 數據創建jsDate 。 |
FUNC | napi_get_date_value | 獲取給定jsDate 對應的C double值。 |
FUNC | napi_create_bigint_int64 | 通過一個C的int64 數據創建jsBigInt 。 |
FUNC | napi_create_bigint_uint64 | 通過一個C的uint64 數據創建jsBigInt 。 |
FUNC | napi_create_bigint_words | 通過一個C的uint64 數組創建單個jsBigInt 。 |
FUNC | napi_get_value_bigint_int64 | 獲取給定jsBigInt 對應的C int64值。 |
FUNC | napi_get_value_bigint_uint64 | 獲取給定jsBigInt 對應的C uint64值。 |
FUNC | napi_get_value_bigint_words | 獲取給定jsBigInt 對應的信息,包括符號位、64位小端序數組和數組中的元素個數。 |
FUNC | napi_create_buffer | 創建并獲取一個指定大小的jsBuffer 。 |
FUNC | napi_create_buffer_copy | 創建并獲取一個指定大小的jsBuffer ,并以給定數據進行初始化。 |
FUNC | napi_create_external_buffer | 創建并獲取一個指定大小的jsBuffer ,并以給定數據進行初始化,該接口可為Buffer 附帶額外數據。 |
FUNC | napi_get_buffer_info | 獲取jsBuffer 底層data及其長度。 |
FUNC | napi_is_buffer | 判斷給定js value是否為Buffer 對象。 |
FUNC | napi_object_freeze | 凍結給定的對象。 |
FUNC | napi_object_seal | 密封給定的對象。 |
FUNC | napi_get_all_property_names | 獲取一個數組,其中包含此對象過濾后的屬性名稱。 |
FUNC | napi_detach_arraybuffer | 分離給定ArrayBuffer 的底層數據。 |
FUNC | napi_is_detached_arraybufferHarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿 | 判斷給定的ArrayBuffer 是否已被分離過。 |
ArkUI-X中N-API的使用場景
在OpenHarmony中,N-API接口可以實現ArkTS/TS/JS與C/C++(Native)之間的交互。ArkUI-X在此基礎上進行了跨平臺的拓展,開發者可在OpenHarmony/HarmonyOS/Android/iOS多個平臺上使用N-API能力,完成跨語言工程開發。ArkUI-X中的N-API典型使用場景與OpenHarmony相同,即:
- 通過N-API封裝Native能力,暴露相應接口到ArkTS/TS/JS層,即ArkTS/TS/JS call Native。
- Native代碼中調用ArkTS/TS/JS提供的方法,即Native call ArkTS/TS/JS。
審核編輯 黃宇
-
接口
+關注
關注
33文章
8526瀏覽量
150860 -
API
+關注
關注
2文章
1487瀏覽量
61829 -
javascript
+關注
關注
0文章
516瀏覽量
53795 -
鴻蒙
+關注
關注
57文章
2321瀏覽量
42749
發布評論請先 登錄
相關推薦
評論