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.json或module.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"
]
}

最低0.47元/天 解锁文章
832

被折叠的 条评论
为什么被折叠?



