指定编译模式
HarmonyOS Next DevEco Studio 使用指南:灵活定制编译选项
HarmonyOS Next 开发中,通过 DevEco Studio 可灵活指定及定制编译模式。文章详解了界面与命令行设置方法,定义了工程级与模块级的 build-profile.json5 配置结构,阐述了编译选项的继承覆写规则及优先级,并通过 entry 模块示例展示了 debug 与 release 模式的差异化构建实践,帮助开发者优化打包流程与产物控制。

HarmonyOS Next 开发中,通过 DevEco Studio 可灵活指定及定制编译模式。文章详解了界面与命令行设置方法,定义了工程级与模块级的 build-profile.json5 配置结构,阐述了编译选项的继承覆写规则及优先级,并通过 entry 模块示例展示了 debug 与 release 模式的差异化构建实践,帮助开发者优化打包流程与产物控制。

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

内置三个选项:,debug,release。
如果在 build-profile.json5 文件中,自定义了其他编译模式,Build Mode 配置界面会提供对应选项。
说明
hvigorw --mode module -p product=default -p module=entry@default -p buildMode=release assembleHap
hvigorw --mode module -p product=default -p module=entry@default -p debuggable=false assembleHap
当未指定编译模式时,构建 APP 包,默认 release 模式;构建 HAP/HSP/HAR 包时,默认 debug 模式。
定制编译模式
Hvigor 支持定制编译模式,采用 buildOption 字段声明编译选项,并通过 buildModeBinder 来绑定 target、buildOption 以及 buildMode 三者之间的组合关系。
工程级 build-profile.json5 文件:
| 字段 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| buildModeSet | array | 否 | 构建模式合集,可配置多个。 |
| name | string | 是 | 构建模式名称。内置三种类型,此三项无需用户显性配置:debug(开发、调试推荐选项)、release(打包、发布推荐选项)、test(运行 ohosTest 测试套件推荐选项)。项目中全局唯一,不区分大小写;仅允许在工程级 build-profile.json5 中声明、定义;相同的 buildMode 会被覆盖,按照配置顺序,后者覆盖前者;三种模式均支持自定义。 |
| buildOption | object | 否 | 构建模式使用的具体配置信息 |
| products | array | 否 | 产品品类,可配置多个。 |
| buildOption (product) | 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 | object | 否 | 构建模式使用的具体配置信息,优先级比 buildOptionSet 更高。 |
优先级:命令行配置 > targets 配置 > buildOptionSet 配置 > buildOption 配置 > products 配置 > buildModeSet 配置

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

{
"app": {
"signingConfigs": [],
"products": [
{
"name": "default",
"signingConfig": "default",
"compatibleSdkVersion": "5.0.2(14)",
"runtimeOS": "HarmonyOS",
"buildOption": {
"strictMode": {
"caseSensitiveCheck": true,
"useNormalizedOHMUrl": true
}
}
}
],
"buildModeSet": [
{ "name": "debug", },
{ "name": "release", }
]
},
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default",
"applyToProducts": [ "default" ]
}
]
}
]
}
{
"apiType": "stageMode",
"buildOption": {},
"buildOptionSet": [
{
"name": "release",
"arkOptions": {
"obfuscation": {
"ruleOptions": {
"enable": true,
"files": [ "./obfuscation-rules.txt" ]
}
}
}
},
{
"name": "debug",
"debuggable": true,
"arkOptions": {
"obfuscation": {
"ruleOptions": {
"enable": false
}
}
}
}
],
"buildModeBinder": [
{
"buildModeName": "release",
"mappings": [
{
"buildOptionName": "release",
"targetName": "default"
}
]
},
{
"buildModeName": "debug",
"mappings": [
{
"buildOptionName": "debug",
"targetName": "default"
}
]
}
],
"targets": [
{
"name": "default",
},
{
"name": "ohosTest",
}
]
}
示例 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
编译产物示例如下:

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


微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online