开发中,调试和正式发布版本的编译行为通常不同(如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 assembleApp4.2 DevEco Studio界面
Build Mode下拉选择对应配置选项(debug/release)
点击Build → Build Hap(s)/APP(s) → Build APP(s)
五、编译产物
| 构建模式 | 产物特征 |
|---|---|
| debug | 包含调试信息,可进行调试,不开启混淆 |
| release | 去掉调试信息,减小体积,开启混淆保护代码 |