目录

如何让HAR包的label名称跟随宿主HAP

问题现象

HAP包集成HAR包,HAR包中的UIAbility进入后台任务列表界面时显示的label名称不跟随HAP包,如下图所示。如何让HAR包的label名称跟随HAP包的label名称呢?

问题效果预览:

效果预览

配置后可以看到HAR包的label名称跟随了HAP包:

背景知识

解决方案

出现该情况主要是由于HAR包中的UIAbility使用的是HAR包中的label资源,没有使用宿主HAP包的资源导致,所以会展示为HAR包的label名称。

由背景知识中可知,可以在HAP中配置和HAR中重名的label字段,这样根据优先级覆盖原则:AppScope(仅Stage模型支持)->HAP包自身模块->依赖的HAR模块,HAR中使用的就是HAP中的所配置的label资源。

具体修改步骤如下:

  1. 在HAR模块的string.json中配置HAR包的label字段“Ability_label”,并在HAR模块的module.json5文件中abilities标签下的label字段中被引用。
    HAR string.json:
    {
      "string": [
        {
          "name": "page_show",
          "value": "page from package"
        },
        {
          "name": "HarAbility_desc",
          "value": "description"
        },
        {
          "name": "Ability_label",
          "value": "HAR"
        }
      ]
    }

    HAR module.json5:

    "label": "$string:Ability_label",
  2. 在HAP包的string.json中配置与HAR包中label相同字段名的“Ability_label”,并在HAP包的module.json5文件中abilities标签下的label字段中被引用。

    HAP string.json:

    {
      "string": [
        {
          "name": "module_desc",
          "value": "module description"
        },
        {
          "name": "EntryAbility_desc",
          "value": "description"
        },
        {
          "name": "Ability_label",
          "value": "APP"
        }
      ]
    }

    HAP module.json5:

    "label": "$string:Ability_label",

总结

可以利用资源优先级覆盖原则,在HAP中配置和HAR包同名label字段,使得HAR包的label名称跟随宿主HAP。