備注:在看文檔的時候,一定要注意是 HarmonyOS 還是 OpenHarmony。因為兩者使用的 SDK 是不同的。
這里不對此展開詳細的說明,只對 HAR 和 HSP 說下自己的理解,相比較于 HAP,他們都不能單獨運行到設備上。他們兩個的區別主要有兩方面,一個是 HAR 不支持聲明 Pages 頁面,另一個是 HSP 的發布需要確保版本號和宿主程序保持一致。
在日常使用場景中,我們要依據實際業務來創建使用 HAR 還是 HSP,對于單 HAP 來說,兩者在選擇上其實都可以,但對于多 HAP 的業務,因為在打包時,HAR 會被編譯打包到所有依賴該文件的 HAP 和 HSP 包當中,這就需要平衡兩者之間的選擇。
針對第一個區別,我們不能夠通過 pushUrl 的方式進行頁面跳轉,但鴻蒙還提供了另外的方式,通過路由命名跳轉到指定頁面。比如下面我們命名當前頁面路由為 myPage
那么我們就可以通過下面的方式進行跳轉:
router.pushNamedRoute({ name: 'myPage' })
如果在跳轉的時候把當前組件卸載,我們可以用
router.replaceNamedRoute({ name: 'myPage' })
在跳轉的同時我們可以進行數據傳遞:
router.pushNamedRoute({
name: 'myPage',
params: {
data1: 'message',
data2: {
data3: [123, 456, 789]
}
}
})
在 myPage 頁面進行數據獲取:
router.getParams();
上面所說這些,主要是針對公司內部自有業務開發場景來說的,如果你現在封裝了一個功能,希望提供給所有可能使用到該三方庫的開發者,應該選擇哪種方式呢?上面所說的第二點區別其實已經給出了答案,最優解是選擇 HAR 包,同時 HAR 包可以發布到 OHPM 私倉或者中心倉供其他應用使用,在發布到中心倉時最好開啟代碼混淆,以此來保證代碼安全。
在 HAR 模塊的 build-profile.json5 文件中的 ruleOptions 字段下的 enable 進行設置,配置如下所示:
"buildOptionSet": [
{
"name": "release",
"arkOptions": {
"obfuscation": {
"ruleOptions": {
"enable": true,
"files": [
"./obfuscation-rules.txt"
]
},
"consumerFiles": [
"./consumer-rules.txt"
]
}
},
},
]
這樣在構建 HAR 的時候,就會對代碼進行編譯、混淆及壓縮處理。
以上就是對鴻蒙程序包區別和使用場景的一個簡要概述,因為本身也是在學習過程,避免不了存在一些理解上的出入,還望給與指正,一起交流學習,感謝。