成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用CPP編寫小型系統APP

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

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

前言

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

一、ability相關介紹

Ability是應用所具備能力的抽象,也是應用程序的重要組成部分。Ability是系統調度應用的最小單元,是能夠完成一個獨立功能的組件。一個應用可以包含一個或多個Ability。其中ability又分為Page類型的和Service類型的,前者是為用戶提供人機交互能力的,后者是提供后臺任務機制的,簡單來講就是Page帶界面,Service不帶界面。這里將重點介紹Page類型的ability。

使用CPP編寫小型系統app-開源基礎軟件社區

使用到的子系統有ability子系統、包管理子系統和圖形ui子系統。ability子系統是管理OpenHarmony應用運行狀態的開發框架;包管理子系統是OpenHarmony為開發者提供的安裝包管理框架;圖形ui子系統提供基礎UI組件和容器類組件。

使用CPP編寫小型系統app-開源基礎軟件社區

二、簡單實現1、ability和abilityslice

 1、ability和abilityslice

abilityslice是單個頁面及其控制邏輯的總和,是Page類型Ability特有的組件,一個Page類型的Ability可以包含多個AbilitySlice,此時,這些頁面提供的業務能力應當是高度相關的。

使用CPP編寫小型系統app-開源基礎軟件社區

2、生命周期

整體流程下來大致有OnStart()、OnAvtive()、OnInactive()、OnBackground()和OnStop()五階段。abilityslice生命周期與ability相似,但是仍要區分。

使用CPP編寫小型系統app-開源基礎軟件社區

3、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
#ifndef HELLO_MAIN_ABILITY_H
#define HELLO_MAIN_ABILITY_H

#include "ability_loader.h"

namespace OHOS {
class MainAbility : public Ability {
protected:
void OnStart(const Want &want) override; //Want結構體,ability的相關信息
/*
* 由于在這里我們只要簡單的展示helloworld標簽,其它函數不需要重載。
*/
// void OnInactive() override;
// void OnActive(const Want &want) override;
// void OnBackground() override;
// void OnStop() override;
};
}

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

namespace OHOS {
REGISTER_AA(MainAbility) //使用REGISTER_AA注冊ability

void MainAbility::OnStart(const Want &want)
{
printf("This is MainAbility OnStart status!\r\n");
SetMainRoute("MainAbilitySlice"); //設置主頁面為MainAbilitySlice,這要與后續的slice名字匹配

Ability::OnStart(want);
}
}

最后編寫slice界面。

//main_ability_slice.h
#ifndef HELLO_ABILITY_SLICE_H
#define HELLO_ABILITY_SLICE_H

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

namespace OHOS {
class MainAbilitySlice : public AbilitySlice { //創建AbilitySlice類 與上面同名
public:
MainAbilitySlice() = default;
virtual ~MainAbilitySlice();

protected:
void OnStart(const Want &want) override;
/*
* 同理
*/
// void OnInactive() override;
// void OnActive(const Want &want) override;
// void OnBackground() override;
// void OnStop() override;
};
}
#endif
//main_ability_slice.cpp
#include "main_ability_slice.h"
const int screen_width = 720;
const int screen_height = 1280;

namespace OHOS {
REGISTER_AS(MainAbilitySlice)

MainAbilitySlice::~MainAbilitySlice()
{
printf("This is ~MainAbilitySlice!\r\n");
}

void MainAbilitySlice::OnStart(const Want& want)
{
AbilitySlice::OnStart(want);
RootView* rootView_ = RootView::GetWindowRootView(); //創建底層界面
rootView_->SetPosition(0, 0, screen_width, screen_height);
rootView_->SetStyle(STYLE_BACKGROUND_COLOR, Color::ColorTo32(Color::Black()));
rootView_->SetFocusable(true);
rootView_->SetInterceptFocus(false);

UILabel* label = new UILabel(); //創建label寫入Hello World
label->SetPosition(0, 0, 720, 64);
label->SetText("Hello World!");
label->SetFont("SourceHanSansSC-Regular.otf", 64);
label->SetStyle(STYLE_TEXT_COLOR, Color::ColorTo32(Color::White()));

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

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

4、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": "hello world app",
"launchType": "standard",
"type": "page",
"visible": true
}
]
}
}

三、hap編譯

1、通過BUILD.gn與系統一并編譯。

使用到編譯鏈中的hap_pack,添加配置 import(“//build/lite/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"
}

2、 通過app_packing_tool單獨編譯

該打包工具在源碼目錄developtools/packing_tool/jar下。
主要參數如下:

命令參數

對應的資源文件

說明

是否可缺省

–mode

-

為“hap”字段,打包生成Hap

–json-path

清單文件config.json

-

–ability-so-path

主功能so文件

-

–out-path

-

生成的Hap包輸出路徑,默認為當前目錄

具體操作:
還是得先將動態庫編譯出來。
然后將動態庫libhello.so和config.json放到一個文件夾里。

./out/
├── config.json
└── libhello.so

最后使用java -jar app_packing_tool.jar 進行打包 如下:

java -jar app_packing_tool.jar |
--mode hap |
--json-path ./config.json |
--ability-out-path ./libhello.so |
--out-path ./hello.hap

四、hap安裝

1、安裝命令bm

由于小型系統不支持使用HDC工具,我們需要使用到bm命令進行安裝程序。

bm set -s disable //取消簽名安裝。
bm install -p system/internal/hello.hap //使用BUILD.gn一起編譯的hap默認會在這個路徑,如果使用工具打包的,視情況填寫路徑。

2、相關參數

# bm
Usage: install hap-path [options]
Description:
--help|-h help menu
--happath|-p location of the hap to install
Usage: uninstall bundle-name [options]
Description:
--help|-h help menu
--bundlename|-n name of the bundle to uninstall
Usage: dump [options]
Option Description:
--help|-h help menu
--list|-l app list
--bundlename|-n dump installed hap's info
--metadatakey|-m dump bundleNames match metaData key
Usage: set [options]
Option Description:
--externalmode|-e status enable externalmode
--debugmode|-d status enable debugmode
--signmode|-s status enable signmode

小型系統的bm指令是標準系統的閹割版。

安裝成功后就可以打開該app,部分小型系統的設備屏幕沒有觸摸功能和鼠標驅動,我們可以使用aa命令來啟動app。

aa start -p com.sample.hello -n MainAbility //包名和ability名都在config.json中定義
# aa
Usage:
aa start -p bundlename -n ability_name
aa stopability -p bundlename -n ability_name
aa terminate -p bundlename
aa dump -p bundlename -n ability_name -e extra_option
aa dump -a

Options:
-h (--help) Show the help information. [eg: aa -h]
-p (--bundlename) Appoint the bundlename name. [eg: -p com.huawei]
-n (--abilityname) Appoint the ability name. [eg: -n MyAbility]
-a (--all) [Unnecessary]dump all ability info. [eg: -a]
-e (--extra) [Unnecessary]extra info when dump. [eg: -e]

Commands:
aa start Start the target ability.
aa stopability Stop the target service ability.
aa terminate Terminate the target app.
aa dump Dump ability

總結

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

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2023-06-28 15:00:02

開源鴻蒙輸入系統架構

2019-09-27 15:11:14

iOS Android 操作系統

2009-04-14 11:01:33

GoogleApp EngineGroovy

2024-09-29 10:56:58

2019-04-03 10:50:09

Javascript區塊鏈技術

2010-05-05 14:01:51

Unix系統

2009-07-10 18:10:18

Jython編寫SerJython

2024-01-22 10:31:09

Kate文檔

2013-04-07 10:00:18

2013-05-14 10:44:19

混合云Windows AzuApp Control

2012-07-09 11:15:22

電子商務

2023-04-03 15:39:31

2023-02-06 16:11:22

代碼研發鴻蒙

2022-06-21 09:26:21

Shell腳本JavaScript

2009-09-16 08:21:16

2023-03-24 14:39:17

鴻蒙系統開發

2023-06-27 15:12:46

C++三方庫移植

2020-10-10 19:14:09

FlutterApp軟件開發

2023-07-10 13:46:58

PythonLlama.cppLLM

2011-07-22 09:17:26

ApacheJava
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人永久免费视频 | 日韩在线播放一区 | www.日韩| av在线免费播放 | 91精品久久久久久久久久 | 日本一区二区电影 | 亚洲欧美一区二区三区情侣bbw | 欧美一区二区三 | 日本一区二区三区四区 | 亚洲精选一区二区 | 日本精品久久久久久久 | 久久精品亚洲欧美日韩久久 | 欧美亚洲一级 | 成人精品国产 | 日本在线视频不卡 | 美女一区二区在线观看 | 日日拍夜夜 | 日韩亚洲视频在线 | 欧美一区二 | 亚洲精品一区二区三区在线观看 | 成人福利在线视频 | 国产一区二区电影 | 一区二区日本 | 国产一区二区三区四 | 国产成人精品一区二区 | 综合色影院| av一区二区三区四区 | 久久久久久免费毛片精品 | 欧美不卡一区二区三区 | 成人av免费在线观看 | 日韩精品一区二区三区视频播放 | 亚洲视频免费一区 | 久久久www成人免费精品 | 99re66在线观看精品热 | 成人二区三区 | 精品欧美一区二区三区久久久 | 高清视频一区 | 久久精品日产第一区二区三区 | 91高清免费| 91xh98hx 在线 国产 | 日本不卡视频 |