在HarmonyOS鸿蒙Next工程级build-profile.json5中,如何解决product的label配置未生效的问题
在HarmonyOS鸿蒙Next工程级build-profile.json5中,如何解决product的label配置未生效的问题
【问题现象】
对外发版本进行差异化定制时,用多目标产物的配置方式,在工程级product字段增加configTest配置,实际打包的应用展示的label为module_label,与预期configTest_label不符。
在工程级product字段中configTest配置如下:
{
"name": "configTest",
"signingConfig": "samsEnterprise",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS",
"bundleName": "cn.samsclub.enterprise.app",
"icon": "$media:app_scope_icon",
"label": "configTest_label", // 实际配置中请用变量形式定义在string.json文件中
},
【背景知识】
- 配置文件说明build-profile.json5
- 配置文件说明module.json5
- 配置多目标产物
【定位思路】
(1)全局搜索module_label,发现该配置出现在entry/module.json5中
"abilities":
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
"description": "$string:EntryAbility_desc",
"icon": "$media:app_icon",
"label": "module_label", // 实际配置中请用变量形式定义在string.json文件中
},
(2)由于producut配置和abilities配置中都有icon和label标签,初步判断是该标签在不同配置文件中产生了冲突。
(3)基于以上获取的信息,可以判断造成上述现象的原因是多目标产物配置时,icon和label标签配置混乱导致。
【解决方案】
若想对不同的外发版本进行差异化定制,在进行多目标产物配置时,可以在工程级build-profile.json5->app{}->products[]中进行相关配置。下述方案提供了针对normal和vip版本的icon和label两个标签的差异化定制,具体方案参考如下:
(1)在工程级build-profile.json5中配置好products,此处除默认default之外,增加vip_product和normal_product配置;
"products": [{
"name": "default",
"signingConfig": "default",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS",
"buildOption": {
"strictMode": {
"caseSensitiveCheck": true,
"useNormalizedOHMUrl": true
}
}
},
{
"name": "vip_product",
"signingConfig": "vipSign",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS",
"buildOption": {
"strictMode": {
"caseSensitiveCheck": true,
"useNormalizedOHMUrl": true
}
}
},
{
"name": "normal_product",
"signingConfig": "normalSign",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS",
"buildOption": {
"strictMode": {
"caseSensitiveCheck": true,
"useNormalizedOHMUrl": true
}
}
}
]
(2)在工程级build-profile.json5中的modules标签下配置targets,并且限制每个target可以在哪个product下使用。以下限制vip的配置可以被product为default和vip_product使用,normal的配置可以被product为default和normal_product使用;
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default",
"applyToProducts": [
"default",
"normal_product",
"vip_product"
]
},
{
"name": "vip", // target为vip时可以选择的product为default和vip_product
"applyToProducts": [
"default",
"vip_product"
]
},
{
"name": "normal", // target为normal时可以选择的product为default和normal_product
"applyToProducts": [
"default",
"normal_product"
]
}
]
}
]
(3)对于模块级的build-profile.json5,在target标签下的normal、vip字段中增加abilities配置如下:
"targets": [
{
"name": "default"
},
{
"name": "normal", // 当target为normal时,使用normal作为label
"source": {
"abilities": [
{
"name": "EntryAbility",
"icon":"$media:layered_image",
"label":"normal", // 实际配置中请用变量形式定义在string.json文件中
"launchType": "singleton"
}
]
}
},
{
"name": "vip", // 当target为vip时,使用vip作为label
"source": {
"abilities": [
{
"name": "EntryAbility",
"icon":"$media:layered_image",
"label":"vip", // 实际配置中请用变量形式定义在string.json文件中
"launchType": "singleton"
}
]
}
},
{
"name": "ohosTest",
}
]
(4)修改配置后的效果如下:
- 使用product为normal_product,target为normal运行:
- 使用product为vip_product,target为vip运行:
【总结】
- 构建多目标产物时,控制应用icon和label需要在模块级的build-profile.json5中根据不同target在abilities标签下设置,默认模块级build-profile.json5中abilities优先级高于module.json5中abilities优先级,若模块级build-profile.json5中abilities未配置,则默认使用module.json5中配置内容。
- 工程级build-profile.json5配置中products中的label、icon、versionCode、versionName、resource字段配置,编译构建时会替换app.json5中的相关配置。
- DevEco Studio从5.0.3.800版本开始,不再对module.json5中的icon和label做强制校验,因此module.json5与app.json5只需要选择其一配置。module.json5的配置优先级更高。
- 应用icon/label优先级:模块级build-profile.json5 > 模块级module.json5 > 工程级build-profile.json5>app.json5
更多关于在HarmonyOS鸿蒙Next工程级build-profile.json5中,如何解决product的label配置未生效的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于在HarmonyOS鸿蒙Next工程级build-profile.json5中,如何解决product的label配置未生效的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next工程级build-profile.json5
中,若product
的label
配置未生效,首先检查label
字段是否在product
节点下正确配置,确保格式为"label": "your_label_name"
。其次,确认build-profile.json5
文件路径正确,且未被其他配置文件覆盖。最后,确保编译时使用了正确的build-profile.json5
文件,可通过命令行参数指定。若问题依旧,检查是否有其他配置或插件影响了label
的生效。