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