女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

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

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-01-19 16:57 ? 次閱讀

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

NAPI作用

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

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

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

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

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

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

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

NAPI使用

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

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

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

c++方法具體實現(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

此時需要為js提供調(diào)用,需要為該接口進行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ù)個數(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字符串對象
    napi_value result = nullptr;
    retult = napi_create_int32(env, ret, &result);

    //返回JS對象
    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 },
};

// 注冊模塊
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")

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

審核編輯 黃宇

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

    關(guān)注

    59

    文章

    2535

    瀏覽量

    43805
  • OpenHarmony
    +關(guān)注

    關(guān)注

    28

    文章

    3836

    瀏覽量

    18211
收藏 人收藏

    評論

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

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

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

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

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

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

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

    【北京迅為】itop-3568 開發(fā)板openharmony鴻蒙燒寫及測試-第2章OpenHarmony v3.2-Beta4版本測試

    【北京迅為】itop-3568 開發(fā)板openharmony鴻蒙燒寫及測試-第2章OpenHarmony v3.2-Beta4版本測試
    的頭像 發(fā)表于 03-05 10:53 ?377次閱讀
    【北京迅為】itop-3568 開發(fā)板<b class='flag-5'>openharmony</b><b class='flag-5'>鴻蒙</b>燒寫及測試-第2章<b class='flag-5'>OpenHarmony</b> v3.2-Beta4版本測試

    【北京迅為】itop-3568 開發(fā)板openharmony鴻蒙燒寫及測試-第1章 體驗OpenHarmony—燒寫鏡像

    【北京迅為】itop-3568 開發(fā)板openharmony鴻蒙燒寫及測試-第1章 體驗OpenHarmony—燒寫鏡像
    的頭像 發(fā)表于 03-04 16:31 ?476次閱讀
    【北京迅為】itop-3568 開發(fā)板<b class='flag-5'>openharmony</b><b class='flag-5'>鴻蒙</b>燒寫及測試-第1章 體驗<b class='flag-5'>OpenHarmony</b>—燒寫鏡像

    鴻蒙北向開發(fā)OpenHarmony4.1 DevEco Studio開發(fā)工具安裝與配置

    OpenHarmony4.1 DevEco Studio開發(fā)工具安裝與配置,鴻蒙北向開發(fā)入門必備!
    的頭像 發(fā)表于 02-07 17:35 ?654次閱讀
    <b class='flag-5'>鴻蒙</b>北向開發(fā)<b class='flag-5'>OpenHarmony</b>4.1 DevEco Studio開發(fā)工具安裝與配置

    AKI跨語言調(diào)用庫神助攻C/C++代碼遷移至HarmonyOS NEXT

    ,真正做到所“鍵”即所得。 這一創(chuàng)新框架的出現(xiàn),正是為了解決開發(fā)者在遷移C/C++項目到HarmonyOS NEXT時面臨的核心痛點。傳統(tǒng)的NAPI接口調(diào)用復(fù)雜,學(xué)習(xí)成本高,開發(fā)者需要耗費大量精力進行適配
    發(fā)表于 01-02 17:08

    OpenHarmony源碼編譯后燒錄鏡像教程,RK3566鴻蒙開發(fā)板演示

    本文介紹瑞芯微主板/開發(fā)板編譯OpenHarmony源碼后燒錄鏡像的教程,觸覺智能Purple Pi OH鴻蒙開發(fā)板演示。搭載了瑞芯微RK3566四核處理器,樹莓派卡片電腦設(shè)計,支持開源鴻蒙O
    的頭像 發(fā)表于 12-30 10:08 ?688次閱讀
    <b class='flag-5'>OpenHarmony</b>源碼編譯后燒錄鏡像教程,RK3566<b class='flag-5'>鴻蒙</b>開發(fā)板演示

    2024 OpenHarmony年度技術(shù)分享會來啦,預(yù)約直播有好禮~

    聯(lián)合開源鴻蒙技術(shù)專家、老師、開發(fā)者為大家?guī)?b class='flag-5'>OpenHarmony的最新技術(shù)進展、開發(fā)心得以及應(yīng)用實踐,共同推動OpenHarmony生態(tài)的
    發(fā)表于 12-25 09:10

    OpenHarmony怎么修改DPI密度值?觸覺智能RK3566鴻蒙開發(fā)板演示

    開源鴻蒙OpenHarmony系統(tǒng)下,修改DPI密度值的方法,觸覺智能Purple Pi OH鴻蒙開發(fā)板演示,搭載了瑞芯微RK3566四核處理器,Laval鴻蒙社區(qū)推薦開發(fā)板,已適配全
    的頭像 發(fā)表于 12-24 11:46 ?627次閱讀
    <b class='flag-5'>OpenHarmony</b>怎么修改DPI密度值?觸覺智能RK3566<b class='flag-5'>鴻蒙</b>開發(fā)板演示

    鴻蒙原生開源庫ViewPool在OpenHarmony社區(qū)正式上線

    近日,由伙伴參與共建的鴻蒙原生開源庫“ViewPool”在OpenHarmony社區(qū)正式上線。這個開發(fā)庫是基于OpenHarmony技術(shù)孵化的成果,充分發(fā)揮了平臺的
    的頭像 發(fā)表于 12-20 14:44 ?570次閱讀

    OpenHarmony屬性信息怎么修改?觸覺智能RK3566鴻蒙開發(fā)板來演示

    本文介紹開源鴻蒙OpenHarmony系統(tǒng)下,修改產(chǎn)品屬性信息的方法,觸覺智能Purple Pi OH鴻蒙開發(fā)板演示,已適配全新OpenHarmony5.0 Release系統(tǒng)!
    的頭像 發(fā)表于 11-27 09:31 ?664次閱讀
    <b class='flag-5'>OpenHarmony</b>屬性信息怎么修改?觸覺智能RK3566<b class='flag-5'>鴻蒙</b>開發(fā)板來演示

    如何在開源鴻蒙OpenHarmony開啟SELinux模式?RK3566鴻蒙開發(fā)板演示

    本文介紹開源鴻蒙OpenHarmony系統(tǒng)下,開啟/關(guān)閉SELinux權(quán)限的方法,觸覺智能Purple Pi OH鴻蒙開發(fā)板演示,已適配全新OpenHarmony5.0 Release
    的頭像 發(fā)表于 11-18 19:03 ?767次閱讀
    如何在開源<b class='flag-5'>鴻蒙</b><b class='flag-5'>OpenHarmony</b>開啟SELinux模式?RK3566<b class='flag-5'>鴻蒙</b>開發(fā)板演示

    瑞芯微RK3566鴻蒙開發(fā)板OpenHarmony標(biāo)準(zhǔn)系統(tǒng)應(yīng)用兼容性測試指導(dǎo)

    本文OpenHarmony標(biāo)準(zhǔn)系統(tǒng)應(yīng)用兼容性測試指導(dǎo),適用鴻蒙系統(tǒng)軟件開發(fā)測試的新手入門學(xué)習(xí)課程,設(shè)備為觸覺智能的瑞芯微RK3566開發(fā)板,型號Purple Pi OH。是Laval官方社區(qū)主薦的一款
    的頭像 發(fā)表于 09-10 11:56 ?1080次閱讀
    瑞芯微RK3566<b class='flag-5'>鴻蒙</b>開發(fā)板<b class='flag-5'>OpenHarmony</b>標(biāo)準(zhǔn)系統(tǒng)應(yīng)用兼容性測試指導(dǎo)

    鴻蒙OpenHarmony南向/北向快速開發(fā)教程-迅為RK3568開發(fā)板

    4.1學(xué)習(xí)之旅了嗎?快來加入我們,一起探索鴻蒙4.1系統(tǒng)的無限魅力吧! 【北京迅為】OpenHarmony學(xué)習(xí)開發(fā)系列教程(第1期 北向基礎(chǔ)篇一) P0_先導(dǎo)課 P1_
    發(fā)表于 07-23 10:44