通过配置多个targets和products实现多环境编译(如dev、test、uat、prod等)

1. 配置HAP的targets


打开文件entry/build-profile.json5,在targets中添加其他环境的配置:

// entry/build-profile.json5
{
//...
"targets": [
{
"name": "default",
"source": {
"sourceRoots": ["./src/default"]
}
},
{
"name": "dev",
"source": {
"sourceRoots": ["./src/dev"]
}
},
{
"name": "test",
"source": {
"sourceRoots": ["./src/test"]
}
},
{
"name": "uat",
"source": {
"sourceRoots": ["./src/uat"]
}
}
]
}


这里 default 为生成prod,然后在entry/src下依次创建上面sourceRoots中配置的文件夹,如./src/dev就创建entry/src/dev文件夹。

里面可以放自定义配置文件,如entry/src/dev/config.ets要求各个文件夹中的文件名称需要一致,且export出来的变量名需要一致

// entry/src/dev/config.ets
{
export const BASE_URL = '/api'
}


在业务中使用:

import { BASE_URL } from 'entry/config'
console.log(BASE_URL)


2. 配置App中的products


在项目根目录下的build-profile.jsono5中配置productsmodules下的targets:

// /build-profile.json5
{
// ...
"products": [
{
"name": "default",
"signingConfig": "default",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS",
"bundleName": "com.bg7zag.app" // 构建出来的包名
},
{
"name": "dev", // 构建的环境名称
"signingConfig": "dev", // 签名在DevEco中签名,每个环境都生成一个签名,然后这里配置上对应的签名,对应的signingConfigs中的name
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS",
"bundleName": "com.bg7zag.app.dev",
"label": "$string:app_name_dev", // 每个环境包的名称
"icon": "$media:app_icon_dev" // 每个环境包的图标
},
{
"name": "test",
"signingConfig": "test",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS",
"bundleName": "com.bg7zag.app.test",
"label": "$string:app_name_test",
"icon": "$media:app_icon_test"
},
{
"name": "uat",
"signingConfig": "uat",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS",
"bundleName": "com.bg7zag.app.uat",
"label": "$string:app_name_uat",
"icon": "$media:app_icon_uat"
}
],
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default",
"applyToProducts": [
"default",
]
},
{
"name": "dev", // 上面的default为默认,当prod用,这里新增dev
"applyToProducts": [
"dev" // 在products中对应的name
]
},
{
"name": "test",
"applyToProducts": [
"test"
]
},
{
"name": "uat",
"applyToProducts": [
"uat"
]
}
]
}
],
}


这里需要签名完成后才不报错

3. 签名


点击文件->项目结构->project->Signing Config中点击 + ,新增一个签名

name建议输入跟products中的name一致,点击ok后等待生成签名证书,然后点击ok关闭。再返回去查看App的build-profile.json5

https://blog.bg7zag.com/wp-content/uploads/2024/07/1721803030-harmony-signing.jpg

4. 选择环境


根据下图选择编译模式

https://blog.bg7zag.com/wp-content/uploads/2024/07/1721803231-20240724143912.jpg

https://blog.bg7zag.com/wp-content/uploads/2024/07/1721803245-20240724143933.jpg

然后可以根据当前选择的模式进行debug开发或者构建编译了

> 参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-customized-multi-targets-and-products-guides-0000001731595144-V5
> 上面文档如果没有权限,则在最新版文档的指南中搜索“能力说明”