【HarmonyOS Next】 共享 HSP 和应用内 HSP,useNormalizedOHMUrl 详解

【HarmonyOS Next】共享 HSP 和应用内 HSP,useNormalizedOHMUrl 详解
一、useNormalizedOHMUrl 是什么?
useNormalizedOHMUrl 指的是是否使用标准化 OHMUrl 拼接。
在开发过程中,需要根据不同的环境或配置动态生成 URL。例如,在加载一些远程模块或者资源时,可能需要将基础 URL 和具体的资源路径进行拼接,并且要确保生成的 URL 格式符合要求,避免出现多余的斜杠、编码问题等。
我们一般将 useNormalizedOHMUrl 设置为 true 的时候。ohmurl 使用的是新的拼接和解析方式。
标准化的 OHMUrl 统一了原有 OHMUrl 的格式。使用集成态 HSP 和字节码 HAR 需使用标准化的 OHMUrl 格式。
二、useNormalizedOHMUrl 的使用场景
useNormalizedOHMUrl 是为了解决 HSP 存在 bundleName 和签名的一致性要求,而且在调试阶段需要先安装 HSP 包,导致多模块集成开发存在很多集成的问题。
例如笔者开发了一个日志 HSP,需要给其他公司使用,不可能别的公司应用包名和我的日志 HSP 包名一致吧?但是前期 HSP 是要求 bundleName 和签名的一致的。
官方为了解决该问题,提供了集成态 HSP 的方案。
集成态 HSP 是应用内 HSP 的一种中间编译产物,目的就是解决使用方的 bundleName 和签名之间的强耦合问题。
集成态 HSP 的模块配置:build-profile.json5
这就是为什么,集成三方依赖,我们的项目需要添加 useNormalizedOHMUrl 为 true 的前因后果了。
并且需要补充的是,HAR 字节码包,也需要设置 useNormalizedOHMUrl 为 ture。
关于字节码 HAR 包,指的是其中包含的是编译后的 abc 字节码,相比包含源码的 HAR 和包含 js 中间码的 HAR,可以有效提升应用模块的编译构建效率。
三、useNormalizedOHMUrl 的注意事项
useNormalizedOHMUrl 为 true 的时候 ohmurl 使用的是新的拼接和解析方式,不能和旧的 ohmurl 混用,会导致运行时无法识别。
集成态 HSP 需要在工程级的 build-profile.json5 文件中,将 useNormalizedOHMUrl 字段设置为 true。
从 DevEco Studio NEXT Beta1(5.0.3.800)版本开始,当工程级 build-profile.json5 中 useNormalizedOHMUrl 配置为 true 时,noExternalImportByPath 缺省默认值为 true;当 useNormalizedOHMUrl 配置为 false 时,noExternalImportByPath 缺省默认值为 false。【noExternalImportByPath 指的是,是否严格检查绝对路径导入方式和相对路径跨模块导入方式。】
需要格外注意的是,鸿蒙中引用其他依赖模块正确的方式,是通过 index 中 export 的导出的接口,来调用模块函数或者类。如果使用的是相对路径的方式导出,在 useNormalizedOHMUrl 设置为 true 后,会导致编译报错,需要整改。
版权声明: 本文为 InfoQ 作者【GeorgeGcs】的原创文章。
原文链接:【http://xie.infoq.cn/article/11d00229dcd7ef6ab344f46a4】。文章转载请联系作者。
评论