Harmonyos之多目标构建产物实践

概述

多目标产物在HarmonyOS系统中的应用主要体现在软件开发与分发方面,特别是针对不同用户群体、不同业务场景的需求进行定制化开发。多目标产物为开发者提供了更加灵活和高效的开发方式,使得应用能够更好地适应市场需求和变化。

基本概念

  • target:对应HAR、HSP、HAP的多目标产物。工程内的每一个模块可以定义多个target,每个Target对应一个定制的HAP、HAR包,通过配置可以实现一个模块构建出不同的HAP、HAR包。
  • product:对应App的多目标产物。一个HarmonyOS工程的构建产物为App包,一个工程可以定义多个product,每个product对应一个定制化应用包,通过配置可以实现一个工程构建出多个不同的应用包。

在构建过程中,鸿蒙构建系统会根据配置文件中定义的product和target信息,生成相应的构建产物。对于每个target,构建系统会生成一个对应的HAP/HSP/HAR。这个HAP/HSP/HAR包含了该target所需的所有代码和资源。对于每个product,构建系统会生成一个包含了其所有依赖的target的App包。这个App包可以用于发布和上架到应用市场。

实现原理

HarmonyOS多目标产物支持HAP(应用安装的基本单位,每个HAP都对应一个应用模块)、HAR(静态共享包)、HSP(动态共享包)以及App(由多个HAP打包一起上架的完整应用程序)包多种类型的包,以满足不同业务场景下的应用开发和定制需求。

多目标产物定制项

每一个Entry/Feature模块均支持定制不同的target,通过在模块中的build-profile.json5文件中实现差异化定制,当前支持HAP包名设备类型(deviceType)源码集(source)资源(resource)buildOption配置项(如C++依赖的.so、混淆配置、abi类型、cppFlags等)分发规则(distributionFilter)的定制

定制HAP多目标产物

每一个target对应一个定制的HAP,因此,在定制HAP多目标构建产物前,应提前规划好需要定制的target名称。

示例: 我们已entry模块为示例,在entry模块的build-profile.json5文件中配置了如下4个target:

{
   
   
  "apiType": "stageMode",
  "buildOption": {
   
   
  },
  "targets": [ // 定义不同的target
    {
   
   
      "name": "default" // 默认target
    },
    {
   
   
      "name": "free" // 免费 target
    },
    {
   
   
      "name": "pay" // 付费target
    }
  ]
}

按照上述target的定义,在编译构建时,会同时打包生成default、free和pay三个不同的HAP。

定义产物的HAP包名

每一个target可以指定一个产物命名

"targets": [
    {
   
   
      "name": "default",
      "output": {
   
   "artifactName":  "customizedTargetOutputName-default-1.0.0"}
    },
    {
   
   
      "name": "free",
      "output": {
   
   "artifactName": "customizedTargetOutputName-free-1.0.0"}
    },
    {
   
   
      "name": "pay",
      "output": {
   
   "artifactName": "customizedTargetOutputName-pay-1.0.0"}
    }
  ]

如果已配置签名,target产物对应的HAP包名为开发者定制的名称;如果未配置签名,target产物对应的HAP包名为开发者定制的名称+unsigned。

定义产物的deviceType

每一个target均可以指定支持的设备类型deviceType,也可以不定义。如果不定义,则该target默认支持config.jsonmodule.json5中定义的设备类型。

同时,在定义每个target的deviceType时,支持的设备类型必须在config.json或module.json5中已经定义。例如,在上述定义的3个target中,分别定义default默认支持所有设备类型,free和pay版本只支持phone设备。

定义产物的资源

每个target使用的资源文件可能存在差异,在开发过程中,开发者可以将每个target所使用的资源存放在不同的资源目录下。**其中,ArkTS工程支持对main目录下的资源文件目录(resource)进行定制;JS工程支持对main目录下的资源文件目录(resource)及 Ability下的资源文件目录(res)进行定制。**如下为ArkTS工程的资源文件目录定制示例:
在这里插入图片描述

"targets": [
    {
   
   
      "name": "default",
      "output": {
   
   "artifactName":  "customizedTargetOutputName-default-1.0.0"},
      // 不指定设备类型 , 默认支持config,json或者module.json5配置文件中指定的类型
      "source": {
   
    // 指定default模块的源码集
        "pages": [
          "pages/Index"
        ]
      },
      "resource": {
   
   
        "directories": [
          "./src/main/resources"
        ]
      }
    },
    {
   
   
      "name": "free",
      "output": {
   
   "artifactName": "customizedTargetOutputName-free-1.0.0"},
      "config": {
   
    // 配置free模块 支持设备类型为phone
        "deviceType": [
          "phone"
        ]
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值