HarmonyOS 鸿蒙Next在工程级build-profile.json5中,如何解决product的label配置未生效的问题

发布于 1周前 作者 songsunli 最后一次编辑是 5天前 来自 鸿蒙OS

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
1 回复

在HarmonyOS鸿蒙Next中,若遇到工程级build-profile.json5文件中product的label配置未生效的问题,可尝试以下解决方案:

  1. 检查配置格式:确保build-profile.json5文件中的label配置格式正确,通常应使用“$string:label_name”的形式引用字符串资源。
  2. 确认资源文件:验证在strings.json或其他资源文件中是否已正确定义了label对应的字符串。
  3. 理解配置生效范围:build-profile.json5中修改的label通常改变的是设置中的应用名称,而非桌面图标下的名称。桌面的应用名称需要在app.json5中的EntryAbility下单独设置label。
  4. 重新同步项目:在DevEco Studio中,尝试点击“Sync Now”重新同步项目,以确保新的配置被正确加载。
  5. 清理和重建项目:有时,清理并重建项目可以解决配置不生效的问题。

如果以上步骤均无法解决问题,可能是项目配置存在其他潜在问题。此时,如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html ,以便获得更专业的技术支持。

回到顶部