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.后续的文章难度会有所增加,欢迎大家留言反馈。