0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙開發(fā)接口公共事件與通知:【FFI能力(Node-API)】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-21 16:38 ? 次閱讀

FFI能力(N-API)

ArkUI-X中支持的N-API接口情況

Node-API是封裝底層JavaScript運行時能力的一套Native接口。OpenHarmony的N-API組件對Node-API的接口進行了重新實現(xiàn),ArkUI-X同樣擁有這部分能力,目前支持部分接口,支持列表。

Node-API

簡介

Node-API是封裝底層JavaScript運行時能力的一套Native接口。

支持的能力

Node-API屏蔽了底層不同JavaScript引擎的差異,提供一套穩(wěn)定的接口。

OpenHarmony的N-API組件對Node-API的接口進行了重新實現(xiàn),ArkUI-X在此基礎(chǔ)上進行了跨平臺擴展,N-API接口可以在OpenHarmony/HarmonyOS/Android/iOS多個平臺上使用。當前支持[Node-API]標準庫中的部分接口,如下表所示。

N-API組件擴展的符號列表

開發(fā)前請熟悉鴻蒙開發(fā)指導文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]
標準庫中導出的符號列表

符號類型符號名說明
FUNCnapi_module_registernapi native模塊注冊接口。
FUNCnapi_get_last_error_info獲取napi_extended_error_info結(jié)構(gòu)體,其中包含最近一次出現(xiàn)的error信息。
FUNCnapi_throw拋出一個js value。
FUNCnapi_throw_error拋出一個帶文本信息的jsError。
FUNCnapi_throw_type_error拋出一個帶文本信息的jsTypeError
FUNCnapi_throw_range_error拋出一個帶文本信息的jsRangeError。
FUNCnapi_is_error判斷napi_value是否表示為一個error對象。
FUNCnapi_create_error創(chuàng)建并獲取一個帶文本信息的jsError。
FUNCnapi_create_type_error創(chuàng)建并獲取一個帶文本信息的jsTypeError。
FUNCnapi_create_range_error創(chuàng)建并獲取一個帶文本信息的jsRangeError
FUNCnapi_get_and_clear_last_exception獲取并清除最近一次出現(xiàn)的異常。
FUNCnapi_is_exception_pending判斷是否出現(xiàn)了異常。
FUNCnapi_fatal_error引發(fā)致命錯誤以立即終止進程。
FUNCnapi_open_handle_scope創(chuàng)建一個上下文環(huán)境使用。
FUNCnapi_close_handle_scope關(guān)閉傳入的上下文環(huán)境,關(guān)閉后,在其中聲明的全部napi_value都將被回收。
FUNCnapi_open_escapable_handle_scope創(chuàng)建出一個可逃逸的handel scope,可將范圍內(nèi)聲明的值返回到父作用域。
FUNCnapi_close_escapable_handle_scope關(guān)閉傳入的可逃逸的handel scope。
FUNCnapi_escape_handle提升傳入的js object的生命周期到其父作用域。
FUNCnapi_create_referencenapi_value創(chuàng)建一個reference,提升js對象生命周期。調(diào)用者需要自己管理reference生命周期。
FUNCnapi_delete_reference刪除傳入的reference。
FUNCnapi_reference_ref增加傳入的reference的引用計數(shù),并獲取該計數(shù)。
FUNCnapi_reference_unref減少傳入的reference的引用計數(shù),并獲取該計數(shù)。
FUNCnapi_get_reference_value獲取與reference相關(guān)聯(lián)的jsObject。
FUNCnapi_create_array創(chuàng)建并獲取一個jsArray。
FUNCnapi_create_array_with_length創(chuàng)建并獲取一個指定長度的jsArray。
FUNCnapi_create_arraybuffer創(chuàng)建并獲取一個指定大小的jsArrayBuffer。
FUNCnapi_create_external分配一個附加有外部數(shù)據(jù)的js value。
FUNCnapi_create_external_arraybuffer分配一個附加有外部數(shù)據(jù)的jsArrayBuffer。
FUNCnapi_create_object創(chuàng)建一個默認的jsObject。
FUNCnapi_create_symbol創(chuàng)建一個jsSymbol。
FUNCnapi_create_typedarray通過現(xiàn)有的ArrayBuffer創(chuàng)建一個jsTypeArray
FUNCnapi_create_dataview通過現(xiàn)有的ArrayBuffer創(chuàng)建一個jsDataView。
FUNCnapi_create_int32通過一個C的int32_t數(shù)據(jù)創(chuàng)建jsNumber
FUNCnapi_create_uint32通過一個C的uint32_t數(shù)據(jù)創(chuàng)建jsNumber。
FUNCnapi_create_int64通過一個C的int64_t數(shù)據(jù)創(chuàng)建jsNumber。
FUNCnapi_create_double通過一個C的double數(shù)據(jù)創(chuàng)建jsNumber。
FUNCnapi_create_string_latin1通過ISO-8859-1編碼的C字符串數(shù)據(jù)創(chuàng)建jsString
FUNCnapi_create_string_utf8通過UTF8編碼的C字符串數(shù)據(jù)創(chuàng)建jsString。
FUNCnapi_create_string_utf16通過UTF16編碼的C字符串數(shù)據(jù)創(chuàng)建jsString。
FUNCnapi_get_array_length獲取array的length。
FUNCnapi_get_arraybuffer_info獲取ArrayBuffer的底層data buffer及其長度。
FUNCnapi_get_prototype獲取給定jsObjectprototype。
FUNCnapi_get_typedarray_info獲取給定TypedArray的各種屬性。
FUNCnapi_get_dataview_info獲取給定DataView的各種屬性。
FUNCnapi_get_value_bool獲取給定jsBoolean對應的C bool值。
FUNCnapi_get_value_double獲取給定jsNumber對應的C double值。
FUNCnapi_get_value_external獲取先前通過napi_create_external()傳遞的外部數(shù)據(jù)指針。
FUNCnapi_get_value_int32獲取給定jsNumber對應的C int32值。
FUNCnapi_get_value_int64獲取給定jsNumber對應的C int64值。
FUNCnapi_get_value_string_latin1獲取給定js vaule對應的ISO-8859-1編碼的字符串。
FUNCnapi_get_value_string_utf8獲取給定js vaule對應的UTF8編碼的字符串。
FUNCnapi_get_value_string_utf16獲取給定js vaule對應的UTF16編碼的字符串。
FUNCnapi_get_value_uint32獲取給定jsNumber對應的C uint32值。
FUNCnapi_get_boolean根據(jù)給定的C boolean值,獲取js bool對象。
FUNCnapi_get_global獲取global對象。
FUNCnapi_get_null獲取null對象。
FUNCnapi_get_undefined獲取undefined對象。
FUNCnapi_coerce_to_bool將給定的js value強轉(zhuǎn)成jsBoolean。
FUNCnapi_coerce_to_number將給定的js value強轉(zhuǎn)成jsNumber
FUNCnapi_coerce_to_object將給定的js value強轉(zhuǎn)成jsObject。
FUNCnapi_coerce_to_string將給定的js value強轉(zhuǎn)成jsString。
FUNCnapi_typeof獲取給定js value的js type。
FUNCnapi_instanceof判斷給定object是否為給定constructor的實例。
FUNCnapi_is_array判斷給定js value是否為array。
FUNCnapi_is_arraybuffer判斷給定js value是否為ArrayBuffer
FUNCnapi_is_typedarray判斷給定js value是否表示一個TypedArray。
FUNCnapi_is_dataview判斷給定js value是否表示一個DataView。
FUNCnapi_is_date判斷給定js value是否為jsDate對象。
FUNCnapi_strict_equals判斷給定的兩個js value是否嚴格相等。
FUNCnapi_get_property_names以字符串數(shù)組的形式獲取對象的可枚舉屬性的名稱。
FUNCnapi_set_property對給定Object設(shè)置屬性。
FUNCnapi_get_property獲取給定Object的給定屬性。
FUNCnapi_has_property判斷給定對象中是否存在給定屬性。
FUNCnapi_delete_property嘗試從給定Object中刪除給定key屬性。
FUNCnapi_has_own_property判斷給定Object中是否有名為key的own property。
FUNCnapi_set_named_property對給定Object設(shè)置一個給定名稱的屬性。
FUNCnapi_get_named_property獲取給定Object中指定名稱的屬性。
FUNCnapi_has_named_property判斷給定Object中是否有給定名稱的屬性。
FUNCnapi_set_element在給定Object的指定索引處,設(shè)置元素。
FUNCnapi_get_element獲取給定Object指定索引處的元素。
FUNCnapi_has_element若給定Object的指定索引處擁有屬性,獲取該元素。
FUNCnapi_delete_element嘗試刪除給定Object的指定索引處的元素。
FUNCnapi_define_properties批量的向給定Object中定義屬性。
FUNCnapi_type_tag_object將tag指針的值與Object關(guān)聯(lián)。
FUNCnapi_check_object_type_tag判斷給定的tag指針是否被關(guān)聯(lián)到了jsObject上。
FUNCnapi_call_function在Native方法中調(diào)用js function,即native call js。
FUNCnapi_create_function創(chuàng)建native方法給js使用,以便于js call native。
FUNCnapi_get_cb_info從給定的callback info中獲取有關(guān)調(diào)用的詳細信息,如參數(shù)和this指針。
FUNCnapi_get_new_target獲取構(gòu)造函數(shù)調(diào)用的new.target
FUNCnapi_new_instance通過給定的構(gòu)造函數(shù),構(gòu)建一個實例。
FUNCnapi_define_class定義與C++類相對應的JavaScript類。
FUNCnapi_wrap在js object上綁定一個native對象實例。
FUNCnapi_unwrap從js object上獲取先前綁定的native對象實例。
FUNCnapi_remove_wrap從js object上獲取先前綁定的native對象實例,并解除綁定。
FUNCnapi_create_async_work創(chuàng)建一個異步工作對象。
FUNCnapi_delete_async_work釋放先前創(chuàng)建的異步工作對象。
FUNCnapi_queue_async_work將異步工作對象加到隊列,由底層去調(diào)度執(zhí)行。
FUNCnapi_cancel_async_work取消入隊的異步任務。
FUNCnapi_get_node_version獲取node的版本信息。
FUNCnapi_get_version獲取Node運行時支持的最高 N-API 版本。
FUNCnapi_create_promise創(chuàng)建一個延遲對象和js promise。
FUNCnapi_resolve_deferredresolve與js promise對象關(guān)聯(lián)的延遲函數(shù)。
FUNCnapi_reject_deferredreject與js promise對象關(guān)聯(lián)的延遲函數(shù)。
FUNCnapi_is_promise判斷給定js value是否為promise對象。
FUNCnapi_get_uv_event_loop獲取當前l(fā)ibuv loop實例。
FUNCnapi_create_threadsafe_function創(chuàng)建線程安全函數(shù)。
FUNCnapi_get_threadsafe_function_context獲取線程安全函數(shù)中的context。
FUNCnapi_call_threadsafe_function調(diào)用線程安全函數(shù)。
FUNCnapi_acquire_threadsafe_function指示線程安全函數(shù)可以開始使用。
FUNCnapi_release_threadsafe_function指示線程安全函數(shù)將停止使用。
FUNCnapi_ref_threadsafe_function指示在主線程上運行的事件循環(huán)在線程安全函數(shù)被銷毀之前不應退出。
FUNCnapi_unref_threadsafe_function指示在主線程上運行的事件循環(huán)可能會在線程安全函數(shù)被銷毀之前退出。
FUNCnapi_create_date通過一個C的double數(shù)據(jù)創(chuàng)建jsDate。
FUNCnapi_get_date_value獲取給定jsDate對應的C double值。
FUNCnapi_create_bigint_int64通過一個C的int64數(shù)據(jù)創(chuàng)建jsBigInt。
FUNCnapi_create_bigint_uint64通過一個C的uint64數(shù)據(jù)創(chuàng)建jsBigInt。
FUNCnapi_create_bigint_words通過一個C的uint64數(shù)組創(chuàng)建單個jsBigInt
FUNCnapi_get_value_bigint_int64獲取給定jsBigInt對應的C int64值。
FUNCnapi_get_value_bigint_uint64獲取給定jsBigInt對應的C uint64值。
FUNCnapi_get_value_bigint_words獲取給定jsBigInt對應的信息,包括符號位、64位小端序數(shù)組和數(shù)組中的元素個數(shù)。
FUNCnapi_create_buffer創(chuàng)建并獲取一個指定大小的jsBuffer。
FUNCnapi_create_buffer_copy創(chuàng)建并獲取一個指定大小的jsBuffer,并以給定數(shù)據(jù)進行初始化。
FUNCnapi_create_external_buffer創(chuàng)建并獲取一個指定大小的jsBuffer,并以給定數(shù)據(jù)進行初始化,該接口可為Buffer附帶額外數(shù)據(jù)。
FUNCnapi_get_buffer_info獲取jsBuffer底層data及其長度。
FUNCnapi_is_buffer判斷給定js value是否為Buffer對象。
FUNCnapi_object_freeze凍結(jié)給定的對象。
FUNCnapi_object_seal密封給定的對象。
FUNCnapi_get_all_property_names獲取一個數(shù)組,其中包含此對象過濾后的屬性名稱。
FUNCnapi_detach_arraybuffer分離給定ArrayBuffer的底層數(shù)據(jù)。
FUNCnapi_is_detached_arraybufferHarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿判斷給定的ArrayBuffer是否已被分離過。

搜狗高速瀏覽器截圖20240326151547.png

ArkUI-X中N-API的使用場景

在OpenHarmony中,N-API接口可以實現(xiàn)ArkTS/TS/JS與C/C++(Native)之間的交互。ArkUI-X在此基礎(chǔ)上進行了跨平臺的拓展,開發(fā)者可在OpenHarmony/HarmonyOS/Android/iOS多個平臺上使用N-API能力,完成跨語言工程開發(fā)。ArkUI-X中的N-API典型使用場景與OpenHarmony相同,即:

  1. 通過N-API封裝Native能力,暴露相應接口到ArkTS/TS/JS層,即ArkTS/TS/JS call Native。
  2. Native代碼中調(diào)用ArkTS/TS/JS提供的方法,即Native call ArkTS/TS/JS。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8257

    瀏覽量

    149956
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1461

    瀏覽量

    61490
  • javascript
    +關(guān)注

    關(guān)注

    0

    文章

    515

    瀏覽量

    53658
  • 鴻蒙
    +關(guān)注

    關(guān)注

    56

    文章

    2267

    瀏覽量

    42489
收藏 人收藏

    評論

    相關(guān)推薦

    鴻蒙開發(fā)接口公共事件與通知:【@ohos.commonEvent (公共事件模塊)】

    本模塊首批接口API version 7開始支持。后續(xù)版本的新增接口,采用上角標單獨標記接口的起始版本。
    的頭像 發(fā)表于 05-21 11:13 ?845次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>接口</b><b class='flag-5'>公共事</b>件與<b class='flag-5'>通知</b>:【@ohos.commonEvent (<b class='flag-5'>公共事</b>件模塊)】

    鴻蒙開發(fā)接口公共事件與通知:【@ohos.events.emitter (Emitter)】

    本模塊首批接口API version 7開始支持。
    的頭像 發(fā)表于 05-21 16:06 ?1152次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>接口</b><b class='flag-5'>公共事</b>件與<b class='flag-5'>通知</b>:【@ohos.events.emitter (Emitter)】

    鴻蒙開發(fā)接口公共事件與通知:【Notification模塊】

    本模塊首批接口API version 7開始支持。后續(xù)版本的新增接口,采用上角標單獨標記接口的起始版本。
    的頭像 發(fā)表于 05-21 17:04 ?1751次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>接口</b><b class='flag-5'>公共事</b>件與<b class='flag-5'>通知</b>:【Notification模塊】

    鴻蒙開發(fā)接口公共事件與通知:【@ohos.reminderAgent (后臺代理提醒)】

    開發(fā)應用時,開發(fā)者可以調(diào)用后臺提醒發(fā)布的接口創(chuàng)建定時提醒,包括倒計時、日歷、鬧鐘三種提醒類型。使用后臺代理提醒能力后,應用可以被凍結(jié)或退出,計時和彈出提醒的功能將被后臺系統(tǒng)服務代理。
    的頭像 發(fā)表于 05-25 16:27 ?530次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>接口</b><b class='flag-5'>公共事</b>件與<b class='flag-5'>通知</b>:【@ohos.reminderAgent (后臺代理提醒)】

    鴻蒙開發(fā)接口公共事件與通知:【application/EventHub (EventHub)】

    EventHub模塊提供了事件中心,提供訂閱、取消訂閱、觸發(fā)事件的能力。
    的頭像 發(fā)表于 05-25 16:31 ?577次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>接口</b><b class='flag-5'>公共事</b>件與<b class='flag-5'>通知</b>:【application/EventHub (EventHub)】

    鴻蒙開發(fā)接口公共事件與通知:【FFI能力】 N-API在Android、iOS平臺應用的使用指導

    N-API接口可以實現(xiàn)ArkTS/TS/JS與C/C++(Native)之間的交互,ArkUI-X中支持的N-API接口情況和使用場景請見[FFI
    的頭像 發(fā)表于 05-25 16:33 ?1648次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>接口</b><b class='flag-5'>公共事</b>件與<b class='flag-5'>通知</b>:【<b class='flag-5'>FFI</b><b class='flag-5'>能力</b>】 N-<b class='flag-5'>API</b>在Android、iOS平臺應用的使用指導

    鴻蒙原生應用/元服務開發(fā)-通知添加行為意圖

    WantAgent提供了封裝行為意圖的能力,這里所說的行為意圖主要是指拉起指定的應用組件及發(fā)布公共事件等能力。HarmonyOS支持以通知的形式,將WantAgent從發(fā)布方傳遞至接收
    發(fā)表于 01-05 15:07

    基于ArkTS語言的OpenHarmony APP應用開發(fā)公共事件的訂閱和發(fā)布

    /d05_CustomCommonEvent API接口:9 2、知識準備 2.1、commonEvent模塊 OpenHarmony通過CES(Common Event Service,公共事件服務)為
    發(fā)表于 09-18 13:16

    HarmonyOS應用開發(fā)-公共事件處理

    開發(fā)過程中service想要控制多個ability時,可以考慮使用公共事件處理。發(fā)布無序的公共事件: //發(fā)布公共事件 同步修改卡片與頁面public void subscribeE
    發(fā)表于 11-02 15:15

    HarmonyOS-API7相對API6差異主要變更內(nèi)容

    條件、循環(huán)渲染、懶加載渲染,支持自定義組件。JS新增5800+的API接口,覆蓋多個能力模塊:新增一系列事件通知能力接口,可實現(xiàn)普通
    發(fā)表于 02-15 14:35

    HarmonyOS/OpenHarmony應用開發(fā)-ArkTSAPI系統(tǒng)能力SystemCapability

    一、 系統(tǒng)能力API SysCap,全稱SystemCapability,即系統(tǒng)能力,指操作系統(tǒng)中每一個相對獨立的特性,如包管理、公共事件、通知
    發(fā)表于 08-10 16:39

    OpenHarmony 應用開發(fā)SDK、API 與基礎(chǔ)工具

    ArkTS 對象的能力,使用類 Node 的 N-API 接口命名。開發(fā)者使用 C/C++開發(fā)
    發(fā)表于 09-19 15:45

    鴻蒙原生應用/元服務開發(fā)-Stage模型能力接口(四)

    一、說明 AbilityStage是HAP的運行時類。AbilityStage類提供在HAP加載的時候,通知開發(fā)者,可以在此進行該HAP的初始化(如資源預加載,線程創(chuàng)建等)能力。 本模塊首批
    發(fā)表于 12-14 15:39

    觸覺智能RK3568使用體驗:NAPI 類對象導出及其生命周期管理(上)

    .js Node-API 框架擴展而來。 什么是Node.js Node-API 框架 Node.js Node-API
    的頭像 發(fā)表于 02-17 09:10 ?791次閱讀

    基于ArkTS語言的OpenHarmony APP應用開發(fā)公共事件的訂閱和發(fā)布

    1、程序介紹本示例主要展示了公共事件相關(guān)的功能,實現(xiàn)了一個檢測用戶部分行為的應用。具體而言,本案例實現(xiàn)了如下幾個公共事件功能:通過訂閱系統(tǒng)公共事件,實現(xiàn)對用戶操作行為(亮滅屏、斷聯(lián)網(wǎng))的監(jiān)測;通過
    的頭像 發(fā)表于 09-19 08:05 ?90次閱讀
    基于ArkTS語言的OpenHarmony APP應用<b class='flag-5'>開發(fā)</b>:<b class='flag-5'>公共事</b>件的訂閱和發(fā)布