日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

OpenAtom OpenHarmony ? 來(lái)源:未知 ? 2023-02-21 14:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

開(kāi)源項(xiàng)目 OpenHarmony是每個(gè)人的 OpenHarmony 79d93ac6-b1b0-11ed-bfe3-dac502259ad0.jpg

劉麗紅

OpenHarmony知識(shí)體系工作組

簡(jiǎn)介

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

效果圖

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

環(huán)境搭建

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

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

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

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

C++端方法源碼是工程的entry/src/main/cpp/add.cpp文件。 1、注冊(cè)模塊 先定義一個(gè)模塊,對(duì)應(yīng)結(jié)構(gòu)體為napi_module,模塊定義好后,調(diào)用NAPI提供的模塊注冊(cè)函數(shù)napi_module_register(napi_module* mod)注冊(cè)到系統(tǒng)中;參考如下示例,nm_modname可以根據(jù)實(shí)際情況修改。
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”方法(從左至右第三個(gè)參數(shù))與對(duì)應(yīng)暴露的接口“hyPot”接口(從左至右第一個(gè)參數(shù))進(jìn)行關(guān)聯(lián),其他參考示例默認(rèn)填寫即可。如下所示,其中Add對(duì)應(yīng)的是Native C++的接口,其應(yīng)用端的接口對(duì)應(yīng)為add,NAPI通過(guò)napi_define_properties接口將napi_property_descriptor結(jié)構(gòu)體中的2個(gè)接口綁定在一起,并通過(guò)exports變量對(duì)外導(dǎo)出,使應(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、接口實(shí)現(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、接口對(duì)外配置 4.1、修改index.d.ts用于對(duì)外提供方法、說(shuō)明(名字可以更改,點(diǎn)擊方法可以直接鏈接到index.d.ts)。
export const add: (a: number, b: number) => number;
4.2、在package.json文件中將index.d.ts與cpp文件關(guān)聯(lián)起來(lái)。
{
  "name": "libadd.so",
  "types": "./index.d.ts"
}
4.3、CMakeLists.txt配置CMake打包參數(shù),CMakeLists.txt是CMake打包的配置文件,里面的大部分內(nèi)容無(wú)需修改,project、add_library方法中的內(nèi)容可以根據(jù)實(shí)際情況修改。
# 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端實(shí)現(xiàn)

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

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

在arkTs調(diào)用C++流程的過(guò)程中,需要使用到Node_API、Cmake等工具來(lái)做中間轉(zhuǎn)換,整個(gè)流程如下: 7adfbe72-b1b0-11ed-bfe3-dac502259ad0.jpg ? (1)add.cpp源碼用來(lái)編寫C++代碼,并通過(guò)index.d.ts文件對(duì)外提供接口。 (2)C++代碼通過(guò)Cmake打包工具打包成動(dòng)態(tài)鏈接庫(kù)SO文件。 (3)arkTs端index.ets源碼通過(guò)引入SO包的方式去調(diào)用SO文件中的接口,最終通過(guò)hivgor一起打包成可執(zhí)行的xxx.hap包。 1、導(dǎo)入SO包 在index.ets文件中引入編譯好的SO包。
import libAdd from 'libadd.so'
2、添加點(diǎn)擊事件 Button組件添加點(diǎn)擊事件,調(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包 點(diǎn)擊"7aa135f8-b1b0-11ed-bfe3-dac502259ad0.jpg"按鈕安裝hap包運(yùn)行。

總結(jié)

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

參考鏈接

DevEco Studio安裝和開(kāi)發(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課程學(xué)習(xí)路徑

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


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

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


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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

    文章

    3031

    瀏覽量

    46191
  • OpenHarmony
    +關(guān)注

    關(guān)注

    33

    文章

    3977

    瀏覽量

    21373

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    keil實(shí)現(xiàn)cc++混合編程

    參考touchgfx生成的代碼,發(fā)現(xiàn)了一個(gè)不需要添加--cpp11 參數(shù)的解決方法,具體操作如下。 一、創(chuàng)建一個(gè)空白的C文件和頭文件在頭文件中定義c++文件中需要調(diào)用的函數(shù),如圖所示 二、在
    發(fā)表于 01-26 08:58

    瑞薩RL78/F22 MCU基于e2studio開(kāi)發(fā)環(huán)境創(chuàng)建觸摸應(yīng)用樣例工程

    瑞薩RL78/F22 MCU基于e2studio開(kāi)發(fā)環(huán)境創(chuàng)建觸摸應(yīng)用樣例工程
    的頭像 發(fā)表于 01-14 15:31 ?8353次閱讀
    瑞薩RL78/F22 MCU基于e2<b class='flag-5'>studio</b>開(kāi)發(fā)環(huán)境<b class='flag-5'>創(chuàng)建</b>觸摸應(yīng)用樣例工程

    應(yīng)用開(kāi)發(fā)準(zhǔn)備工作

    成HarmonyOS應(yīng)用的創(chuàng)建,從而使用各類服務(wù)。 配置安裝DevEco Studio 安裝最新版DevEco Studio。 使用
    發(fā)表于 01-04 10:47

    C語(yǔ)言與C++的區(qū)別及聯(lián)系

    創(chuàng)建源文件時(shí)什么都不給,默認(rèn)是.cpp。 3、返回值 C語(yǔ)言中,如果一個(gè)函數(shù)沒(méi)有指定返回值類型,默認(rèn)返回int類型;C++中,如果一個(gè)函數(shù)沒(méi)有返回值則必須指定為void。 4、參數(shù)列表 在
    發(fā)表于 12-24 07:23

    CC++之間的聯(lián)系

    1、語(yǔ)法兼容性: C++完全兼容C語(yǔ)言的語(yǔ)法,這意味著任何有效的C語(yǔ)言程序都可以直接在C++編譯器下編譯通過(guò)。 2、底層控制: C++
    發(fā)表于 12-11 06:51

    C語(yǔ)言和C++之間的區(qū)別是什么

    (inheritance)、多態(tài)(polymorphism)等面向?qū)ο缶幊谈拍?。程序員可以通過(guò)定義類來(lái)創(chuàng)建對(duì)象,并利用類的實(shí)例進(jìn)行操作。 2、類型系統(tǒng)與安全性: C++具有更為嚴(yán)格的類型檢查機(jī)制
    發(fā)表于 12-11 06:23

    rtthread studio 創(chuàng)建不了工程怎么解決?

    安裝最新studio,路徑默認(rèn)或自選,重新安裝都會(huì)創(chuàng)建工程不成功,報(bào)錯(cuò)如圖 實(shí)際上首次安裝rtt studio ,且電腦上并未有相關(guān)rttsudio創(chuàng)建的相關(guān)工程 所有安裝路徑、
    發(fā)表于 09-29 06:49

    【M-K1HSE開(kāi)發(fā)板免費(fèi)體驗(yàn)】相關(guān)源碼之閱讀和分析1-使用XComponent + Vsync 實(shí)現(xiàn)自定義動(dòng)畫

    主線程中完成,即使主線程卡頓,動(dòng)畫效果也不會(huì)受影響。 XComponent 的核心功能 OpenGL ES 接口調(diào)用 : 提供在應(yīng)用 **Native 層(C/C++) **直接調(diào)用 OpenGL
    發(fā)表于 09-03 16:05

    【匯思博SEEK100開(kāi)發(fā)板試用體驗(yàn)】記錄DevEco Studio 中遇到的問(wèn)題

    在華為鴻蒙(HarmonyOS)應(yīng)用開(kāi)發(fā)工具 DevEco Studio 中遇到的問(wèn)題。主要問(wèn)題有以下幾點(diǎn): 1. 預(yù)覽功能失敗 底部 PreviewerLog 中顯示 “Current
    發(fā)表于 08-24 21:01

    HarmonyOSAI編程DevEco AI輔助編程工具

    、單元測(cè)試用例生成、代碼智能解讀和編譯報(bào)錯(cuò)智能分析等能力,幫助開(kāi)發(fā)者提高編碼效率。 使用方式 在DevEco Studio右側(cè)邊欄點(diǎn)擊CodeGenie或輸入快捷鍵Alt/Option+U,可以進(jìn)入
    發(fā)表于 08-18 14:54

    【M-K1HSE開(kāi)發(fā)板免費(fèi)體驗(yàn)】DevEco Studio應(yīng)用開(kāi)發(fā)體驗(yàn)(物理機(jī)器運(yùn)行失敗)

    deveco-studio-5.1.1.823安裝如下位置全部勾選,其他按提示 即可 創(chuàng)建工程打開(kāi)DevEco安裝目錄默認(rèn)位于C:\\Program Files\\Huawei
    發(fā)表于 07-19 11:16

    【潤(rùn)開(kāi)鴻HH-SCDAYU800A開(kāi)發(fā)板試用體驗(yàn)】Hello World

    命令行或DevEco Studio終端,輸入hdc tconn 192.168.1.4:5555 顯示Connect OK表示連接成功 PS C:\\\\\\\\\\\\\\\\Users
    發(fā)表于 07-01 00:52

    DevEco CodeGenie 鴻蒙AI 輔助編程初次使用

    一、工具概述與核心能力 DevEco CodeGenie 是集成在 DevEco Studio 中的 AI 輔助編程插件,專為 HarmonyOS 應(yīng)用開(kāi)發(fā)設(shè)計(jì),提供三大核心能力: 智能知識(shí)問(wèn)答
    的頭像 發(fā)表于 06-26 08:48 ?1116次閱讀

    使用DevEcoStudio 開(kāi)發(fā)、編譯鴻蒙 NEXT_APP 以及使用中文插件

    C++ 等) ### 3.2 項(xiàng)目結(jié)構(gòu) 創(chuàng)建完成后,DevEco Studio 會(huì)生成標(biāo)準(zhǔn)的鴻蒙應(yīng)用項(xiàng)目結(jié)構(gòu): ```sh myapplication/ ├── AppScop
    發(fā)表于 06-11 17:18

    ArkUI-X跨平臺(tái)框架接入指南

    ,就可以構(gòu)建支持多平臺(tái)的精美、高性能應(yīng)用。 使用DevEco Studio開(kāi)發(fā)ArkUI-X約束說(shuō)明 DevEco Studio僅支持ArkUI-X源碼開(kāi)發(fā)和調(diào)試,各平臺(tái)
    發(fā)表于 05-18 18:21
    静海县| 定安县| 沛县| 武定县| 莒南县| 麻江县| 锦屏县| 永兴县| 富民县| 西林县| 抚松县| 安达市| 罗城| 盐边县| 黑河市| 宣武区| 平凉市| 兴安县| 嘉定区| 疏勒县| 石台县| 大埔区| 黑山县| 翼城县| 富锦市| 大庆市| 娄烦县| 杭锦旗| 大名县| 称多县| 上思县| 珠海市| 启东市| 西丰县| 江华| 潜江市| 平遥县| 雅江县| 军事| 蒙山县| 台南县|