在HarmonyOS鸿蒙Next多个hsp架构的项目中,构建app时,har静态共享包会分别编译进不同的hsp中吗
在HarmonyOS鸿蒙Next多个hsp架构的项目中,构建app时,har静态共享包会分别编译进不同的hsp中吗
现有a.har b.hsp c.hsp d.hsp
其中b.hsp 和 c.hsp 依赖a.har,d.hsp未依赖a.har
在构建app时a.har会分别编译进b和c中吗?
如果是,那是全量还是只包含import使用的部分编译进b和c中?
如果您在构建应用时遇到了多个HSP包依赖同一个HAR包的情况,b.hsp和c.hsp都依赖a.har,通常情况下,a.har中的内容会被全量编译进b.hsp和c.hsp中,而不是只编译入被import的部分。这是因为HAR包在被依赖时,为了保证功能的完整性和可预测性,会将其全部内容纳入依赖它的HSP包中。而HSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。HSP旨在解决多个模块引用相同的HAR,导致APP包大小膨胀的问题。
多包场景下使用HSP共享代码和资源参考链接: https://developer.huawei.com/consumer/cn/doc/best-practices-V5/bpta-decrease_pakage_size-V5#section13745162092020
HAR是静态共享包,而HSP是动态共享包。转换基础依赖的HAR为HSP,并将其作为基础依赖库导出接口及图片资源给其他HSP使用,在元服务中是可行的。
HAR转HSP参考链接: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/har-to-hsp-V5
在元服务中使用HSP:
元服务首次加载时只会加载首包。如果首包中使用了由基础依赖的HAR转换而来的HSP中的某个接口或图片资源,应该不会崩溃,但可能会遇到资源未完全加载或同步的问题,尤其是如果该HSP还未完全下载到本地的情况下。
元服务程序包基础知识参考链接: https://developer.huawei.com/consumer/cn/doc/atomic-guides-V13/atomic-service-package-basics-V13
问题1:如果由基础依赖的HAR转换而来的HSP还未下载到本地,调用hsp中的某个接口,这时候应该会崩溃的。
问题2:目前元服务分包只有这两种方式。
- 通过分包页面路由跳转时,系统将动态加载分包,加载完成后启动对应页面。
- 若希望优化分包加载速度,可参照预加载进行配置。
NavPushPathHelper:当跳转的目标NavDestination在不同的hsp分包,且未被主包依赖,首次运行元服务只会下载安装主包,需要使用NavPushPathHelper先下载安装相应hsp分包,再将指定的NavDestination页面信息入栈。使Navigation支持动态加载hsp分包后再跳转。
预加载:可以通过配置预加载,由系统自动下载和安装可能需要的分包模块,从而提升进入后续模块的速度。对于配置了预加载的分包模块,当点击进入该模块并完成页面加载后,将触发关联模块的预加载。
参考链接: https://developer.huawei.com/consumer/cn/doc/atomic-guides-V5/atomic-preparing-for-loading-V5
更多关于在HarmonyOS鸿蒙Next多个hsp架构的项目中,构建app时,har静态共享包会分别编译进不同的hsp中吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next的多个HSP(Harmony Shared Package)架构项目中,构建App时,HAR(Harmony Archive)静态共享包不会分别编译进不同的HSP中。HAR包是静态共享包,其内容在编译时会被直接打包到使用它的模块或HSP中,而不是独立存在于每个HSP中。因此,多个HSP如果引用了同一个HAR包,每个HSP在编译时会包含该HAR包的副本,而不是共享同一个HAR包实例。
在HarmonyOS鸿蒙Next中,HAR(HarmonyOS Archive)静态共享包不会分别编译进不同的HSP(HarmonyOS Shared Package)中。HAR是静态共享包,其内容在编译时会被直接打包到依赖它的模块中,而HSP是动态共享包,可以在运行时被多个模块共享。因此,HAR的内容会分别编译到依赖它的每个模块中,而不是被多个HSP共享。