目录结构
/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)开发学习手册》
一、入门必看
-
应用开发导读(ArkTS)
-
应用开发导读(Java)
3.......
二、HarmonyOS 概念
-
系统定义
-
技术架构
-
技术特性
-
系统安全
5......
三、如何快速入门?《鸿蒙基础入门开发宝典!》
-
基本概念
-
构建第一个ArkTS应用
-
构建第一个JS应用
-
......
四、开发基础知识
-
应用基础知识
-
配置文件
-
应用数据管理
-
应用安全管理
-
应用隐私保护
-
三方应用调用管控机制
-
资源分类与访问
-
学习ArkTS语言
-
......
五、基于ArkTS 开发
-
Ability开发
-
UI开发
-
公共事件与通知
-
窗口管理
-
媒体
-
安全
-
网络与链接
-
电话服务
-
数据管理
-
后台任务(Background Task)管理
-
设备管理
-
设备使用信息统计
-
DFX
-
国际化开发
-
折叠屏系列
-
......
更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙开发学习指南》
-