中国总决赛
全球总决赛
学习进度
完成
省赛
能力分类
主要子系统
能力模型
OpenHarmony编译构建中的产品、平台、子系统、部件、模块等基本概念

编译构建


概述

OpenHarmony编译子系统是以GN和Ninja构建为基座对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能:
  • 部件最小粒度拼装产品和独立编译。
  • 支持轻量、小型、标准三种系统的解决方案级版本构建,以及用于支撑应用开发者使用IDE开发的SDK开发套件的构建。
  • 支持芯片解决方案厂商的灵活定制和独立编译
 

基本概念

  • 平台:开发板和内核的组合,不同平台支持的子系统和部件不同。
  • 产品:产品是包含一系列部件的集合,编译后产品的镜像包可以运行在不同的开发板上。
  • 子系统:OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层(详见OpenHarmony技术架构)。系统功能按照“系统 > 子系统 > 部件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或部件。子系统是一个逻辑概念,它具体由对应的部件构成。
  • 部件:对子系统的进一步拆分,可复用的软件单元,它包含源码、配置文件、资源文件和编译脚本;能独立构建,以二进制方式集成,具备独立验证能力的二进制单元。需要注意的是下文中的芯片解决方案本质是一种特殊的部件。
  • 模块:模块就是编译子系统的一个编译目标,部件也可以是编译目标。
  • 特性:特性是部件用于体现不同产品之间的差异。
  • GN:Generate Ninja的缩写,用于产生Ninja文件。
  • Ninja:Ninja是一个专注于速度的小型构建系统。
  • hb:OpenHarmony的命令行工具,用来执行编译命令。
 

图1 产品、子系统、部件和模块间关系

notion image
图1体现了编译子系统的各部分关系,主要体现为:
  • 子系统是某个路径下所有部件的集合,一个部件只能属于一个子系统
  • 部件是模块的集合,一个模块只能归属于一个部件
  • 通过产品配置文件配置一个产品包含的部件列表,部件不同的产品配置可以复用。
  • 部件可以在不同的产品中实现有差异,通过变体或者特性feature实现。
  • 模块就是编译子系统的一个编译目标,部件也可以是编译目标。
 

编译构建流程

编译构建可以编译产品、部件和模块,但是不能编译子系统。
notion image
 

OpenHarmony执行编译命令的命令行工具——hb方式(考点)

  1. hb set: 设置要编译的产品。
  1. hb env: 查看当前设置信息。
  1. hb build: 编译产品、开发板、部件、模块或芯片解决方案。
  1. hb clean: 清除out目录对应产品的编译产物,仅保留args.gn、build.log。
  1. hb help: 主要用于获取帮助信息和相关标记的说明。

例题


26.[单选题]
OpenHarmony设备开发,编译固件使用哪个指令?
A:hb help
B:hb set
C:hb clean
D:hb build
正确答案:D
答案解析:“hb build”指令通常用于构建或编译项目的固件。
“hb help 标记”主要用于获取帮助信息和相关标记的说明。
“hb set”一般用于设置相关的配置参数。
“hb clean”常用于清理之前的编译产物或临时文件。
6.[多选题]
下面关于GN和Ninja说法正确的是
A:Ninja是一个专注于速度的小型构建系统
B: ninja可以通过其他高级的编译系统生产其输入文件
C: GN是一个生成Ninja构建文件的元构建系统,根据xxx.gn配置文件来生成相应的xxx.ninja文件
D:GN是Generate Ninja的缩写,用于产生Ninja文件
正确答案:ABCD
答案解析:暂无
Loading...
Koreyoshi
Koreyoshi
一个无可救药的乐观主义者
Latest posts
软件测试:集成测试
2025-3-25
软件测试:控制流测试
2025-3-25
软件测试:系统测试
2025-3-25
软件测试:数据流测试
2025-3-25
软件测试:测试驱动开发
2025-3-25
软件工程:面向对象的概念和记号
2025-3-24
Announcement
🎉写给自己的2025心愿🎉
保研
国奖
完善博客
学一门乐器
发表一篇论文
拍摄人生照片
去3个城市旅游
专业课知识视频
拍摄毕业季视频
----- 2025 ------
👏希望我们一起变好👏