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