对于分渠道打包我一开始非常的不理解,因为Android 中的分渠道是非常浅显直接的。

而鸿蒙中是分为两块:模块的 targets 和工程的 product。

两个部分,分别可以指定一部分的项目参数。模块的 target 指定的偏单模块本身的属性参数,例如混淆,排除文件等。工程的 product 指向更多的是编译和工程整体,例如bundle name 、签名等。

module 将targets 和 product 像积木一样拼搭起来,就实现了所谓的分渠道打包。

原理可以参考:里面的 APP我理解就是product

https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-target#section589512442151https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-target#section589512442151

当然,因为我的 sdk_test_demo + sdk 的开发模式,目前发现还是有些场景覆盖不了。

(例如 libs 分为 渠道 A / B / C 。demo 无法直接引用 libs 对应的 ABC渠道打包。这个在 Android中很简单。我现在考虑的解决方案是编写脚本,按照对应渠道打包。然后自动拷贝到demo工程中,demo 工程引入 libs 下面的本地 har。

当然这只是我现在没找到好的办法,搞定了我再来更新)

1. 基于Targets的构建参数

targets 是基于每个项目模块的内容配置。HAP 能够定义的值远比 HAR 多。一开始没搞明白,现在看懂了其实官方的文档已经是非常完善了。

想看 targets 大全的可以看文章最后面:

https://blog.csdn.net/vistaup/article/details/154983732

1.1 定制HAP多目标构建产物

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-customized-multi-targets-and-products-guides#section329173315468https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-customized-multi-targets-and-products-guides#section329173315468每一个Entry/Feature模块均支持定制不同的target,通过在模块中的build-profile.json5文件中实现差异化定制,当前支持HAP包名、设备类型(deviceType)、源码集(source)、资源(resource)、buildOption配置项(如C++依赖的.so、混淆配置、abi类型、cppFlags等)、分发规则(distributionFilter)的定制。

1.2 定制HAR多目标构建产物

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-customized-multi-targets-and-products-guides#section173102213445https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-customized-multi-targets-and-products-guides#section173102213445每一个HAR模块均支持定制不同的target,通过在模块中的build-profile.json5文件中实现差异化定制,当前支持设备类型(deviceType)、资源(resource)、buildOption配置项(如C++依赖的.so、混淆配置、abi类型、cppFlags等)、源码集(source)的定制。

在DevEco Studio中编译HAR模块时,仅支持default target,若需指定其他target,需通过命令行来指定,并通过命令行来编译。

例如构建指定的自定义target:free的har,可参考执行以下命令:

hvigorw --mode module -p product=default -p module=library@free -p buildMode=debug assembleHar

1.3 targets 官方场景案例(HAP+HAR)

https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-target#section8617123719314https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-target#section8617123719314参考其中的 “2. 定制target内容。”即可。包含 HAP 和 HAR的案例,说明还是比较直白的。

2. 基于product的构建参数(配置APP多目标构建产物)

这里能配置的东西不多,主要是包名、签名、icon 之类。这里更符合我们通常理解的多渠道。

APP用于应用/元服务上架发布,针对不同的应用场景,可以定制不同的product,每个product中支持对bundleName、bundleType、签名信息、icon和label进行定制。

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-customized-multi-targets-and-products-guides#section680552311459https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-customized-multi-targets-and-products-guides#section680552311459

3. 基于 Module的构建参数

这块在官方的文档中,是放在和 product 一起的。但是我更理解这里是把 targets 和 product 组合的地方。所以我单独拎出来。

官方场景案例里的(3. 定制product内容)里面其实久比较明白的说明了这个。

在module 中,你先选择你要用的 targets (这个事先在对应模块的 build-profile.json5 文件中定义过),然后这个 targets 需要配合哪种签包名策略(product)组合好就是一个 module

https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-target#section8617123719314https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-target#section8617123719314对于 HAP,RUN项目的时候可以按这个按钮选择需要的 product

指定需要打包的ProductTarget,然后单击Apply保存。例如选择"ProductA"中,entry模块对应的"free" Target。

  • Product:选择需要构建的APP包。
  • Build Mode:选择编译模式
  • Product Info:该APP包的BundleName和SigningConfig信息。
  • Target Select:选择各个模块的Target,该Target需要包含在定义的Product中才能选择,如果未包含则显示"No Target to apply"

然后执行编译构建APP/HAP的任务:

  • 单击菜单栏的Build > Build Hap(s)/APP(s) > Build APP(s) ,构建指定的Product对应的APP。例如,按照上述配置文件和上图中的配置,此时DevEco Studio将构建生成ProductA的APP包。default和ProductB的APP均不会生成。
  • 单击菜单栏的Build > Build Hap(s)/APP(s) > Build Hap(s),构建指定Product下的所有Target对应的HAP。

如果您想将某个模块下的指定target打包生成HAP,可以在工程目录中,单击模块名,然后再单击Build > Make Module ‘模块名 ,此时DevEco Studio将构建生成模块下指定target对应的包。例如,按照上述配置,此时DevEco Studio将构建生成entry模块下free的HAP。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐