HarmonyOS鸿蒙Next中如何在主Entry Module中为不同的目标产品配置不同的module.json5文件配置和引用AbilityStage类及UIAbility类

HarmonyOS鸿蒙Next中如何在主Entry Module中为不同的目标产品配置不同的module.json5文件配置和引用AbilityStage类及UIAbility类 问题场景:

  1. 项目内工程级build-profile.json5 构建了两种类型products,分别为 default 和 specification。

  2. 主Entry Module 的 build-profile.json5,构建了两种类型类的 target,分别为 default 和 specification。

  3. default 产品需要在 phone,tablet,2in1 设备中使用,并且包名为 com.xxx.AAAA,用于在应用市场上架为独立的APP。

  4. specification 产品需要在具备Cups打印接口能力的 tablet,2in1 设备中使用,并且包名为 com.xxx.BBBB,用于在应用市场上架为另一款独立的APP。

  5. default 和 specification 产品 有一部分业务逻辑需要共享项目中的基础设施Module(有10个左右 Module需要复用),因此期望能够放在一个项目中进行编译,构建,管理。

  6. default 产品为标准构建,需要在 主Entry Module的module.json5文件 中配置AbilityStage类(module节点下的srcEntry属性)和UIAbility类入口(abilities节点下的srcEntry属性),并且配置该产品所需要使用的权限列表清单)。

  7. specification 产品为特殊构建,期望能够使用独立的AbilityStage类和UIAbility类来编写专属于其自身的业务逻辑。

并且该产品的权限列表清单很少,只需要使用一个"ohos.permission.PRINT"权限,并不想在清单内配置更多权限,以干扰用户。

同时 specification 产品需要在module.json5文件 中配置extensionAbilities,并配置驱动文件所需要释放的文件路径。

基于上述项目背景下,如何为主Entry Module 中的不同 produce产品 配置不同的module.json5文件和AbilityStage类和UIAbility类?


更多关于HarmonyOS鸿蒙Next中如何在主Entry Module中为不同的目标产品配置不同的module.json5文件配置和引用AbilityStage类及UIAbility类的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

针对问题1:
1个module只能有1个module.json5,在其中可定义不同产物,表示这个module的多产物。如果想有2个module.json5,表示2个module,应该创建2个的module。

针对问题2: 在1个module中为不同的产物,可分2中情况HAP、HAR两种情况。主HAP包,可定制不同产物的Pages、sourceRoots可为不通产物定制页面和自动以代码空间。既然是1个模块,则共用相同入口AbilityStage和UIAbility是合理的,但是其实现可分拆到不同的sourceRoots。这种情况下可有default、 default1 和 driverInstall,此时 default + default1 可成为原来的default, default+driverInstall就是原先的driverInstall。 这样可以解决问题背景1~7的模块划分问题,但是权限问题还没解决。如何配置参考资料:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-customized-multi-targets-and-products-guides-0000001731595144-V5#section173102213445

解决权限项的配置思路:

方案1:根据权限项拆分module,然后进行组合。

方案2:编写构建脚本,在构建前根据产物修改权限配置。此时又有两种方式:

方式1:不依赖任何鸿蒙能力,写脚本修改权限配置,然后再调用工程构建。

方式2:编写hvigor插件,在构建前通过 getModuleJsonOpt 和 setBuildProfileOpt修改module中的权限节点,API参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-build-expanding-context-0000001777620174-V5#section18481048485

hivigor插件资料:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-build-expanding-0000001731754304-V5

更多关于HarmonyOS鸿蒙Next中如何在主Entry Module中为不同的目标产品配置不同的module.json5文件配置和引用AbilityStage类及UIAbility类的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,主Entry Module可以通过条件编译和模块化配置为不同的目标产品配置不同的module.json5文件。首先,在src目录下创建不同产品的子目录,如productAproductB,并在每个子目录中放置对应的module.json5文件。在oh-package.json5中使用"buildOption"字段指定不同产品的配置文件路径。例如:

"buildOption": {
  "productA": {
    "moduleJsonPath": "src/productA/module.json5"
  },
  "productB": {
    "moduleJsonPath": "src/productB/module.json5"
  }
}

在编译时,通过命令行参数指定目标产品,如--product productA,系统会自动加载对应的module.json5文件。

对于AbilityStage类和UIAbility类的引用,可以在module.json5中配置不同的"abilities"字段。例如:

"abilities": [
  {
    "name": ".ProductAAbility",
    "type": "page",
    "srcEntry": "./ets/productA/ProductAAbility.ts"
  },
  {
    "name": ".ProductBAbility",
    "type": "page",
    "srcEntry": "./ets/productB/ProductBAbility.ts"
  }
]

在代码中,通过AbilityStageUIAbility类实现不同产品的逻辑。例如:

import AbilityStage from '@ohos.application.AbilityStage';
import UIAbility from '@ohos.application.UIAbility';

export default class ProductAAbilityStage extends AbilityStage {
  // 实现逻辑
}

export default class ProductAAbility extends UIAbility {
  // 实现逻辑
}

通过这种方式,可以在主Entry Module中为不同目标产品配置不同的module.json5文件,并引用相应的AbilityStage类和UIAbility类。

在HarmonyOS鸿蒙Next中,可以通过在产品配置文件product.json中定义不同的模块路径来实现针对不同产品的module.json5配置。在主Entry Module中,使用AbilityStageUIAbility类时,可以通过条件编译或动态加载的方式根据产品类型选择合适的实现。具体步骤包括:

  1. product.json中为不同产品指定不同的module.json5路径;
  2. 在代码中根据产品类型加载对应的AbilityStageUIAbility类。
回到顶部