HarmonyOS鸿蒙Next中如何在主Entry Module中为不同的目标产品配置不同的module.json5文件配置和引用AbilityStage类及UIAbility类
HarmonyOS鸿蒙Next中如何在主Entry Module中为不同的目标产品配置不同的module.json5文件配置和引用AbilityStage类及UIAbility类 问题场景:
-
项目内工程级build-profile.json5 构建了两种类型products,分别为 default 和 specification。
-
主Entry Module 的 build-profile.json5,构建了两种类型类的 target,分别为 default 和 specification。
-
default 产品需要在 phone,tablet,2in1 设备中使用,并且包名为 com.xxx.AAAA,用于在应用市场上架为独立的APP。
-
specification 产品需要在具备Cups打印接口能力的 tablet,2in1 设备中使用,并且包名为 com.xxx.BBBB,用于在应用市场上架为另一款独立的APP。
-
default 和 specification 产品 有一部分业务逻辑需要共享项目中的基础设施Module(有10个左右 Module需要复用),因此期望能够放在一个项目中进行编译,构建,管理。
-
default 产品为标准构建,需要在 主Entry Module的module.json5文件 中配置AbilityStage类(module节点下的srcEntry属性)和UIAbility类入口(abilities节点下的srcEntry属性),并且配置该产品所需要使用的权限列表清单)。
-
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
针对问题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
目录下创建不同产品的子目录,如productA
和productB
,并在每个子目录中放置对应的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"
}
]
在代码中,通过AbilityStage
和UIAbility
类实现不同产品的逻辑。例如:
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中,使用AbilityStage
和UIAbility
类时,可以通过条件编译或动态加载的方式根据产品类型选择合适的实现。具体步骤包括:
- 在
product.json
中为不同产品指定不同的module.json5
路径; - 在代码中根据产品类型加载对应的
AbilityStage
和UIAbility
类。