目录结构
/build # 编译构建主目录
├── __pycache__
├── build_scripts/ # 编译相关的python脚本
├── common/
├── config/ # 编译相关的配置项
├── core
│ ├── gn/ # 编译入口BUILD.gn配置
└── build_scripts/
├── docs
gn_helpers.py*
lite/ # hb和preloader入口
misc/
├── ohos # OpenHarmony编译打包流程配置
│ ├── kits # kits编译打包模板和处理流程
│ ├── ndk # ndk模板和处理流程
│ ├── notice # notice模板和处理流程
│ ├── packages # 版本打包模板和处理流程
│ ├── sa_profile # sa模板和处理流程
│ ├── sdk # sdk模板和处理流程,包括sdk中包含的模块配置
│ └── testfwk # 测试相关的处理
├── ohos.gni* # 汇总了常用的gni文件,方便各个模块一次性import
├── ohos_system.prop
├── ohos_var.gni*
├── prebuilts_download.sh*
├── print_python_deps.py*
├── scripts/
├── subsystem_config.json
├── subsystem_config_example.json
├── templates/ # c/c++编译模板定义
├── test.gni*
├── toolchain # 编译工具链配置
├── tools # 常用工具
├── version.gni
├── zip.py*
编译命令
首先,在源码根目录下执行prebuilts脚本进行预编译,安装编译器及二进制工具。
bash build/prebuilts_download.sh
接着,使用命令行方式或hb方式执行编译命令。
1.命令行方式
- 代码根目录下执行全量版本的编译命令:
- Release版本 :
./build.sh --product-name {product_name}
Debug版本 :
./build.sh --product-name {product_name} --gn-args is_debug=true
注意: Debug全版本因镜像大小限制,全量编译可能无法烧录,建议单模块编译Debug二进制。使用如下命令单独编译模块:
./build.sh --product-name {product_name} --gn-args is_debug=true --build-target {target_name}
- {product_name}为当前版本支持的平台。比如:hispark_taurus_standard等。
- 编译完成后,结果镜像保存在 out/{device_name}/packages/phone/images/ 目录下。
- 编译命令支持选项:./build.sh
-h, --help # 显示帮助信息并退出 --source-root-dir=SOURCE_ROOT_DIR # 指定路径 --product-name=PRODUCT_NAME # 指定产品名 --device-name=DEVICE_NAME # 指定装置名称 --target-cpu=TARGET_CPU # 指定CPU --target-os=TARGET_OS # 指定操作系统 -T BUILD_TARGET, --build-target=BUILD_TARGET # 指定编译目标,可以指定多个 --gn-args=GN_ARGS # GN参数,支持指定多个 --ninja-args=NINJA_ARGS # Ninja参数,支持指定多个 -v, --verbose # 生成时显示所有命令行 --keep-ninja-going # 让Ninja持续到1000000个工作失败 --jobs=JOBS --export-para=EXPORT_PARA --build-only-gn # 只做GN解析,不运行Ninja --ccache # 可选 如果使用ccache,需要本地安装ccache --fast-rebuild # 快速重建,默认值为False --log-level=LOG_LEVEL # 指定编译期间的日志级别','三个级别可选:debug, info and error,default='info' --device-type=DEVICE_TYPE # 指定设备类型,默认值为'default' --build-variant=BUILD_VARIANT # 指定设备操作模式,默认值为'user'
2.hb方式
hb是OpenHarmony的命令行工具,用来执行编译命令。以下对hb的常用命令进行说明。
hb set
设置要编译的产品
hb set -h usage: hb set [-h] [-root [ROOT_PATH]] [-p] optional arguments: -h, --help show this help message and exit -root [ROOT_PATH], --root_path [ROOT_PATH] Set OHOS root path -p, --product Set OHOS board and kernel
hb build
编译产品、部件、模块或芯片解决方案。
hb build -h usage: hb build [-h] [-b BUILD_TYPE] [-c COMPILER] [-t [TEST [TEST ...]]] [-cpu TARGET_CPU] [--dmverity] [--tee] [-p PRODUCT] [-f] [-n] [-T [TARGET [TARGET ...]]] [-v] [-shs] [--patch] [--compact-mode] [--gn-args GN_ARGS] [--keep-ninja-going] [--build-only-gn] [--log-level LOG_LEVEL] [--fast-rebuild] [--device-type DEVICE_TYPE] [--build-variant BUILD_VARIANT] [component [component ...]] positional arguments: component name of the component, mini/small only optional arguments: -h, --help show this help message and exit -b BUILD_TYPE, --build_type BUILD_TYPE release or debug version, mini/small only -c COMPILER, --compiler COMPILER specify compiler, mini/small only -t [TEST [TEST ...]], --test [TEST [TEST ...]] compile test suit -cpu TARGET_CPU, --target-cpu TARGET_CPU select cpu --dmverity enable dmverity --tee Enable tee -p PRODUCT, --product PRODUCT build a specified product with {product_name}@{company} -f, --full full code compilation -n, --ndk compile ndk -T [TARGET [TARGET ...]], --target [TARGET [TARGET ...]] compile single target -v, --verbose show all command lines while building -shs, --sign_haps_by_server sign haps by server --patch apply product patch before compiling --compact-mode compatible with standard build system set to false if we use build.sh as build entrance --gn-args GN_ARGS specifies gn build arguments, eg: --gn-args="foo="bar" enable=true blah=7" --keep-ninja-going keeps ninja going until 1000000 jobs fail --build-only-gn only do gn parse, do not run ninja --log-level LOG_LEVEL specifies the log level during compilationyou can select three levels: debug, info and error --fast-rebuild it will skip prepare, preloader, gn_gen steps so we can enable it only when there is no change for gn related script --device-type DEVICE_TYPE specifies device type --build-variant BUILD_VARIANT specifies device operating mode
总结
以上的内容主要简单介绍了《OpenHarmony之编译构建使用指导》的教程
要想成为一名鸿蒙高级开发,以上知识点是必须要掌握的,除此之外,还需要掌握一些鸿蒙应用开发相关的一些技术,需要我们共同去探索。
为了节省大家一些查找的时间,这边联合几位行业大佬,为大家准备了一份《Open Harmony4.0&Next》的学习导图,从入门到进阶再到南北向开发实战的一整套完整体系,想要学习了解更多鸿蒙开发的相关知识可以借鉴:
除了以上的知识内容,我还为大家整理了一份《鸿蒙 (Harmony OS)开发学习手册》都是整理成PDF文档方式,分享给大家参考学习:《做鸿蒙应用开发到底学习些啥?》
《鸿蒙 (Harmony OS)开发学习手册》
一、入门必看
1. 应用开发导读(ArkTS)
2. 应用开发导读(Java)
3.......
二、HarmonyOS 概念
1. 系统定义
2. 技术架构
3. 技术特性
4. 系统安全
5......
三、如何快速入门?《鸿蒙基础入门开发宝典!》
1. 基本概念
2. 构建第一个ArkTS应用
3. 构建第一个JS应用
4. ……
四、开发基础知识
1. 应用基础知识
2. 配置文件
3. 应用数据管理
4. 应用安全管理
5. 应用隐私保护
6. 三方应用调用管控机制
7. 资源分类与访问
8. 学习ArkTS语言
9. ……
五、基于ArkTS 开发
1. Ability开发
2. UI开发
3. 公共事件与通知
4. 窗口管理
5. 媒体
6. 安全
7. 网络与链接
8. 电话服务
9. 数据管理
10. 后台任务(Background Task)管理
11. 设备管理
12. 设备使用信息统计
13. DFX
14. 国际化开发
15. 折叠屏系列
16. ……
更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙开发学习指南》