【HarmonyOS Next】 鴻蒙應用useNormalizedOHMUrl詳解
一、useNormalizedOHMUrl是什么?
useNormalizedOHMUrl指的是是否使用標準化OHMUrl拼接。
在開發過程中,需要根據不同的環境或配置動態生成 URL。例如,在加載一些遠程模塊或者資源時,可能需要將基礎 URL 和具體的資源路徑進行拼接,并且要確保生成的 URL 格式符合要求,避免出現多余的斜杠、編碼問題等。
我們一般將useNormalizedOHMUrl 設置為true的時候。ohmurl使用的是新的拼接和解析方式。
標準化的OHMUrl統一了原有OHMUrl的格式。使用集成態HSP和字節碼HAR需使用標準化的OHMUrl格式。
{"app": {"products": [{"buildOption": {"strictMode": {"useNormalizedOHMUrl": true}}}]}
}
二、useNormalizedOHMUrl的使用場景
useNormalizedOHMUrl是為了解決HSP存在bundleName和簽名的一致性要求,而且在調試階段需要先安裝HSP包,導致多模塊集成開發存在很多集成的問題。
例如筆者開發了一個日志HSP,需要給其他公司使用,不可能別的公司應用包名和我的日志HSP包名一致吧?
但是前期HSP是要求bundleName和簽名的一致的。
官方為了解決該問題,提供了集成態HSP的方案。
集成態HSP是應用內HSP的一種中間編譯產物,目的就是解決使用方的bundleName和簽名之間的強耦合問題。
集成態HSP的模塊配置:build-profile.json5
{"apiType": "stageMode","buildOption": {"arkOptions": {"integratedHsp": true}}
}
這就是為什么,集成三方依賴,我們的項目需要添加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后,會導致編譯報錯,需要整改。