1. 指定编译模式
1.1. 界面设置
DevEco Studio 支持界面配置 Build Mode 配置选项,点击右上角图标选择编译模式:

内置三个选项:,debug,release。
如果在 build-profile.json5 文件中,自定义了其他编译模式,Build Mode 配置界面会提供对应选项。
- :默认选项,选择此项,构建 APP 包,使用 release 编译模式;构建 HAP/HSP/HAR 包,使用 debug 编译模式。
- debug:构建 APP/HAP/HSP/HAR 包,均使用 debug 编译模式,buildOption 中的 debuggable 默认为 true。此时的构建产物默认包含大量的调试信息,例如变量名、函数名、行号等,可以直接进行调试。这些调试信息会增加程序的体积,可能导致程序的运行速度降低。
- release:构建 APP/HAP/HSP/HAR 包,均使用 release 编译模式,buildOption 中的 debuggable 默认为 false。此时的构建产物会去掉大量的调试信息,只包含应用程序必要的代码和数据,以减小程序的体积,并且会对编译的字节码进行优化,提高程序的运行速度。
说明
- DevEco Studio 界面设置或命令行中指定的 buildMode 构建模式,只代表当前选择的 buildMode 的名称,最终编译产物是否是 Debug 应用取决于 buildOption 配置中的 debuggable 字段,构建模式使用的具体 buildOption 配置信息。
- LiteWearable 设备使用标准 JS 运行时,因此对应的应用开发在 release 模式下的构建产物中包含 JS 源码,请注意代码资产保护。
1.2. 命令行设置
- 使用命令行参数
-p buildMode 指定编译模式,比如指定 "release" 编译模式,构建 entry 模块的 HAP 包:
hvigorw --mode module -p product=default -p module=entry@default -p buildMode=release assembleHap
- 使用命令行参数
-p debuggable=true 指定 "debug" 编译模式,-p debuggable=false 指定 "release" 编译模式,比如指定 "release" 编译模式,构建 entry 模块的 HAP 包:
hvigorw --mode module -p product=default -p module=entry@default -p debuggable=false assembleHap
当未指定编译模式时,构建 APP 包,默认 release 模式;构建 HAP/HSP/HAR 包时,默认 debug 模式。
2. 定制编译模式
Hvigor 支持定制编译模式,采用 buildOption 字段声明编译选项,并通过 buildModeBinder 来绑定 target、buildOption 以及 buildMode 三者之间的组合关系。
2.1. 定义编译选项
工程级 build-profile.json5 文件:
| 字段 | 类型 | 是否必填 | 说明 |
|---|
| buildModeSet | array | 否 | 构建模式合集,可配置多个。 |
| name | string | 是 | 构建模式名称。内置三种类型,此三项无需用户显性配置:debug(开发、调试推荐选项)、release(打包、发布推荐选项)、test(运行 ohosTest 测试套件推荐选项)。项目中全局唯一,不区分大小写;仅允许在工程级 build-profile.json5 中声明、定义;相同的 buildMode 会被覆盖,按照配置顺序,后者覆盖前者;三种模式均支持自定义。 |
| buildOption | object | 否 | 构建模式使用的具体配置信息。 |
| products | array | 否 | 产品品类,可配置多个。 |
| buildOption (products) | object | 否 | 产品的编译构建配置。product 的 buildOption 会对 buildMode 的 buildOption 继承覆写,即相同配置项 product 的优先级更高。 |
模块级 build-profile.json5 文件:
| 字段 | 类型 | 是否必填 | 说明 |
|---|
| buildOption | object | 否 | 构建模式使用的具体配置信息,其中仅支持配置 resOptions, externalNativeOptions, sourceOption, nativeLib, napiLibFilterOption 和 arkOptions 字段。 |
| buildOptionSet | array | 否 | buildOption 的集合,定义可用的底层配置选项集。 |
| name | string | 是 | buildOption 的名称。当前模块级 build-profile.json5 中已有顶层独立的 buildOption 配置,buildOptionSet 优先级比 buildOption 更高。同模块中唯一,不区分大小写;相同的名称会被覆盖,按照配置顺序,后者覆盖前者;内置三种:default、debug、release。 |
| copyFrom | string | 否 | 配置已定义的 buildOption 的 name,表示从本模块已有的 buildOption 复制配置,然后再覆写。仅限在同一模块的 build-profile.json5 中复制;目标 buildOption 不存在时,构建告警,回落为从内置的 default 选项中复制。 |
| buildModeBinder | array | 否 | 为某一 buildMode 建立 target 与 buildOption 之间的映射关系。 |
| buildModeName | string | 是 | 指定待建立映射的 buildMode。模块级中无法定义 buildMode,此处名称须在工程级的 buildModeSet 中选取。对于系统内置的三种 buildMode(debug / release / test), Hvigor 会分配默认绑定:debug mode 优先分配 debug buildOption,测试包(ohosTest)分配 default buildOption;release mode 优先分配 release buildOption,测试包(ohosTest)分配 default buildOption;test mode 测试包(ohosTest)分配 default buildOption,主包分配 debug buildOption。 |
| mappings | array | 否 | 绑定 target 使用的 buildOption。 |
| targetName | string | 是 | 指定待绑定的 target。仅在本模块选择。 |
| buildOptionName | string | 是 | 指定待绑定的 buildOption。仅在本模块选择。 |
| targets | config | 否 | 构建模式使用的具体配置信息,优先级比 buildOptionSet 更高。 |
2.2. 合并编译选项规则
- 工程级默认有三种 buildMode:debug,release,test。
- 模块级默认有三种 buildOption:default,debug,release。
- 当 buildModeBinder 未定义 target 与 buildOption 的匹配关系时:
- release 构建模式:为 target 匹配 release option,但 ohosTest 分配 default option;
- debug 构建模式:为 target 匹配 debug option,但 ohosTest 分配 default option;
- test 构建模式:为 target 匹配 debug option,ohosTest 分配 default option;
- 自定义构建模式:所有 target 均匹配 default option。
- 工程级 build-profile.json5 中 product 的 buildOption 会对 buildMode 的 buildOption 继承覆写,即相同配置项 product 的优先级更高。
- 模块级别的 buildOption 作为一个公共配置会被继承到 buildOptionSet 中的每一个 buildOption 中,如有 copyFrom 字段,也是先继承再进行复制,即 buildOptionSet 优先级比 buildOption 更高。
- 根据模块级中的 buildModeBinder 字段可以找到 target 对应的唯一 buildOption;target 中的 buildOption 优先级更高,采用继承覆盖策略与对应 buildOption 进行合并。
- 命令行选项为最高优先级,在已整合的配置项基础上,采用覆写的方式,定点修订。
2.3. 编译选项继承覆写关系
优先级:命令行配置 > targets 配置 > buildOptionSet 配置 > buildOption 配置 > products 配置 > buildModeSet 配置

3. 实践说明
应用正式对外布版本前,需要对应用进行代码调试。调试和正式发布版本,两者编译行为可能不同。此时,可以利用 buildMode 能力,来定制两个版本的编译差异性。
假设其中构建产物均为 default,但编译行为不同:release 模式下使能混淆,debug 模式下使能 debug 调试。
示例工程中包含一个模块 entry,将 entry 模块交付到构建产物 default 中,模块定制两种不同的编译模式 debug、release,将两种构建模式均绑定到构建产物 default 中。工程示例图如下(模块):

3.1. 工程级 build-profile.json5 示例
{
"app": {
"signingConfigs": [],
"products": [
{
"name": "default",
"signingConfig": "default",
"compatibleSdkVersion": "5.0.2(14)",
"runtimeOS": "HarmonyOS",
"buildOption": {
"strictMode": {
"caseSensitiveCheck": true,
"useNormalizedOHMUrl": true
}
}
}
],
"buildModeSet": [
{ "name": "debug" }
3.2. 模块级 build-profile.json5 示例
3.2.1. entry 模块
{
"apiType": "stageMode",
"buildOption": {},
"buildOptionSet": [
{
"name": "release",
"arkOptions": {
"obfuscation": {
"ruleOptions": {
"enable": true,
"files": ["./obfuscation-rules.txt"]
}
}
}
},
{
"name": "debug",
"debuggable": true,
"arkOptions": {
"obfuscation":
3.3. 指定构建模式
3.3.1. 命令行
示例 1:构建 APP 时,构建产物为 default,指定构建模式为 debug,可执行如下命令:
hvigorw --mode project -p product=default -p buildMode=debug assembleApp
编译产物示例如下:

示例 2:构建 APP 时,构建产物为 default,指定构建模式为 release,可执行如下命令:
hvigorw --mode project -p product=default -p buildMode=release assembleApp
编译产物示例如下:

3.3.2. DevEco Studio 界面
在 DevEco Studio 界面进行可视化配置,Build Mode 下拉选择对应配置选项 debug 后,点击 Build -> Build Hap(s)/APP(s) -> Build APP(s),构建编译模式为 debug,构建产物为 default 的 APP 包。
