HarmonyOS鸿蒙Next中hvigor构建Har时,能否直接在module模块内部直接构建,不依赖app工程

HarmonyOS鸿蒙Next中hvigor构建Har时,能否直接在module模块内部直接构建,不依赖app工程

如题,hvigor构建Har时,能否直接在module模块内部直接构建,不依赖app工程呢?

app内依赖了很多独立开发的module模块,他们都会最终打包成har,上传到私仓或者公共仓库,未来可能提供给其他项目app使用。

每个module模块源码会单独创建一个git仓库,开发时,app主工程内会通过脚本批量git clone所需要的多个module模块到本地进行开发。

以上是背景,现在我希望能够用上云原生构建,已经做好了内置了ohpm和hvigorw的镜像,希望的效果是能够在对module模块的git仓库修改代码和提交后,可以通过git直接执行流水线,使用我的自定义镜像来完成构建和推送。然而现在遇到了问题,我在module内直接执行hvigorw命令去构建自己的时候,发现会报错:

# hvigorw --mode module -p product=default -p module=engine@default -p buildMode=release assembleHar --analyze=normal --parallel --incremental --daemon
Error: Hvigor config file /workspace/hvigor/hvigor-config.json5 does not exist.

然后我把hvigor-config.json5从主工程复制过来之后,再次执行,还是不行:

> hvigor hvigor client: Starting hvigor daemon.
> hvigor Hvigor Daemon started in 1.17 s
> hvigor ERROR: 'modules' property should be an array in root project build-profile.json5
            at /workspace/build-profile.json5
> hvigor ERROR: BUILD FAILED in 7 ms 

看日志的意思是,hvigor工具就必须得在主工程内执行,因为只有主工程里才注册了modules列表。

那么,有没有办法可以直接编译module工程呢?或者,如果现在不支持,未来会支持吗?有其他替代方案吗?


更多关于HarmonyOS鸿蒙Next中hvigor构建Har时,能否直接在module模块内部直接构建,不依赖app工程的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

楼主的这种功能不是项目里面简单的Har包了是共享的Har可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。

开发共享静态包看这个:开发静态共享包-开发及引用共享包-模块管理-工程创建-开发环境搭建 - 华为HarmonyOS开发者

发布给别人用看这个: 发布共享包-开发及引用共享包-模块管理-工程创建-开发环境搭建 - 华为HarmonyOS开发者

更多关于HarmonyOS鸿蒙Next中hvigor构建Har时,能否直接在module模块内部直接构建,不依赖app工程的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


还有一个办法可以通过命令行调用DevEco Studio的模块构建指令:

# 进入模块目录执行构建

hvigorw :your_module:assembleHar --mode release

这个依赖主工程上下文,但是可通过脚本自动化实现独立构建。

Hvigor构建工具需要依赖主工程中的build-profile.json5和hvigor-config.json5来识别模块关系,单独在模块目录下执行构建会因缺少这些配置文件报错。主工程的build-profile.json5中需通过modules数组注册所有子模块,而独立模块仓库无法满足该配置要求。

楼主可以模拟一个主工程环境,就是创建最小化主工程结构,在模块目录下创建临时主工程框架

# 示例目录结构

temp_project/

├── build-profile.json5    # 主工程配置文件
├── hvigor-config.json5    # Hvigor全局配置
└── modules/
    └── your_module/       # 实际模块代码

build-profile.json5内容要包含模块声明:

{
  "app": {
    "signingConfigs": "../signing-config.json"
  },
  "modules": [
    {
      "name": "your_module",
      "srcPath": "./modules/your_module"
    }
  ]
}

Hvigor构建工具通过模块化任务编排机制,允许开发者针对特定模块执行构建任务。每个模块的hvigorfile.ts文件可独立注册构建任务,且HAR模块本身属于静态共享包,其编译过程不依赖主应用工程的代码逻辑

可以尝试下面命令进行单独构建

hvigorw assembleHar --mode module -p module=your_module@default -p product=default

在HarmonyOS鸿蒙Next中,hvigor支持直接构建module模块生成Har包,无需依赖app工程。通过配置模块级hvigorfile.js,定义buildHar任务即可独立构建。在模块目录执行hvigor clean build命令可完成Har包构建,输出路径默认在模块的build目录下。需要确保模块已正确配置类型为"har"且依赖项完整。

在HarmonyOS Next中,目前hvigor构建Har确实需要依赖主工程的上下文环境。从你遇到的错误来看,hvigor需要读取主工程的build-profile.json5配置来获取modules列表,这是当前的设计机制。

针对你的场景,可以考虑以下两种方案:

  1. 在构建时动态生成最小化的主工程结构:
  • 创建一个临时目录
  • 包含必要的hvigor-config.json5和build-profile.json5
  • build-profile.json5只需包含当前要构建的module
  • 然后在该目录执行构建
  1. 使用hvigor提供的module构建模式: 虽然文档没有明确说明,但可以尝试通过以下命令: hvigorw :yourModuleName:assembleHar

这两种方案都需要在CI/CD流水线中做一些适配工作。第一种方案更可控,第二种方案更简洁但可能遇到其他依赖问题。

HarmonyOS团队正在持续优化构建系统,建议关注官方更新日志,未来可能会提供更灵活的module独立构建能力。

回到顶部