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配置未生效的问题,可尝试以下解决方案:
- 检查配置格式:确保build-profile.json5文件中的label配置格式正确,通常应使用“$string:label_name”的形式引用字符串资源。
- 确认资源文件:验证在strings.json或其他资源文件中是否已正确定义了label对应的字符串。
- 理解配置生效范围:build-profile.json5中修改的label通常改变的是设置中的应用名称,而非桌面图标下的名称。桌面的应用名称需要在app.json5中的EntryAbility下单独设置label。
- 重新同步项目:在DevEco Studio中,尝试点击“Sync Now”重新同步项目,以确保新的配置被正确加载。
- 清理和重建项目:有时,清理并重建项目可以解决配置不生效的问题。
如果以上步骤均无法解决问题,可能是项目配置存在其他潜在问题。此时,如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html ,以便获得更专业的技术支持。