91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

鴻蒙OpenHarmony NAPI技術(shù)-基礎(chǔ)學(xué)習(xí)

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-01-19 16:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

NAPI(Native API)是OpenHarmony系統(tǒng)中的一套原生模塊擴(kuò)展開(kāi)發(fā)框架,它基于Node.js N-API規(guī)范開(kāi)發(fā),為開(kāi)發(fā)者提供了JavaScript與C/C++模塊之間相互調(diào)用的交互能力??梢栽贜odeJs官網(wǎng)查看各種NAPI接口定義說(shuō)明。

NAPI作用

  • OpenHarmony系統(tǒng)可以將框架層豐富的模塊功能通過(guò)js接口開(kāi)放給上層應(yīng)用使用
  • 上層應(yīng)用也可以將一些對(duì)性能有要求或者需要調(diào)用到系統(tǒng)側(cè)框架的功能使用C/C++封裝實(shí)現(xiàn),下探到系統(tǒng)層以提高運(yùn)行效率

NAPI在系統(tǒng)中的位置

NAPI在OpenHarmony中屬于ArkUI框架的一部分。

NAIP框架代碼在 foundationarkuinapi 路徑下??傮w上可分為interface、native_engine 和 xxxManager 三部分。

interface 目錄為NAPI開(kāi)發(fā)者提供了各種常用功能的API接口及宏定義。

native_engine 目錄是NAPI框架的核心部分,interface目錄提供的接口對(duì)應(yīng)的功能都在這里實(shí)現(xiàn)。C++與Js之間的調(diào)用交互最終是要依托JS引擎來(lái)完成的,針對(duì)系統(tǒng)支持的不同JS引擎,在impl目錄中也有對(duì)應(yīng)的4種實(shí)現(xiàn)(ark, jerryscript, quickjs, v8)。

此外,還有幾個(gè)Manager目錄,分別負(fù)責(zé)模塊注冊(cè)、引用對(duì)象管理、作用域管理等專項(xiàng)功能。

NAPI使用

假設(shè)我們?cè)诳蚣軠y(cè)使用c/c++實(shí)現(xiàn)了hello模塊,該模塊提供了一個(gè)接口int hello(const std::string &s),傳入一個(gè)字符串,打印該字符串。

要使用js調(diào)用到如上hello接口,需要解決如下幾個(gè)問(wèn)題

  1. 模塊注冊(cè)(import的模塊名稱hello,是怎么對(duì)應(yīng)到實(shí)際的c++lib庫(kù)的?) — Module Manager。
  2. 方法名映射(js調(diào)用的hello方法,是怎么對(duì)應(yīng)到native的C/C++的方法的?) — Native Engine。
  3. 數(shù)據(jù)傳遞與轉(zhuǎn)換(js傳入的入?yún)?、得到的返回結(jié)果,需要轉(zhuǎn)換成C/C++代碼可以操作的數(shù)據(jù)類型)

c++方法具體實(shí)現(xiàn):

// hello.h

#ifndef HELLO_H
#define HELLO_H

#include < string >
namespace OHOS {
namespace hello {

int hello(const std::string &s);

} // namespace add
} // namespace OHOS

#endif // HELLO_H
// hello.cpp

#include < iostream >
#include "hello.h"

namespace OHOS {
namespace hello {

int hello(const std::string &s);
{
    std::cout < < s < < endl;
    return 0;
}

} // namespace add
} // namespace OHOS

此時(shí)需要為js提供調(diào)用,需要為該接口進(jìn)行NAPI封裝

// helloNapi.cpp

#include "napi/native_api.h"
#include "hello.h"

static napi_value Hello(napi_env env, napi_callback_info info)
{
    // 根據(jù)環(huán)境變量獲取參數(shù)

    // js參數(shù)個(gè)數(shù)
    size_t argc = 1;
    // 參數(shù)定義
    napi_value argv[1] = { 0 };
    // 入?yún)⒆兞揩@取
    napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
    // 獲取入?yún)⒌念愋?/span>
    napi_valuetype valueType = napi_undefined;
    napi_typeof(env, argv[0], &valueType);
    // js類型的入?yún)⒅缔D(zhuǎn)換為C/C++可以操作的數(shù)據(jù)類型
    char value[VALUE_BUFFER_SIZE] = { 0 };
    size_t valueLen = 0;
    napi_get_value_string_utf8(env, argv[0], value, VALUE_BUFFER_SIZE, &valueLen);
    std::string s = value;

    // 調(diào)用hello接口
    int ret = hello(s);

    // C/C++數(shù)據(jù)類型轉(zhuǎn)換為JS數(shù)據(jù)類型并返回給應(yīng)用層
    // JS字符串對(duì)象
    napi_value result = nullptr;
    retult = napi_create_int32(env, ret, &result);

    //返回JS對(duì)象
    return result;
}

// 方法名映射
EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
    napi_property_descriptor desc[] = {
        { "hello", nullptr, Hello, nullptr, nullptr, nullptr, napi_default, nullptr }
    };
    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
    return exports;
}
EXTERN_C_END


// nm_modname為提供給應(yīng)用側(cè)調(diào)用的模塊名稱
static napi_module helloModule = {
    .nm_version =1,
    .nm_flags = 0,
    .nm_filename = nullptr,
    .nm_register_func = Init,
    .nm_modname = "hello",
    .nm_priv = ((void*)0),
    .reserved = { 0 },
};

// 注冊(cè)模塊
extern "C" __attribute__((constructor)) void RegisterNative_helloModule(void)
{
    napi_module_register(&helloModule);
}

編譯生成假設(shè)為hello.z.so

js調(diào)用代碼

// hello.ets

// 引入hello napi模塊
import testNapi from '@ohos.hello'

// 調(diào)用js接口 hello
testNapi.hello("hello world")

以上就是簡(jiǎn)單的NAPI簡(jiǎn)介以及簡(jiǎn)單的一個(gè)NAPI應(yīng)用開(kāi)發(fā)模版。更多鴻蒙開(kāi)發(fā)內(nèi)容,前往主頁(yè):

審核編輯 黃宇

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

    關(guān)注

    60

    文章

    2963

    瀏覽量

    45908
  • OpenHarmony
    +關(guān)注

    關(guān)注

    33

    文章

    3952

    瀏覽量

    21107
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    融合AI的OpenHarmony應(yīng)用軟件開(kāi)發(fā):ai學(xué)習(xí)自律輔助軟件

    *附件:ai study.zip*附件:融合AI的OpenHarmony應(yīng)用軟件開(kāi)發(fā):ai學(xué)習(xí)自律輔助軟件.pdf 基于開(kāi)源鴻蒙編寫(xiě)的ai輔助學(xué)習(xí)軟件
    發(fā)表于 11-12 15:38

    觸覺(jué)智能Purple Pi OH開(kāi)發(fā)板率先適配OpenHarmony6.0 Release,鴻蒙明星開(kāi)發(fā)板

    2025年9月19日,在官網(wǎng)上線開(kāi)源鴻蒙OpenHarmony6.0Release僅13天,觸覺(jué)智能宣布旗下PurplePiOH開(kāi)發(fā)板成功完成OpenHarmony6.0Release系統(tǒng)適配。這一
    的頭像 發(fā)表于 10-29 08:00 ?826次閱讀
    觸覺(jué)智能Purple Pi OH開(kāi)發(fā)板率先適配<b class='flag-5'>OpenHarmony</b>6.0 Release,<b class='flag-5'>鴻蒙</b>明星開(kāi)發(fā)板

    【置頂公告】視美泰開(kāi)源鴻蒙系列產(chǎn)品業(yè)務(wù)咨詢與商務(wù)合作通道正式開(kāi)啟!

    設(shè)計(jì)。 生態(tài)解決方案整合智慧政務(wù)、智慧醫(yī)療、智慧園區(qū)、智慧教育、智慧安平、工業(yè)物聯(lián)網(wǎng)等領(lǐng)域鴻蒙化系統(tǒng)集成與場(chǎng)景落地。 技術(shù)授權(quán)與聯(lián)合創(chuàng)新OpenHarmony生態(tài)兼容性認(rèn)證、技術(shù)培訓(xùn)及
    發(fā)表于 10-20 16:23

    開(kāi)源鴻蒙6.0 Release版本重磅發(fā)布

    近日,在長(zhǎng)沙國(guó)際會(huì)議中心舉辦的開(kāi)源鴻蒙技術(shù)大會(huì)2025上,開(kāi)放原子開(kāi)源鴻蒙(即OpenAtom OpenHarmony,簡(jiǎn)稱“開(kāi)源鴻蒙”)項(xiàng)
    的頭像 發(fā)表于 10-10 16:49 ?2878次閱讀

    觸覺(jué)智能RK3576開(kāi)發(fā)板OpenHarmony開(kāi)源鴻蒙系統(tǒng)USB控制傳輸功能示例

    本文介紹OpenHarmony開(kāi)源鴻蒙系統(tǒng)的USB控制傳輸功能實(shí)現(xiàn)及相關(guān)代碼示例,基于觸覺(jué)智能RK3576開(kāi)發(fā)板PurplePiOH2演示。OpenHarmony的USB通信介紹實(shí)現(xiàn)
    的頭像 發(fā)表于 09-30 16:31 ?1575次閱讀
    觸覺(jué)智能RK3576開(kāi)發(fā)板<b class='flag-5'>OpenHarmony</b>開(kāi)源<b class='flag-5'>鴻蒙</b>系統(tǒng)USB控制傳輸功能示例

    視美泰受邀出席2025鴻蒙生態(tài)大會(huì),共繪OpenHarmony商業(yè)顯示新圖景

    OpenHarmony)的創(chuàng)新解決方案驚艷亮相,以技術(shù)深度與落地實(shí)力引發(fā)行業(yè)關(guān)注。更有視美泰國(guó)產(chǎn)化事業(yè)部總經(jīng)理柏威先生發(fā)表主題演講,揭秘企業(yè)在開(kāi)源鴻蒙領(lǐng)域的戰(zhàn)略布局與技術(shù)突破。
    的頭像 發(fā)表于 09-01 16:02 ?5400次閱讀
    視美泰受邀出席2025<b class='flag-5'>鴻蒙</b>生態(tài)大會(huì),共繪<b class='flag-5'>OpenHarmony</b>商業(yè)顯示新圖景

    開(kāi)鴻開(kāi)發(fā)板深度體驗(yàn):從開(kāi)源鴻蒙開(kāi)發(fā)到AI場(chǎng)景實(shí)踐

    開(kāi)鴻開(kāi)發(fā)板KaihongBoard-3588S-SBCKaihongBoard-3576-SBC體驗(yàn)開(kāi)源鴻蒙能力學(xué)習(xí)開(kāi)源鴻蒙開(kāi)發(fā)●●●搭載KaihongOS
    的頭像 發(fā)表于 07-03 17:03 ?1620次閱讀
    開(kāi)鴻開(kāi)發(fā)板深度體驗(yàn):從開(kāi)源<b class='flag-5'>鴻蒙</b>開(kāi)發(fā)到AI場(chǎng)景實(shí)踐

    四川大學(xué)OpenHarmony技術(shù)俱樂(lè)部正式揭牌成立

    成立大會(huì)暨鴻蒙公開(kāi)課”在四川大學(xué)望江校區(qū)成功舉辦。 嘉賓合影 四川大學(xué)副校長(zhǎng)游勁松出席大會(huì)并致辭。他表示,四川大學(xué)始終關(guān)注科技發(fā)展的前沿動(dòng)態(tài),并積極投身相關(guān)領(lǐng)域的研究與探索。此次四川大學(xué)OpenHarmony技術(shù)俱樂(lè)部的成立標(biāo)志
    的頭像 發(fā)表于 06-16 16:20 ?1512次閱讀
    四川大學(xué)<b class='flag-5'>OpenHarmony</b><b class='flag-5'>技術(shù)</b>俱樂(lè)部正式揭牌成立

    開(kāi)源鴻蒙開(kāi)發(fā)必備!OpenHarmony替換Full SDK全攻略

    本文介紹開(kāi)源鴻蒙OpenHarmony替換FullSDK的方法,演示設(shè)備為觸覺(jué)智能PurplePiOH鴻蒙開(kāi)發(fā)板獲取FullSD
    的頭像 發(fā)表于 06-06 18:11 ?853次閱讀
    開(kāi)源<b class='flag-5'>鴻蒙</b>開(kāi)發(fā)必備!<b class='flag-5'>OpenHarmony</b>替換Full SDK全攻略

    觸覺(jué)智能鴻蒙開(kāi)發(fā)板率先通過(guò)OpenHarmony5.0認(rèn)證(生態(tài)產(chǎn)品兼容性證書(shū))

    觸覺(jué)智能PurplePiOH鴻蒙開(kāi)發(fā)板繼4.1版本XTS認(rèn)證火速出圈后,再次狂飆!成功通過(guò)OpenHarmony5.0ReleaseXTS認(rèn)證,成為首批開(kāi)放原子基金會(huì)生態(tài)產(chǎn)品之一。這一認(rèn)證標(biāo)志著其在
    的頭像 發(fā)表于 06-06 17:54 ?1272次閱讀
    觸覺(jué)智能<b class='flag-5'>鴻蒙</b>開(kāi)發(fā)板率先通過(guò)<b class='flag-5'>OpenHarmony</b>5.0認(rèn)證(生態(tài)產(chǎn)品兼容性證書(shū))

    全志科技亮相OpenHarmony開(kāi)發(fā)者大會(huì)2025

    近日,OpenHarmony開(kāi)發(fā)者大會(huì) 2025(OHDC.2025,以下簡(jiǎn)稱“大會(huì)”)在深圳舉辦。大會(huì)正式發(fā)布了開(kāi)源鴻蒙5.1 Release版本,舉行了“開(kāi)源鴻蒙應(yīng)用技術(shù)組件共建啟
    的頭像 發(fā)表于 06-04 09:16 ?2208次閱讀
    全志科技亮相<b class='flag-5'>OpenHarmony</b>開(kāi)發(fā)者大會(huì)2025

    利爾達(dá)RedCap模組通過(guò)OpenHarmony 生態(tài)兼容性測(cè)評(píng)!

    。此次認(rèn)證標(biāo)志著該NR90模組在鴻蒙系統(tǒng)中的技術(shù)適配能力獲得官方認(rèn)可,為工業(yè)物聯(lián)網(wǎng)、智能終端等設(shè)備快速融入鴻蒙生態(tài)提供了關(guān)鍵支持。本次認(rèn)證由OpenHarmony兼容
    的頭像 發(fā)表于 05-23 17:59 ?1624次閱讀
    利爾達(dá)RedCap模組通過(guò)<b class='flag-5'>OpenHarmony</b> 生態(tài)兼容性測(cè)評(píng)!

    DialogHub上線OpenHarmony開(kāi)源社區(qū),高效開(kāi)發(fā)鴻蒙應(yīng)用彈窗

    “Gitee官網(wǎng)”,首頁(yè)搜索“DialogHub”,快速下載集成,并參與代碼貢獻(xiàn)與問(wèn)題反饋。共同提升鴻蒙應(yīng)用的性能與體驗(yàn)。 未來(lái)華為也將持續(xù)攜手生態(tài)伙伴共建創(chuàng)新,面向底座技術(shù)、通用能力、垂類行業(yè)等場(chǎng)景推出系列
    發(fā)表于 04-03 17:30

    鴻蒙北向開(kāi)發(fā)OpenHarmony5.0 DevEco Studio開(kāi)發(fā)工具安裝與配置

    本文介紹OpenHarmony5.0 DevEco Studio開(kāi)發(fā)工具安裝與配置,鴻蒙北向開(kāi)發(fā)入門(mén)必備!由觸覺(jué)智能Purple Pi OH鴻蒙開(kāi)發(fā)板演示。搭載了瑞芯微RK3566四核處理器,支持開(kāi)源
    的頭像 發(fā)表于 03-28 18:05 ?1633次閱讀
    <b class='flag-5'>鴻蒙</b>北向開(kāi)發(fā)<b class='flag-5'>OpenHarmony</b>5.0 DevEco Studio開(kāi)發(fā)工具安裝與配置

    【北京迅為】iTOP-RK3568開(kāi)發(fā)板鴻蒙OpenHarmony系統(tǒng)南向驅(qū)動(dòng)開(kāi)發(fā)實(shí)操-HDF驅(qū)動(dòng)配置UART

    【北京迅為】iTOP-RK3568開(kāi)發(fā)板鴻蒙OpenHarmony系統(tǒng)南向驅(qū)動(dòng)開(kāi)發(fā)實(shí)操-HDF驅(qū)動(dòng)配置UART
    的頭像 發(fā)表于 03-25 11:02 ?1733次閱讀
    【北京迅為】iTOP-RK3568開(kāi)發(fā)板<b class='flag-5'>鴻蒙</b><b class='flag-5'>OpenHarmony</b>系統(tǒng)南向驅(qū)動(dòng)開(kāi)發(fā)實(shí)操-HDF驅(qū)動(dòng)配置UART