色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

如何使用cpp編寫用于小型系統(tǒng)的app

OpenHarmony技術社區(qū) ? 來源:OpenHarmony技術社區(qū) ? 2023-04-25 09:47 ? 次閱讀

本文將介紹如何使用 cpp 編寫用于小型系統(tǒng)的 app。

Ability相關介紹

Ability 是應用所具備能力的抽象,也是應用程序的重要組成部分。Ability 是系統(tǒng)調(diào)度應用的最小單元,是能夠完成一個獨立功能的組件。

一個應用可以包含一個或多個 Ability。其中 Ability 又分為 Page 類型的和 Service 類型的,前者是為用戶提供人機交互能力的,后者是提供后臺任務機制的。

簡單來講就是 Page 帶界面,Service 不帶界面。這里將重點介紹 Page 類型的 Ability。

dfb15d5a-e307-11ed-ab56-dac502259ad0.png

使用到的子系統(tǒng)有 Ability 子系統(tǒng)、包管理子系統(tǒng)和圖形 UI 子系統(tǒng)。

Ability 子系統(tǒng)是管理 OpenHarmony 應用運行狀態(tài)的開發(fā)框架;包管理子系統(tǒng)是 OpenHarmony 為開發(fā)者提供的安裝包管理框架;圖形 UI 子系統(tǒng)提供基礎 UI 組件和容器類組件。

dfd4821c-e307-11ed-ab56-dac502259ad0.png

簡單實現(xiàn)

①ability 和 abilityslice

abilityslice 是單個頁面及其控制邏輯的總和,是 Page 類型 Ability 特有的組件。

一個 Page 類型的 Ability 可以包含多個 AbilitySlice,此時,這些頁面提供的業(yè)務能力應當是高度相關的。dfe6c1c0-e307-11ed-ab56-dac502259ad0.png

②生命周期

整體流程下來大致有 OnStart()、OnAvtive()、OnInactive()、OnBackground() 和 OnStop() 五階段。

abilityslice 生命周期與 ability 相似,但是仍要區(qū)分。dff57e68-e307-11ed-ab56-dac502259ad0.png

③hello world

./helloworld/
├──config.json//配置文件
├──resource//資源
└──src//主要文件
├──include
│├──main_ability.h
│└──main_ability_slice.h
└──main
├──main_ability.cpp
└──main_ability_slice.cpp
首先定義并注冊 ability:
//main_ability.h
#ifndefHELLO_MAIN_ABILITY_H
#defineHELLO_MAIN_ABILITY_H

#include"ability_loader.h"

namespaceOHOS{
classMainAbility:publicAbility{
protected:
voidOnStart(constWant&want)override;//Want結(jié)構體,ability的相關信息
/*
*由于在這里我們只要簡單的展示helloworld標簽,其它函數(shù)不需要重載。
*/
//voidOnInactive()override;
//voidOnActive(constWant&want)override;
//voidOnBackground()override;
//voidOnStop()override;
};
}

#endif
//main_ability.cpp
#include"main_ability.h"

namespaceOHOS{
REGISTER_AA(MainAbility)//使用REGISTER_AA注冊ability

voidMainAbility::OnStart(constWant&want)
{
printf("ThisisMainAbilityOnStartstatus!
");
SetMainRoute("MainAbilitySlice");//設置主頁面為MainAbilitySlice,這要與后續(xù)的slice名字匹配

Ability::OnStart(want);
}
}

e0065a3a-e307-11ed-ab56-dac502259ad0.png

最后編寫 slice 界面:
//main_ability_slice.h
#ifndefHELLO_ABILITY_SLICE_H
#defineHELLO_ABILITY_SLICE_H

#include"ability_loader.h"
#include"ability_manager.h"
#include"bundle_manager.h"
#include"components/ui_label.h"

namespaceOHOS{
classMainAbilitySlice:publicAbilitySlice{//創(chuàng)建AbilitySlice類與上面同名
public:
MainAbilitySlice()=default;
virtual~MainAbilitySlice();

protected:
voidOnStart(constWant&want)override;
/*
*同理
*/
//voidOnInactive()override;
//voidOnActive(constWant&want)override;
//voidOnBackground()override;
//voidOnStop()override;
};
}
#endif
//main_ability_slice.cpp
#include"main_ability_slice.h"
constintscreen_width=720;
constintscreen_height=1280;

namespaceOHOS{
REGISTER_AS(MainAbilitySlice)

MainAbilitySlice::~MainAbilitySlice()
{
printf("Thisis~MainAbilitySlice!rn");
}

voidMainAbilitySlice::OnStart(constWant&want)
{
AbilitySlice::OnStart(want);
RootView*rootView_=RootView::GetWindowRootView();//創(chuàng)建底層界面
rootView_->SetPosition(0,0,screen_width,screen_height);
rootView_->SetStyle(STYLE_BACKGROUND_COLOR,Color::Black()));
rootView_->SetFocusable(true);
rootView_->SetInterceptFocus(false);

UILabel*label=newUILabel();//創(chuàng)建label寫入HelloWorld
label->SetPosition(0,0,720,64);
label->SetText("HelloWorld!");
label->SetFont("SourceHanSansSC-Regular.otf",64);
label->SetStyle(STYLE_TEXT_COLOR,Color::White()));

rootView_->Add(label);//將label放入rootView

SetUIContent(rootView_);//設置顯示RootViewUI
}
}
#endif

e02388f8-e307-11ed-ab56-dac502259ad0.png

④config.json 的編寫

//config.json
{
"app":{
"bundleName":"com.sample.hello",
"vendor":"sample",
"version":{
"code":1,
"name":"1.0"
},
"apiVersion":{
"compatible":3,
"target":4
}
},
"deviceConfig":{
"default":{
}
},
"module":{
"package":"com.sample.hello",
"name":".MyHarmonyAbilityPackage",
"deviceType":[
"phone",
"tv",
"tablet",
"pc",
"car",
"smartWatch",
"sportsWatch",
"smartVision"
],
"distro":{
"deliveryWithInstall":true,
"moduleName":"hello",
"moduleType":"entry"
},
"abilities":[//ability配置聲明
{
"name":"MainAbility",
"label":"helloworldapp",
"launchType":"standard",
"type":"page",
"visible":true
}
]
}
}

hap編譯

①通過 BUILD.gn 與系統(tǒng)一并編譯

使用到編譯鏈中的 hap_pack,添加配置:

import(“/ildte/config/hap_pack.gni”)
import("http://build/lite/config/hap_pack.gni")

shared_library("hello"){
sources=[
"src/main/main_ability.cpp",
"src/main/main_ability_slice.cpp"
]#將主要文件編譯出庫

deps=[
"${aafwk_lite_path}/frameworks/ability_lite:aafwk_abilitykit_lite",
"${appexecfwk_lite_path}/frameworks/bundle_lite:bundle",
"http://foundation/graphic/ui:lite_ui",
"http://foundation/graphic/utils:lite_graphic_utils",
"http://foundation/systemabilitymgr/samgr_lite/samgr:samgr",
]

include_dirs=[
"src/include",
"${aafwk_lite_path}/interfaces/kits/ability_lite",
"${aafwk_lite_path}/interfaces/kits/want_lite",
"${appexecfwk_lite_path}/interfaces/kits/bundle_lite",
]

ldflags=["-shared"]
ldflags+=["-lstdc++"]
ldflags+=["-L$ohos_root_path/sysroot/usr/lib"]
ldflags+=["-Wl,-rpath-link=$ohos_root_path/sysroot/usr/lib"]
ldflags+=[
"-lui",
"-lability",
]#添加依賴

defines=[
"ENABLE_WINDOW=1",
"ABILITY_WINDOW_SUPPORT",
"OHOS_APPEXECFWK_BMS_BUNDLEMANAGER",
]#配置定義
}

hap_pack("hello_hap"){#打包成hap
deps=[":hello"]
mode="hap"
json_path="config.json"
ability_so_path="$root_out_dir/libhello.so"#編譯后的庫文件
force="true"
cert_profile="com.huawei.launcher_AppProvision_release.p7b"#由于不清楚獲取證書方法先用源碼案例自帶的證書代替
resources_path="resources"
hap_name="hello"
}

②通過 app_packing_tool 單獨編譯

該打包工具在源碼目錄 developtools/packing_tool/jar 下。

主要參數(shù)如下:

e039c758-e307-11ed-ab56-dac502259ad0.png

具體操作:還是得先將動態(tài)庫編譯出來,然后將動態(tài)庫 libhello.so 和 config.json 放到一個文件夾里。
./out/
├──config.json
└──libhello.so
最后使用 java -jar app_packing_tool.jar 進行打包,如下:
java-jarapp_packing_tool.jar|
--modehap|
--json-path./config.json|
--ability-out-path./libhello.so|
--out-path./hello.hap

hap安裝

①安裝命令 bm

由于小型系統(tǒng)不支持使用 HDC 工具,我們需要使用到 bm 命令進行安裝程序。
bmset-sdisable//取消簽名安裝。
bminstall-psystem/internal/hello.hap//使用BUILD.gn一起編譯的hap默認會在這個路徑,如果使用工具打包的,視情況填寫路徑。

②相關參數(shù)

#bm
Usage:installhap-path[options]
Description:
--help|-hhelpmenu
--happath|-plocationofthehaptoinstall
Usage:uninstallbundle-name[options]
Description:
--help|-hhelpmenu
--bundlename|-nnameofthebundletouninstall
Usage:dump[options]
OptionDescription:
--help|-hhelpmenu
--list|-lapplist
--bundlename|-ndumpinstalledhap'sinfo
--metadatakey|-mdumpbundleNamesmatchmetaDatakey
Usage:set[options]
OptionDescription:
--externalmode|-estatusenableexternalmode
--debugmode|-dstatusenabledebugmode
--signmode|-sstatusenablesignmode

小型系統(tǒng)的 bm 指令是標準系統(tǒng)的閹割版。

安裝成功后就可以打開該 app,部分小型系統(tǒng)的設備屏幕沒有觸摸功能和鼠標驅(qū)動,我們可以使用 aa 命令來啟動 app。
aastart-pcom.sample.hello-nMainAbility//包名和ability名都在config.json中定義
#aa
Usage:
aastart-pbundlename-nability_name
aastopability-pbundlename-nability_name
aaterminate-pbundlename
aadump-pbundlename-nability_name-eextra_option
aadump-a

Options:
-h(--help)Showthehelpinformation.[eg:aa-h]
-p(--bundlename)Appointthebundlenamename.[eg:-pcom.huawei]
-n(--abilityname)Appointtheabilityname.[eg:-nMyAbility]
-a(--all)[Unnecessary]dumpallabilityinfo.[eg:-a]
-e(--extra)[Unnecessary]extrainfowhendump.[eg:-e]

Commands:
aastartStartthetargetability.
aastopabilityStopthetargetserviceability.
aaterminateTerminatethetargetapp.
aadumpDumpability

總結(jié)

使用 cpp 編寫用戶應用程序,我們可以更方便有效的調(diào)用南向接口,這將會在開發(fā)和調(diào)試的過程中給我們帶來極大的便利。

審核編輯 :李倩


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

    關注

    33

    文章

    1574

    瀏覽量

    72514
  • 應用程序
    +關注

    關注

    37

    文章

    3271

    瀏覽量

    57724
  • OpenHarmony
    +關注

    關注

    25

    文章

    3723

    瀏覽量

    16337

原文標題:OpenHarmony上編寫app

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區(qū)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C++程序的結(jié)構特性

    全面兼容C,C的許多代碼不經(jīng)修改就可以為Cpp所用,用C編寫的庫函數(shù)和實用軟件可以用于Cpp
    發(fā)表于 09-19 11:19 ?781次閱讀

    請問keil編寫的BootLoader可以跳轉(zhuǎn)到GCC編寫APP里嗎?

    keil編寫的BootLoader 可以跳轉(zhuǎn)到 GCC編寫APP里嗎?
    發(fā)表于 04-18 07:00

    idf4.4在cmakelists中設置了main.cpp依然找不到app_main ?為什么?

    ./Src/main.cpp ./Src/ringbufferUart.cpp ./Src/app_tasks.cpp ./Src/md5.cpp ./Src/util.
    發(fā)表于 06-17 07:42

    CPP和C共存的訣竅是什么?

    CPP和C共存的訣竅是什么?我有一個使用數(shù)學函數(shù)的單獨的CPP庫。主C程序使用CPP LIB。對于主項目的標準編譯失敗了許多對CPP數(shù)學函數(shù)的未定義的引用,例如,如果我添加了LIXXC
    發(fā)表于 01-22 14:49

    Stm32的bootloader和App編寫注意事項有哪些?

    Stm32的bootloader和App編寫注意事項有哪些?如何使用STM32F4的BootLoader和APP程序?
    發(fā)表于 10-29 07:35

    如何利用App inventor編寫安卓app控制ESP8266?

    如何利用App inventor編寫安卓app控制ESP8266?
    發(fā)表于 02-11 07:04

    OpenHarmony輕量與小型系統(tǒng)入門概述

    簡介 OpenHarmony輕量和小型系統(tǒng)用于內(nèi)存較小的IOT設備(參考內(nèi)存≥128KiB)。通過本文,開發(fā)者可以快速熟悉OpenHarmony輕量和小型
    發(fā)表于 05-06 15:48

    idf4.4在cmakelists.txt中設置了main.cpp依然找不到app_main是為什么?

    /main.cpp./Src/ringbufferUart.cpp./Src/app_tasks.cpp./Src/md5.cpp./Src/util.
    發(fā)表于 02-14 06:36

    嵌入式小型TCPIP協(xié)議棧

    一個專為嵌入式系統(tǒng)編寫小型TCP/IP協(xié)議棧 TCP/IPLean
    發(fā)表于 10-08 17:23 ?50次下載

    一個專為嵌入式系統(tǒng)編寫小型TCP IP協(xié)議棧

    一個專為嵌入式系統(tǒng)編寫小型TCP IP協(xié)議棧
    發(fā)表于 02-08 01:38 ?17次下載

    LTC6946 Lduino.CPP文件

    LTC6946 Lduino.CPP文件
    發(fā)表于 06-07 19:54 ?3次下載
    LTC6946 Lduino.<b class='flag-5'>CPP</b>文件

    LTC2473-Lduino.CPP文件

    LTC2473-Lduino.CPP文件
    發(fā)表于 06-08 19:12 ?1次下載
    LTC2473-Lduino.<b class='flag-5'>CPP</b>文件

    LTC2484 Lduino.CPP文件

    LTC2484 Lduino.CPP文件
    發(fā)表于 06-08 19:19 ?8次下載
    LTC2484 Lduino.<b class='flag-5'>CPP</b>文件

    LTC1859 Lduino.CPP文件

    LTC1859 Lduino.CPP文件
    發(fā)表于 06-08 19:25 ?3次下載
    LTC1859 Lduino.<b class='flag-5'>CPP</b>文件

    (遠程控制)App inventor 編寫安卓app控制 ESP8266

    App inventor 編寫安卓app控制 ESP8266第一 下載ESP8266示例(arduino ide 編程開發(fā))第二 修改demo例程第三 app inventor 開發(fā)原
    發(fā)表于 12-08 17:06 ?28次下載
    (遠程控制)<b class='flag-5'>App</b> inventor <b class='flag-5'>編寫</b>安卓<b class='flag-5'>app</b>控制 ESP8266
    主站蜘蛛池模板: 蜜柚视频在线观看全集免费观看| 中国bdsmchinesehd| 国产乱码伦人偷精品视频| 一起碰一起噜一起草视频| 日韩欧美中文字幕在线二视频| 教室里的激情电影| 第一福利在线永久视频| 最近在线视频观看2018免费| 武汉美女洗澡| 日本另类xxxx| 免费在线观看的毛片| 茎身铃口调教| 国产交换丝雨巅峰| ass女人下部欣赏| 找老女人泻火对白自拍| 秀婷程仪公欲息肉婷在线观看| 欧美特级特黄AAAAA片| 混乱家庭电影完整版在线看 | 成人永久免费视频| 中国农村妇女真实BBWBBWBBW| 亚洲刺激视频| 丝袜足控免费网站xx91| 青苹果乐园在线观看电视剧| 麻豆啊传媒app黄版破解免费| 国内精品七七久久影院| 国产成人在线观看网站| 超大号黑吊magnet| 97视频在线观看免费视频| 在线黑人抽搐潮喷| 一本道无码字幕在线看| 亚洲精品无码不卡在线播放he| 午夜福利电影| 涩涩免费视频软件| 日本人HD18HD18| 日本 稀土矿| 日本男女动态图| 热热久久超碰精品中文字幕| 青草国产在线视频免费| 欧美特级特黄a大片免费| 欧美A级肉欲大片XXX| 欧美eee114|