title: OpenHarmony南向之编译构建框架
categories:
- OpenHarmony
tags:
- Ninja
- GN
author: shell
cover: /img/oh/build_framework_ZN.png
date: 2024-01-03 21:05:38
概述
OpenHarmony编译子系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能:
-
以部件为最小粒度拼装产品和独立编译。
-
支持轻量、小型、标准三种系统的解决方案级版本构建,以及用于支撑应用开发者使用IDE开发的SDK开发套件的构建。
-
支持芯片解决方案厂商的灵活定制和独立编译。
编译子系统通过配置来实现编译和打包,该子系统主要包括:模块、部件、子系统、产品。
编译子系统的各部分关系,主要体现为:
-
子系统是某个路径下所有部件的集合,一个部件只能属于一个子系统。
-
部件是模块的集合,一个模块只能归属于一个部件。
-
通过产品配置文件配置一个产品包含的部件列表,部件不同的产品配置可以复用。
-
部件可以在不同的产品中实现有差异,通过变体或者特性feature实现。
-
模块就是编译子系统的一个编译目标,部件也可以是编译目标。
系统架构
编译构建子系统架构
目录结构:
build├── build_scripts # 编译相关的python脚本├── common├── config # 编译相关的配置项├── core│ ├── build_scripts│ └── gn # 编译入口BUILD.gn配置├── docs├── gn_helpers.py├── lite # hb和preloader入口 ├── loader├── misc├── ohos├── ohos.gni # 汇总了常用的gni文件,方便各个模块一次性import├── ohos_system.prop├── ohos_var.gni├── prebuilts_download_config.json├── prebuilts_download.py├── prebuilts_download.sh├── print_python_deps.py├── __pycache__├── scripts├── subsystem_config_example.json├── subsystem_config.json├── templates # c/c++编译模板定义├── test.gni├── toolchain # 编译工具链配置├── tools # 常用工具├── version.gni└── zip.py
编译构建流程
编译构建可以编译产品、部件和模块,但是不能编译子系统。编译构建流程如下图所示,主要分设置和编译两步:
-
hb set
: 设置要编译的产品。 -
hb build
: 编译产品、开发板或者部件。编译主要过程如下: -
读取编译配置:根据产品选择的开发板,读取开发板config.gni文件内容,主要包括编译工具链、编译链接命令和选项等。
-
调用GN配置构建目标:调用gn gen命令,读取产品配置生成产品解决方案out目录和Ninja文件。
-
调用Ninja:调用ninja -C out/board/product启动编译。
-
系统镜像打包:将部件编译产物打包,设置文件属性和权限,制作文件系统镜像。
编译构建使用
环境配置
主要是安装编译所需的软件包,使用以下脚本一键安装就行:
./build/build_scripts/env_setup.sh
如果出现 hb
安装不成功,可以重装 hb
,相关命令:
#安装python3 -m pip install --user build/hb#将路径 export PATH=~/.local/bin:$PATH 更新到环境变量 ~/.bashrc#卸载python3 -m pip uninstall ohos-build
编译构建
预编译
在源码根目录下执行 prebuilts
脚本进行预编译,安装编译器及二进制工具。
bash build/prebuilts_download.sh
执行编译命令
使用命令行方式或hb方式执行编译命令
命令行方式
全量版本的编译
Release版本 :
./build.sh --product-name {product_name}
Debug版本 :
./build.sh --product-name {product_name} --gn-args is_debug=true --build-target {target_name}
hb方式
hb set
设置要编译的产品
-
hb set
后无参数,进入默认设置流程 -
hb set -root dir
可直接设置代码根目录 -
hb set -p
设置要编译的产品
hb env
查看当前设置信息
hb build
编译产品、部件、模块或芯片解决方案。
-
hb build
后无参数,会按照设置好的代码路径、产品进行编译,编译选项使用与之前保持一致。-f 选项将删除当前产品所有编译产品,等同于hb clean + hb build. -
hb build {component_name}
:基于设置好的产品对应的单板、内核,单独编译部件(e.g.:hb build kv_store)。 -
hb build -p ipcamera@hisilicon
:免set编译产品,该命令可以跳过set步骤,直接编译产品。
在 device/board/device_company
下单独执行 hb build
会进入内核选择界面,选择完成后会根据当前路径的单板、选择的内核编译出仅包含内核、驱动的镜像。
hb clean
清除 out 目录对应产品的编译产物,仅保留args.gn、build.log。清除指定路径可输入路径参数:hb clean out/board/product
,默认将清除当前 hb set
的产品对应 out 路径。
注:更多选项可使用 -h
查看
配置规则
为了实现芯片解决方案、产品解决方案与OpenHarmony是解耦的、可插拔的,子系统、产品、部件、芯片解决方案、模块、特性和系统能力需遵循一定的规则。
具体配置规则及怎么新增不同配置见如下链接,这里就不细说了:
-
产品配置规则
-
子系统配置规则
-
部件配置规则
-
模块配置规则
-
Rust模块配置规则
-
芯片解决方案配置规则
-
特性配置规则
-
系统能力配置规则
为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
《鸿蒙开发学习手册》:
如何快速入门:https://qr21.cn/FV7h05
- 基本概念
- 构建第一个ArkTS应用
- ……
开发基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私保护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ……
基于ArkTS 开发:https://qr21.cn/FV7h05
- Ability开发
- UI开发
- 公共事件与通知
- 窗口管理
- 媒体
- 安全
- 网络与链接
- 电话服务
- 数据管理
- 后台任务(Background Task)管理
- 设备管理
- 设备使用信息统计
- DFX
- 国际化开发
- 折叠屏系列
- ……
鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH
鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向