首页 > 其他分享 >Openharmony上如何运行HelloWorld

Openharmony上如何运行HelloWorld

时间:2023-04-23 11:40:53浏览次数:33  
标签:Openharmony account HelloWorld 编译 HelloOpenHarmony base os 运行

Openharmony的第一个应用--Hello world

​ 大家都明白的Hello World的C++代码

// FirstApp.cpp
#include <iostream>
int main(int argc, char *argv[])
{
    std::cout << "Hello Openharmony!" << std::endl;
    return 0;
}

问题来了,接下来如何将FirstApp.cpp加入Openharmony进行编译,然后运行呢?此过程涉及Openharmony的子系统,编译构建子系统,关于编译构建的整体复杂的流程不表,按照能代码能跑的原则,如下流程一步一步操作运行起来后,后续会在章节中详细解释为何如此。

开发环境介绍

​ 代码版本:Openharmon V3.1-Release

​ 开发板:rk3568

1.首先将FirstApp.cpp文件放至Openharmon V3.1-Release的/base/account目录下。

2.创建/base/account/BUILD.gn文件,内容如下

# HelloOpenHarmony为可执行程序名称
# ohos_executable为Openharmony编译可执行程序的模板
ohos_executable("HelloOpenHarmony") {
  sources = [
    "FirstApp.cpp",
  ]
}

3.修改/base/account/bundle.json如下

在sub_component中添加"//base/account/os_account:HelloOpenHarmony"

"sub_component": [
  "//base/account/os_account/services:services_target",
  "//base/account/os_account/services/accountmgr/src/appaccount:app_account_service_core",
  "//base/account/os_account/frameworks/appaccount/native:app_account_innerkits",
  "//base/account/os_account/frameworks/osaccount/core:os_account_core",
  "//base/account/os_account/frameworks/common:common_target",
  "//base/account/os_account/frameworks/osaccount/native:os_account_innerkits",
  "//base/account/os_account/interfaces/kits/napi/appaccount:appaccount",
  "//base/account/os_account/interfaces/kits/napi/distributedaccount:distributedaccount",
  "//base/account/os_account/interfaces/kits/napi/osaccount:osaccount",
  "//base/account/os_account/sa_profile:account_sa_profile",
  "//base/account/os_account/tools:os_account_tools",
  "//base/account/os_account:HelloOpenHarmony"
],

4.编译

# 此为完整编译,也可以选择子组件进行单独编译,加上-T HelloOpenHarmony指定模块进行编译也可以生成HelloOpenHarmony的可执行程序
./build.sh --product-name rk3568
./build.sh --product-name rk3568 -T HelloOpenHarmony

5.运行

​ 编译成功后,在/out/rk3568/common/common/目录下可以找到HelloOpenHarmony的可执行程序,此时将HelloOpenHarmony推送至开发板的/system/bin目录下,并通过chmod修改其可执行权限。结果如下:

# 通过hdc_std推送至开发板的过程较易,略过(如有疑问,欢迎留言)
# 只展示在hdc_std shell进入开发板之后的操作与结果
# chmod 777 /system/bin/HelloOpenHarmony
# ls -ali /system/bin/HelloOpenHarmony
2297 -rwxrwxrwx 1 root root 25300 2020-01-15 09:29 /system/bin/HelloOpenHarmony
# ./system/bin/HelloOpenHarmony
Hello Openharmony!

此时,运行在Openharmony上的第一个可执行程序就完成了。

Openharmony程序编译构建过程简单描述

1.关于bundle.json

​ 一个或多个bundle.json组成Openharmony的某个子系统,此例中将HelloOpenHarmony做个一个组件添加至账号子系统(account)中参与编译。

2.关于BUILD.gn

​ BUILD.gn可以看做一个组件的makefile文件。

3.综合下来,HelloOpenHarmony编译构建过程,现在可以理解为首先当./build.sh --product-name rk3568命令执行时,会找到子系统的bundle.json,然后bundle.json根据sub_component的组件列表,找到组件的BUILD.gn,然后交叉编译工具对BUILD.gn定义的模板(ohos_executable)进行编译。

4.注意

  • 以上的编译构建过程是建立在Openharmony V3.1以前的版本之上,Openharmony V3.2之后的版本流程略有差别。
  • 以上只是一个简易的描述,详细的编译构建过程,如果想了解更多,会另外开辟章节进行描述。

后续更精彩

1.关于service ability的前世今生

2.Openharmony的分布式软总线

3.后续的文章难度会有所增加,欢迎大家留言反馈。

标签:Openharmony,account,HelloWorld,编译,HelloOpenHarmony,base,os,运行
From: https://blog.51cto.com/u_15304012/6216890

相关文章

  • Openharmony应用NAPI详解--基础篇
    NAPI是什么?​ 简单点理解就是在Openharmony里,实现上层js或ets应用与底层C/C++之间交互的框架。​ Openharmony里的官方解释:NAPI(NativeAPI)组件是一套对外接口基于Node.jsN-API规范开发的原生模块扩展开发框架。还有NAPI适合封装IO、CPU密集型、OS底层等能力并对外暴露JS接口,通过......
  • Openharmony应用NAPI详解--进阶篇1
    NAPI面向C++的异步接口3.C++实现NAPI异步接口需要做到三步同步返回结果给js/ets调用者另起线程完成异步操作通过回调(callback)或Promise将异步操作结果返回4.异步接口//foundation/filemanagement/dfs_service/frameworks/js/napi/src/sendfile_napi.cpp...DECLARE......
  • Openharmony应用NAPI详解--进阶篇2
    NAPI面向C++的异步接口(promise)promise方式的处理方式承接上文,与callback方式不同的是,promise对象由C++侧创建以返回值的方式传递回js/ets侧,promise对象存储异步执行的结果。//foundation/filemanagement/file_api/interfaces/kits/js/src/common/napi/n_async/n_async_work_p......
  • Openharmony的编译构建--基础篇
    一、编译构建简介​ Openharmony的编译构建流程在鸿蒙的开源版本中以V3.1为分界线,流程略有变化。但其中都是ninja与python通过配置文件json,调用不同的交叉工具链来对源码进行编译,然后生成镜像文件。本文首先以OpenharmonyV3.1版本为例讲解下其编译构建的过程,并以实例的方式对如何......
  • Openharmony的编译构建--进阶篇1
    上一篇中说明了OpenharmonyV3.1的编译构建流程,如何在标准系统即L2设备添加一个模块呢,在Openharmony上如何编译与运行HelloWorld此篇中有所提及,此篇对此进行详细的说明。一、标准系统添加一个模块在Openharmony中添加模块可以分以下三种情况,对原有的配置文件时行不同程度的修改......
  • Openharmony的编译构建--进阶篇2
    承接上一篇Openharmony的编译构建--进阶篇1中说明了在OpenharmonyV3.1的如何在标准系统即L2设备一个模块的两种情况,此篇对第三种情况进行说明。四、新建子系统并在该子系统的部件下添加模块1.在模块目录下配置BUILD.gn,根据类型选择对应的模板2.新建包含该模块所属部件的bundle......
  • C# 应用程序管理员运行
    右键项目-添加新项 改变UAC规则的level属性为 requireAdministrator,保存重新生成即可 ......
  • mac m1运行jeecgboot指南
    后端使用m1mac运行x86的docker镜像会有问题,需要更换镜像,并且把最后一个镜像给注释掉,手动启动。同时,需要修改hosts文件,添加记录127.0.0.1jeecg-boot-redis127.0.0.1jeecg-boot-mysqlmysql启动后,把db目录下的sql文件执行一下,然后启动java项目version:'2'ser......
  • 如何在X86_64系统上运行arm架构的docker容器——(异构/不同架构)CPU下的容器启动
    近期使用华为的人工智能集群,其中不仅要求异构加速端需要使用昇腾的硬件,更是要求CPU是arm架构的,因此就导致在本地x86电脑上难以对云端的arm版本的镜像进行软件安装和打包操作,为此我们需要在x86架构的本地CPU上运行arm架构的docker镜像。本文给出两种解决方式,其本质都是一样的,都是使......
  • java 优雅的记录程序运行时长
    importcn.hutool.core.date.StopWatch;importcn.hutool.core.thread.ThreadUtil;StopWatchtest=newStopWatch("test");test.start("task1");ThreadUtil.sleep(1000);test.stop();test.start("task2");ThreadUtil.sleep(3000);......