一、target和product概念说明target模块级的定制单元。一个模块可定义多个target每个target对应一个定制的HAP实现一个模块构建出不同的HAPproduct工程级的定制单元。一个工程可定义多个product每个product对应一个定制化APP包实现一个工程构建出多个不同的应用包二、定制HAP多目标构建每个Entry/Feature模块均支持定制不同的target支持以下定制项定制项说明HAP包名output.artifactName设备类型config.deviceType源码集sourcesource.pages、source.sourceRoots资源resourceresource.directoriesbuildOption配置C依赖的.so、混淆配置、abi类型等分发规则config.distributionFiltericon/label/launchTypesource.abilities说明1、未定义deviceType默认支持config.json或module.json5中定义的设备类型。2、如果多个target存在相同设备类型deviceType的场景相同设备类型的target需要指定分发规则distributionFilter。2.1 定义target{ apiType: stageMode, buildOption: {}, targets: [ { name: default }, { name: free }, { name: pay } ] }备注在编译构建时会同时打包生成default、free和pay三个不同的HAP。2.2 定义sourceRoots差异化代码空间规格限制通过import xxx from packageName/sourcePath/sourceFileName实现差异化构建支持hap、hsp、har不支持跨模块引用不支持动态import示例模块目录结构entry ├── src │ ├── main/ets/pages/Index.ets │ ├── default/Test.ets // 差异化代码 │ └── custom/Test.ets // 差异化代码build-profile.json5配置{ targets: [ { name: default, source: { sourceRoots: [./src/default] } }, { name: custom, source: { sourceRoots: [./src/custom] } } ] }Index.ets使用import { getName } from entry/Test; // entry为oh-package.json5中的name Entry Component struct Index { State message: string getName(); // default返回defaultcustom返回custom }2.3 定义资源资源优先级顺序AppScope目录下的资源覆盖模块下相同路径资源多个资源目录存在重名文件时按配置顺序选择{ targets: [ { name: pay, resource: { directories: [ ./src/main/resources_pay, ./src/main/resources_default // 重名时resources_pay优先 ] } } ] }三、定制HAR多目标构建HAR模块支持定制deviceType、resource、buildOption、source。注意DevEco Studio 6.0.2 Beta1之前构建HAR仅支持default target其他target需通过命令行指定。命令行构建指定targethvigorw --mode module -p productdefault -p modulelibraryfree -p buildModedebug assembleHar四、定制APP多目标构建每个product对应一个定制的APP包支持定制定制项字段APP包名output.artifactName供应商名称vendorbundleNamebundleNamebundleTypebundleTypeapp/atomicService签名配置signingConfigicon和labelicon、label包含的targetmodules.targets.applyToProducts4.1 定义product必须存在name为default的product否则会编译错误。{ app: { products: [ { name: default, signingConfig: default }, { name: productA, signingConfig: default }, { name: productB, signingConfig: default } ] } }备注每个product可以使用不同的signingConfig签名文件如果product未定义signingConfig则构建出生成未签名的APP包。4.2 定义product包含的target{ app: { modules: [ { name: entry, srcPath: ./entry, targets: [ { name: default, applyToProducts: [default] }, { name: free, applyToProducts: [productA] }, { name: pay, applyToProducts: [productB] } ] } ] } }五、多产物构建target5.1 align target优先级最高的target作用范围是整个工程只能配置一个。配置方式示例命令行hvigorw -c properties.ohos.align.targettarget1 assembleHap配置文件properties: { ohos.align.target: target1 }5.2 fallback target当模块不存在指定target时如果存在fallback target则使用fallback target。可配置多个按数组顺序先命中生效。配置方式示例命令行hvigorw -c properties.ohos.fallback.targettarget1,target2 assembleHap配置文件properties: { ohos.fallback.target: [target1, target2] }5.3 target优先级顺序align target 命令行指定模块target 父级模块target fallback target default5.4 示例工程依赖entry → lib1 → lib2target配置entry: A、B、defaultlib1: B、C、defaultlib2: A、C、default命令行hvigorw --mode module -p moduleentry -c properties.ohos.align.targetA -c properties.ohos.fallback.targetC assembleHap结果entryA, lib1C, lib2A六、其他6.1 target与product关系层级概念产物定制项模块级targetHAP包名、deviceType、源码、资源、buildOption、分发规则工程级productAPPbundleName、bundleType、签名、icon/label、包含的target6.2 多产物构建流程定义target模块级定制 ↓ 定义product工程级定制 ↓ 配置target与product的关联关系 ↓ 选择product和target进行构建鸿蒙中多目标产物构建通过target模块级定制HAP和product工程级定制APP实现支持定制deviceType、源码sourceRoots/pages、资源、buildOption、分发规则、bundleName、bundleType、签名等target优先级顺序为align target 命令行指定 父级模块target fallback target default。