在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

鴻蒙OpenHarmony NAPI技術-基礎學習

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

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

NAPI作用

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

NAPI在系統中的位置

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

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

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

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

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

NAPI使用

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

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

  1. 模塊注冊(import的模塊名稱hello,是怎么對應到實際的c++lib庫的?) — Module Manager。
  2. 方法名映射(js調用的hello方法,是怎么對應到native的C/C++的方法的?) — Native Engine。
  3. 數據傳遞與轉換(js傳入的入參、得到的返回結果,需要轉換成C/C++代碼可以操作的數據類型)

c++方法具體實現:

// 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提供調用,需要為該接口進行NAPI封裝

// helloNapi.cpp

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

static napi_value Hello(napi_env env, napi_callback_info info)
{
    // 根據環境變量獲取參數

    // js參數個數
    size_t argc = 1;
    // 參數定義
    napi_value argv[1] = { 0 };
    // 入參變量獲取
    napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
    // 獲取入參的類型
    napi_valuetype valueType = napi_undefined;
    napi_typeof(env, argv[0], &valueType);
    // js類型的入參值轉換為C/C++可以操作的數據類型
    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;

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

    // C/C++數據類型轉換為JS數據類型并返回給應用層
    // 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為提供給應用側調用的模塊名稱
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);
}

編譯生成假設為hello.z.so

js調用代碼

// hello.ets

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

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

以上就是簡單的NAPI簡介以及簡單的一個NAPI應用開發模版。更多鴻蒙開發內容,前往主頁:

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    57

    文章

    2370

    瀏覽量

    42905
  • OpenHarmony
    +關注

    關注

    25

    文章

    3728

    瀏覽量

    16401
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

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

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

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

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

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

    鴻蒙開發學習:【OpenHarmony HAR】

    OpenHarmony js/ts三方庫使用的是OpenHarmony靜態共享包,即HAR(Harmony Archive),可以包含js/ts代碼、c++庫、資源和配置文件。通過HAR,可以實現
    的頭像 發表于 03-18 16:27 ?765次閱讀

    深圳市24年,實現鴻蒙原生應用數占全國總量10%以上

    、Harmony南向開發、鴻蒙項目實戰等等)鴻蒙(Harmony NEXT)技術知識點 高清完整版與筆記請加→mau123789是衛呀 針對鴻蒙成長路線打造的
    發表于 03-04 21:42

    鴻蒙實戰項目開發:【短信服務】

    ://gitee.com/openharmony/applications_app_samples.git git pull origin master ? 最后呢,很多開發朋友不知道需要學習那些鴻蒙
    發表于 03-03 21:29

    鴻蒙這么大聲勢,為何遲遲看不見崗位?最新數據來了

    。 話不多說,我們直接看詳細資料鴻蒙OpenHarmony學習手冊(共計1236頁)與鴻蒙OpenHarmony )開發入門教學視頻
    發表于 02-29 20:53

    鴻蒙NAPI 框架生成工具實現流程

    NAPI 框架生成工具 可以根據用戶指定路徑下的 ts(typescript)接口文件一鍵生成 NAPI 框架代碼、業務代碼框架、GN 文件等。在開發 JS 應用與 NAPI 間接口時,底層框架
    的頭像 發表于 02-28 17:00 ?703次閱讀
    【<b class='flag-5'>鴻蒙</b>】<b class='flag-5'>NAPI</b> 框架生成工具實現流程

    學習鴻蒙背后的價值?星河版開放如何學習

    鴻蒙原生內核。 實現了AI框架、大模型、設計系統、編程框架、編程語言、編譯器等全棧自研,有核心技術、全棧能力、底座和生態,是真正的操作系統,而非安卓套皮。關鍵是有了鴻蒙星河版本也就意味著國內市場有了
    發表于 02-22 20:55

    OpenHarmonyNAPI 框架介紹

    環境中的 JS 變量與方法。 OpenHarmony 中的 NAPI OpenAtom OpenHarmony(以下簡稱 “OpenHarmony”)應用層基于 javascript
    的頭像 發表于 02-01 17:34 ?727次閱讀
    <b class='flag-5'>OpenHarmony</b> 之 <b class='flag-5'>NAPI</b> 框架介紹

    鴻蒙不再兼容安卓,那么鴻蒙開發者是否會大增?

    ? 應屆生/計算機專業:通過學習鴻蒙新興技術,入行互聯網,未來高起點就業。 0基礎轉型:提前布局新方向,抓住風口。自我提升,獲得更多就業機會。 技術提升/進階跳槽:發展瓶頸期,提升職場
    發表于 01-31 22:17

    鴻蒙開發OpenHarmony組件復用案例

    ) } }, item => item) } } } 本文主要是對鴻蒙開發基礎當中的OpenHarmony技術組件復用示例, 更多鴻蒙開發
    發表于 01-15 17:37
    主站蜘蛛池模板: 日韩在线网| 亚洲精品久久久久午夜三| 午夜三级毛片| 婷婷六月在线| 美女扒开腿让男人桶尿口| 国产精品美女久久久久网站 | 91视频污污版| 在厨房乱子伦在线观看| 68日本xxxxxxxxx777| 201天天爱天天做| 久久精品久久久| 天天爽夜夜| 久久理论片| 欧美猛性| 高清不卡一区二区三区| 性视频在线| 五月婷婷一区| 欧美一级欧美三级| 日本人色道| 美女免费黄| 精品国产香港三级| 免费观看成人毛片| 欧美日本一区二区三区道| 日本午夜色| 久久黄色精品视频| 精品国产三级a∨在线| www永久免费视频| 91热成人精品国产免费| 天天操夜夜爱| 免费人成在线观看视频播放| аⅴ资源天堂8在线| 福利视频自拍偷拍| 国产精品资源| 亚洲www美色| 久久国产美女免费观看精品| 日本不卡高清免费| 久久在线播放| 色人久久| 美女黄18| 小说区v天堂网| 黄色在线播放网址|