在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文件中
},

【背景知识】

【定位思路】

(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[]中进行相关配置。下述方案提供了针对normalvip版本的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

1 回复

更多关于在HarmonyOS鸿蒙Next工程级build-profile.json5中,如何解决product的label配置未生效的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next工程级build-profile.json5中,若productlabel配置未生效,首先检查label字段是否在product节点下正确配置,确保格式为"label": "your_label_name"。其次,确认build-profile.json5文件路径正确,且未被其他配置文件覆盖。最后,确保编译时使用了正确的build-profile.json5文件,可通过命令行参数指定。若问题依旧,检查是否有其他配置或插件影响了label的生效。

回到顶部