鸿蒙 构建模式定制(二)
·

开发中,调试和正式发布版本的编译行为通常不同(如debug开启调试信息、release开启混淆)。通过利用buildMode能力定制两种版本的编译差异性。
一、说明
示例工程中包含一个模块entry,交付到构建产物default中,模块定制两种不同的编译模式:
| 构建模式 | 编译行为 |
|---|---|
| debug | 使能debug调试,不开启混淆 |
| release | 使能混淆,对代码进行保护 |
二、工程级build-profile.json5配置
{
"app": {
"signingConfigs": [],
"products": [
{
"name": "default",
"signingConfig": "default",
"compatibleSdkVersion": "26.0.0",
"runtimeOS": "HarmonyOS",
"buildOption": {
"strictMode": {
"caseSensitiveCheck": true,
"useNormalizedOHMUrl": true
}
}
}
],
"buildModeSet": [
{ "name": "debug" },
{ "name": "release" }
]
},
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{ "name": "default", "applyToProducts": ["default"] }
]
}
]
}
关键配置:
| 配置项 | 说明 |
|---|---|
products |
定义产品default |
buildModeSet |
定义debug和release两种构建模式 |
modules.targets |
entry模块绑定到default product |
三、模块级build-profile.json5配置
{
"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" }
]
}
关键配置:
| 配置项 | 说明 |
|---|---|
buildOptionSet |
定义release(开启混淆)和debug(debuggable:true,不混淆) |
buildModeBinder |
将release模式绑定release option,debug模式绑定debug option |
四、指定构建模式
4.1 命令行方式
构建debug模式:
hvigorw --mode project -p product=default -p buildMode=debug assembleApp
构建release模式:
hvigorw --mode project -p product=default -p buildMode=release assembleApp
4.2 DevEco Studio界面
-
Build Mode下拉选择对应配置选项(debug/release)
-
点击 Build → Build Hap(s)/APP(s) → Build APP(s)
五、编译产物
| 构建模式 | 产物特征 |
|---|---|
| debug | 包含调试信息,可进行调试,不开启混淆 |
| release | 去掉调试信息,减小体积,开启混淆保护代码 |
更多推荐




所有评论(0)