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

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

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

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

如何使用DevEco Studio創(chuàng)建Native C++應(yīng)用

OpenAtom OpenHarmony ? 來源:未知 ? 2023-02-21 14:30 ? 次閱讀

開源項目 OpenHarmony是每個人的 OpenHarmony 79d93ac6-b1b0-11ed-bfe3-dac502259ad0.jpg

劉麗紅

OpenHarmony知識體系工作組

簡介

本篇主要介紹如何使用DevEco Studio for OpenAtom OpenHarmony (以下簡稱“OpenHarmony”)創(chuàng)建一個Native C++應(yīng)用。應(yīng)用采用“Native C++”模板,實現(xiàn)了通過Node-API調(diào)用C標準庫的功能。本示例通過調(diào)用C標準庫接口來演示調(diào)用過程,具體接口是C標準庫的計算兩個給定數(shù)和,并將結(jié)果返回到頁面展示。通過這個應(yīng)用我們可以掌握OpenHarmony系統(tǒng)的arkTS/JS與C/C++混合開發(fā)。arkTS/JS與C/C++ 混合開發(fā)是OpenHarmony系統(tǒng)中的一套原生模塊擴展開發(fā)框架,它基于Node.js N-API規(guī)范開發(fā),為開發(fā)者提供了arkTS/JS與C/C++模塊之間相互調(diào)用的交互能力。這套機制對于OpenHarmony系統(tǒng)開發(fā)的價值有兩方面: 1、OpenHarmony系統(tǒng)可以將框架層豐富的模塊功能通過js接口開放給上層應(yīng)用使用。 2、應(yīng)用開發(fā)者也可以選擇將一些對性能、底層系統(tǒng)調(diào)用有要求的核心功能用C/C++封裝實現(xiàn),再通過js接口使用,提高應(yīng)用本身的執(zhí)行效率。

效果圖

實現(xiàn)效果如下圖所示: 79f41ada-b1b0-11ed-bfe3-dac502259ad0.jpg ? 通過arkTs編寫界面,根據(jù)界面展示點擊輸入框輸入兩個數(shù),再點擊計算按鈕調(diào)用接口,將數(shù)據(jù)傳入到C++端,C++端計算后再作為返回值到arkTs端。 ?

環(huán)境搭建

我們首先要完成應(yīng)用開發(fā)環(huán)境的搭建,本示例運行RK3568開發(fā)板上。 1、搭建應(yīng)用開發(fā)環(huán)境 1.1、開始前請參考應(yīng)用開發(fā)快速上手鏈接,完成DevEco Studio的安裝和開發(fā)環(huán)境配置:參考鏈接 1.2、開發(fā)環(huán)境配置完成后,創(chuàng)建工程(模板選擇“Native C++”),選擇JS或者eTS語言開發(fā)。 7a342df0-b1b0-11ed-bfe3-dac502259ad0.jpg ? 2、應(yīng)用調(diào)測 工程創(chuàng)建完成后,選擇使用真機進行調(diào)測。 2.1、將搭載OpenHarmony標準系統(tǒng)的開發(fā)板與電腦連接。 2.2、點擊File> Project Structure... > Project>SigningConfigs界面勾選“Automatically generate signature”,等待自動簽名完成即可,最后點擊“OK”。如下圖所示: 7a536274-b1b0-11ed-bfe3-dac502259ad0.png ? 在編輯窗口右上角的工具欄,點擊"7aa135f8-b1b0-11ed-bfe3-dac502259ad0.jpg"按鈕運行。

源碼結(jié)構(gòu)

代碼結(jié)構(gòu)分析,整個工程的代碼結(jié)構(gòu)如下: 7ab612ca-b1b0-11ed-bfe3-dac502259ad0.png ? 文件說明如下:
├── cpp:// C++代碼區(qū)
│   ├── types:// 接口存放文件夾
│   │   └── libadd              
│   │       ├── index.d.ts       // 接口文件
│   │       └── package.json // 接口注冊配置文件
│   ├── CmakeList.text     // Cmake打包配置文件
│   └── add.cpp                // C++源代碼
└── ets                               // ets代碼區(qū)
    └── Application
    │   └── AbilityStage.ts  // Hap包運行時類
    ├── MainAbility
    │   └── MainAbility.ts   //對Ability生命周期管理
    └── pages
└──index.ets//主頁面

C++端方法實現(xiàn)

C++端方法源碼是工程的entry/src/main/cpp/add.cpp文件。 1、注冊模塊 先定義一個模塊,對應(yīng)結(jié)構(gòu)體為napi_module,模塊定義好后,調(diào)用NAPI提供的模塊注冊函數(shù)napi_module_register(napi_module* mod)注冊到系統(tǒng)中;參考如下示例,nm_modname可以根據(jù)實際情況修改。
static napi_module demoModule = {
    .nm_version =1,
    .nm_flags = 0,
    .nm_filename = nullptr,
    .nm_register_func = Init,
    .nm_modname = "libadd",
    .nm_priv = ((void*)0),
    .reserved = { 0 },
};


extern "C" __attribute__((constructor)) void RegisterHelloModule(void)
{
    napi_module_register(&demoModule);
}
2、接口定義 接口定義是固定寫法,在napi_property_descriptor desc[]中,我們需要將編寫的“hyPotC”方法(從左至右第三個參數(shù))與對應(yīng)暴露的接口“hyPot”接口(從左至右第一個參數(shù))進行關(guān)聯(lián),其他參考示例默認填寫即可。如下所示,其中Add對應(yīng)的是Native C++的接口,其應(yīng)用端的接口對應(yīng)為add,NAPI通過napi_define_properties接口將napi_property_descriptor結(jié)構(gòu)體中的2個接口綁定在一起,并通過exports變量對外導出,使應(yīng)用層可以調(diào)用add方法。
EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
    napi_property_descriptor desc[] = {
        { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr }
    };
    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
    return exports;
}
EXTERN_C_END
3、接口實現(xiàn)
#include "napi/native_api.h"
static napi_value Add(napi_env env, napi_callback_info info)
{
    size_t requireArgc = 2;
    size_t argc = 2;
    napi_value args[2] = {nullptr};
    napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
    napi_valuetype valuetype0;
    napi_typeof(env, args[0], &valuetype0);
    napi_valuetype valuetype1;
    napi_typeof(env, args[1], &valuetype1);
    double value0;
    napi_get_value_double(env, args[0], &value0);
    double value1;
    napi_get_value_double(env, args[1], &value1);
    napi_value sum;
    napi_create_double(env, value0 + value1, &sum);
    return sum;
}
4、接口對外配置 4.1、修改index.d.ts用于對外提供方法、說明(名字可以更改,點擊方法可以直接鏈接到index.d.ts)。
export const add: (a: number, b: number) => number;
4.2、在package.json文件中將index.d.ts與cpp文件關(guān)聯(lián)起來。
{
  "name": "libadd.so",
  "types": "./index.d.ts"
}
4.3、CMakeLists.txt配置CMake打包參數(shù),CMakeLists.txt是CMake打包的配置文件,里面的大部分內(nèi)容無需修改,project、add_library方法中的內(nèi)容可以根據(jù)實際情況修改。
# the minimum version of CMake.
cmake_minimum_required(VERSION 3.4.1)
project(MyApplication)


set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})


include_directories(${NATIVERENDER_ROOT_PATH}
                    ${NATIVERENDER_ROOT_PATH}/include)


add_library(add SHARED add.cpp)
target_link_libraries(addPUBLIClibace_napi.z.so)

arkTs端實現(xiàn)

界面整體規(guī)劃效果如下圖所示: 7acf10b8-b1b0-11ed-bfe3-dac502259ad0.jpg ? 界面實現(xiàn)部分代碼,具體請查看源碼(見參考鏈接源碼路徑)。
@Entry
@Component
struct Index {
  ...
  build() {
    Row() {
      Column() {
      }
      .width('100%')
    }
    .height('100%')
  }
}

arkTs調(diào)用C++方法流程

在arkTs調(diào)用C++流程的過程中,需要使用到Node_API、Cmake等工具來做中間轉(zhuǎn)換,整個流程如下: 7adfbe72-b1b0-11ed-bfe3-dac502259ad0.jpg ? (1)add.cpp源碼用來編寫C++代碼,并通過index.d.ts文件對外提供接口。 (2)C++代碼通過Cmake打包工具打包成動態(tài)鏈接庫SO文件。 (3)arkTs端index.ets源碼通過引入SO包的方式去調(diào)用SO文件中的接口,最終通過hivgor一起打包成可執(zhí)行的xxx.hap包。 1、導入SO包 在index.ets文件中引入編譯好的SO包。
import libAdd from 'libadd.so'
2、添加點擊事件 Button組件添加點擊事件,調(diào)用libadd.so中的方法。
Button(this.buttonSubmit)
    .fontSize(40)
    .fontWeight(FontWeight.Bold)
    .margin({top:5})
    .height(100)
    .width(200)
    .onClick(() => {
        this.result = libAdd.add(this.num1,this.num2)
})
3、hivgor打包 hivgor打包將SO文件與eTS代碼一起打包成hap包。 4、安裝hap包 點擊"7aa135f8-b1b0-11ed-bfe3-dac502259ad0.jpg"按鈕安裝hap包運行。

總結(jié)

通過本篇介紹,我們了解了C++代碼如何與arkTs實現(xiàn)關(guān)聯(lián),arkTs如何調(diào)用SO包中的接口等,同時也掌握了C++代碼的具體編寫與打包流程。

參考鏈接

DevEco Studio安裝和開發(fā)環(huán)境配置

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/start-overview.md#%E5%B7%A5%E5%85%B7%E5%87%86%E5%A4%87

源碼路徑

https://gitee.com/openharmony-sig/knowledge/tree/knowledge/typical_demo/NativeApp

NAPI課程學習路徑

https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/napi%E7%B3%BB%E5%88%97%E5%AD%A6%E4%B9%A0


原文標題:如何使用DevEco Studio創(chuàng)建Native C++應(yīng)用

文章出處:【微信公眾號:OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


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

    關(guān)注

    57

    文章

    2466

    瀏覽量

    43608
  • OpenHarmony
    +關(guān)注

    關(guān)注

    26

    文章

    3802

    瀏覽量

    17730

原文標題:如何使用DevEco Studio創(chuàng)建Native C++應(yīng)用

文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    最新 HUAWEI DevEco Studio 調(diào)試技巧

    # 最新 HUAWEI DevEco Studio 調(diào)試技巧 ## 前言 ![image-20240531235823670](https
    發(fā)表于 03-30 06:55

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

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

    【貝啟科技BQ3568HM開源鴻蒙開發(fā)板深度試用報告】使用Deveco Studio進行開發(fā)

    (huawei.com) 下載: 安裝好,打開Deveco Studio,安裝OpenHarmony SDK版本 Api 11: 二、創(chuàng)建測試工程 打開Deveco
    發(fā)表于 03-16 11:28

    DevEco Studio 聯(lián)合小藝接入 DeepSeek,步驟更簡單開發(fā)鴻蒙更專業(yè)

    完成后,打開 DevEco Studio創(chuàng)建一個新的鴻蒙應(yīng)用項目,選擇適合的模板(如 Empty Ability)。 2、下載并安裝 CodeGenie 工具 如果你安裝的是官網(wǎng)最新的 De
    發(fā)表于 03-13 15:11

    HarmonyOS NEXT開發(fā)實戰(zhàn):DevEco Studio中DeepSeek的使用

    。安裝完成后,打開DevEco Studio創(chuàng)建一個新的鴻蒙應(yīng)用項目,選擇適合的模板(如Empty Ability)。 第二步:安裝CodeGPT插件 在DevEco
    發(fā)表于 03-07 14:56

    創(chuàng)建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼中獲得的結(jié)果與Python代碼不同是為什么?

    創(chuàng)建了用于OpenVINO?推理的自定義 C++ 和 Python* 代碼。 在兩個推理過程中使用相同的圖像和模型。 從 C++ 代碼中獲得的結(jié)果與 Python* 代碼不同。
    發(fā)表于 03-06 06:22

    如何在DevEco Studio中利用CodeGPT接入DeepSeek

    近期DeepSeek火爆全球,那一樣很火的開發(fā)鴻蒙原生應(yīng)用的DevEco Studio如果把它接入,會發(fā)生什么“化學反應(yīng)”呢?下面我們將詳細分享如何在DevEco Studio中利用C
    的頭像 發(fā)表于 02-19 13:52 ?723次閱讀
    如何在<b class='flag-5'>DevEco</b> <b class='flag-5'>Studio</b>中利用CodeGPT接入DeepSeek

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

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

    Spire.XLS for C++組件說明

    開發(fā)人員可以快速地在 C++ 平臺上完成對 Excel 的各種編程操作,如根據(jù)模板創(chuàng)建新的 Excel 文檔,編輯現(xiàn)有 Excel 文檔,以及對 Excel 文檔進行轉(zhuǎn)換。 Spire.XLS
    的頭像 發(fā)表于 01-14 09:40 ?438次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說明

    戈帥的《HarmonyOS從入門到精通40例》DevEco Studio升級說明

    《HarmonyOS從入門到精通40例》DevEco Studio升級說明如附件*附件:《HarmonyOS從入門到精通40例》DevEco Studio升級說明.docx
    發(fā)表于 12-03 15:45

    DevEco Studio應(yīng)用與服務(wù)體檢工具介紹

    應(yīng)用檢測工具是開發(fā)者快速提升鴻蒙應(yīng)用產(chǎn)品質(zhì)量不可或缺的。因此,我們要向您推薦DevEco Studio應(yīng)用與服務(wù)體檢工具(AppAnalyzer)。當前已支持包括各種類型測試以及最佳實踐測試,對于
    的頭像 發(fā)表于 11-05 11:39 ?855次閱讀
    <b class='flag-5'>DevEco</b> <b class='flag-5'>Studio</b>應(yīng)用與服務(wù)體檢工具介紹

    DevEco Studio Code Linter的使用指南

    在當今對代碼質(zhì)量和規(guī)范性要求日益嚴格的環(huán)境中,開發(fā)者亟需強大的代碼檢查工具來應(yīng)對挑戰(zhàn)。DevEco Studio Code Linter正是這樣一款工具,它通過提升代碼質(zhì)量、統(tǒng)一代碼風格,并有效檢測安全漏洞和潛在bug,為開發(fā)者提供了顯著的優(yōu)勢,成為現(xiàn)代軟件開發(fā)中不可或缺
    的頭像 發(fā)表于 11-05 09:52 ?729次閱讀

    c++編譯后鏈接失敗的原因?如何解決?

    首先使用rt-thread studio 2.2.8創(chuàng)建rt-thread nano項目,nano版本為3.1.5 此時為c項目,點擊編譯是正常的。 然后選擇菜單新建->轉(zhuǎn)換為c
    發(fā)表于 07-25 08:13

    鴻蒙開發(fā):創(chuàng)建PageAbility

    通過DevEco Studio開發(fā)平臺創(chuàng)建PageAbility時,DevEco Studio會在app.js/app.ets中默認生成on
    的頭像 發(fā)表于 06-18 09:36 ?373次閱讀
    鴻蒙開發(fā):<b class='flag-5'>創(chuàng)建</b>PageAbility

    HarmonyOS開發(fā)案例:【Stage模型下Ability的創(chuàng)建和使用】

    基于Stage模型,對Ability的創(chuàng)建和使用進行講解。首先在課程中我們將帶領(lǐng)大家使用DevEco Studio創(chuàng)建一個Stage模型Ability,并使用UIAbilityCont
    的頭像 發(fā)表于 05-08 14:41 ?1092次閱讀
    HarmonyOS開發(fā)案例:【Stage模型下Ability的<b class='flag-5'>創(chuàng)建</b>和使用】
    主站蜘蛛池模板: 亚洲精品国产美女在线观看 | 热re99久久国产精品 | 国产网站大全 | 美女张开大腿让男人捅 | 中国业余老太性视频 | 特黄级 | 高清一级做a爱视频免费 | 一本大道高清在线视频 视频 | 精品欧美一区二区三区在线观看 | 欧美精品网 | 久久国产成人午夜aⅴ影院 久久国产福利 | 22eee在线播放成人免费视频 | 国产成年网站v片在线观看 国产成人91青青草原精品 | 丰满寡妇一级毛片 | 亚洲国产成人久久99精品 | 国产91久久最新观看地址 | 成人精品一区二区三区电影 | 手机看片国产在线 | 伊人久久大 | 91综合在线视频 | 色在线视频播放 | 天堂视频在线视频观看2018 | 天天操夜夜做 | 一二三区电影 | 午夜老司机永久免费看片 | 欧美在线视频7777kkkk | 日产精品卡二卡三卡四卡乱码视频 | 五月婷婷在线视频 | 人人插人人射 | 精品四虎免费观看国产高清午夜 | 午夜免费啪啪 | 四虎最新网址在线观看 | 美女黄色在线 | tom影院亚洲国产日本一区 | 欧美不在线 | 欧美高清在线播放 | 久久天天躁综合夜夜黑人鲁色 | 狠狠操天天操视频 | japanese69xxx日本| 欧美一区二区三区黄色 | 黄到让你下面湿的视频 |