有一个项目A,创建了不同模块A1,A2去提供不同的功能,此时A1和A2还存在引用关系(假如A1引用了A2的方法)。
正常情况下,导出 A2 的 har 提供到 A1 模块 libs 下并引入,导出 A1 时会发现 A1 的Har 带了 A2的Har,此时在B项目中同时引入 A1和A2的 har,会造成 有两份A2,一份是被直接引用的,一份是在A1的 libs 下。程序也是可以正常运行的。
但是还是想解决一下这个问题,就发现鸿蒙中是可以动态引入的,同时有类似安卓的 "compileOnly" 功能。参考官方文档 动态import :动态import-应用程序包开发与使用-应用程序包基础知识-开发基础知识-基础入门 - 华为HarmonyOS开发者 (huawei.com)
了解到可以利用 动态 import 加上 runtimeOnly 似乎可以解决重复代码和依赖问题,但是实际使用中,会出现引用找不到的问题。会遇到链接中的错误:有关动态import中HAR模块间动态import依赖解耦的问题-华为开发者论坛 | 华为开发者联盟 (huawei.com)看最新评论没有得到有效的解决方案。
无意间发现了如下文章的方法可以解决关于多个har依赖问题-工程管理-DevEco Studio-开发 - 华为HarmonyOS开发者 (huawei.com)
其中上私有仓库,使用版本控制依赖是个不错的方法。
同时也尝试了第二种方法,也成功解决了依赖问题。
用第二种就是 在A1 中引用A2 的模块,而不是直接把A2的har放入A1中(不然打A1的 har 会带上A2的har),然后在B工程中,使用 overrides 重新指定 A2 的 har 路径即可。如此可以保证最终项目中只有一份代码。(无需使用 动态import)
参考文档:
动态import-应用程序包开发与使用-应用程序包基础知识-开发基础知识-入门 - 华为HarmonyOS开发者 (huawei.com)
HAR-共享包-应用程序包基础知识-开发基础知识-入门 - 华为HarmonyOS开发者 (huawei.com)
关于多个har依赖问题-工程管理-DevEco Studio-开发 - 华为HarmonyOS开发者 (huawei.com)
开发及引用动态共享包-开发及引用共享包-应用/服务开发-DevEco Studio使用指南-工具 - 华为HarmonyOS开发者 (huawei.com)