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