鸿蒙动态共享包har依赖与使用
内容提要
HAR(Harmony Archive)是OpenHarmony静态同享包,包含代码、库、资源和配置文件。HAR不能独立运行,只能作为模块的依靠项被引用。装置依靠har三方库需设置库房信息。自定义Library可通过指令或上传到三方仓给他人运用。运用har中提供的内容需导出接口或办法。编译构建HAP时,资源文件优先级为AppScope、HAP包自身模块、依靠的HAR模块。
延伸解读
HAR 与 HAP 的本质区别
HAR 是静态共享包,不能独立安装运行,只能作为模块的依赖被引用;而 HAP 是应用安装包,可直接部署到设备。这一区别决定了 HAR 的定位是代码与资源的复用单元,而非交付产物。开发者在拆分模块时,应把可复用的 ArkUI 组件、工具方法、资源放入 HAR,把入口能力与设备交互留在 HAP。
依赖引入方式的选择建议
文章给出两种引入三方 HAR 的方式:命令行执行 ohpm install 会自动写入 oh-package.json5,手动添加依赖信息后再执行 ohpm install 则更自主可控。后者被文章推荐,因为依赖版本与来源在配置文件中显式可见,便于团队协作与版本管理。需注意命令行方式会把依赖加到当前目录的 oh-package.json5,执行目录不同结果也不同。
资源冲突的覆盖规则
编译构建 HAP 时,资源优先级由高到低为 AppScope、HAP 自身模块、依赖的 HAR 模块。多个 HAR 之间出现同名资源时,按工程 oh-package.json5 中 dependencies 的依赖顺序覆盖,顺序在前的优先级更高。例如 dayjs 与 lottie 存在同名文件时优先使用 dayjs 的资源。因此调整依赖顺序会实际改变最终生效的资源。
对外暴露内容的方式
HAR 中的 ArkTS 页面、方法和 native 能力都需要显式导出后才能被外部使用。页面通过 export struct 导出,方法通过 export function 导出,并在 Index.ets 中统一声明对外接口。native 方法则是用 TS 包一层再导出,实际暴露的仍是 TS 方法。若未导出,依赖方无法引用,这是使用 HAR 时容易忽略的一步。
Q&A
HAR是什么?
HAR(Harmony Archive)是OpenHarmony的静态共享包,包含代码、库、资源和配置文件。
如何安装依赖于HAR的库?
可以在指令行中执行install指令,如ohpm install @ohos/lottie,或在oh-package.json5中手动添加依赖信息。
如何设置自定义Library的依赖?
可以通过指令行依赖或在oh-package.json5中直接添加依赖信息,例如"dependencies": { "@ohos/library": "file:../library" }。
如何将自定义Library分享给他人?
可以直接发送HAR文件,或将其上传到第三方仓库供他人使用。
在编译HAP时,资源文件的优先级是什么?
资源文件的优先级为AppScope、HAP包自身模块、依赖的HAR模块,若有冲突则按oh-package.json5中的依赖顺序覆盖。
如何使用HAR中提供的ArkTS页面?
可以通过export导出ArkTS页面,并在其他组件中引用,例如import { MainPage } from 'library';。