快速修復(fù)是HarmonyOS系統(tǒng)提供給開發(fā)者的一種技術(shù)手段,支持開發(fā)者以遠快于應(yīng)用升級的方式對應(yīng)用程序包進行缺陷修復(fù)。和全量應(yīng)用升級軟件版本相比,快速修復(fù)的主要優(yōu)勢在小、快和用戶體驗好。在較短的時間內(nèi)不中斷正在運行的應(yīng)用的情況下(即不需要重啟應(yīng)用),修復(fù)應(yīng)用的缺陷。
快速修復(fù)的使用規(guī)則
- 僅支持修復(fù)應(yīng)用的TS和C++代碼,對應(yīng)的文件為.abc文件(TS編譯后的文件)和.so文件(C++編譯后的文件),不支持對資源的修復(fù)。
- 不支持新增.abc文件和.so文件。
- 快速修復(fù)包部署時要確保對應(yīng)應(yīng)用包已安裝,如果未安裝,則部署失敗。
- 快速修復(fù)包中配置的包名和應(yīng)用版本號必須和已安裝的包名和版本號應(yīng)用相同,如果不同則部署失敗。
- 如果已經(jīng)部署過快速修復(fù)包,新部署的快速修復(fù)包的版本號必須大于之前快速修復(fù)包的版本號,否則部署失敗。
- 快速修復(fù)包的簽名信息和待修復(fù)的應(yīng)用的簽名信息必須一致,否則會部署失敗。
- 新的應(yīng)用版本發(fā)布安裝時,會清理掉快速修復(fù)包。
快速修復(fù)包結(jié)構(gòu)
上圖是HarmonyOS應(yīng)用程序發(fā)布的快速修復(fù)的包格式
- 從圖中可以看出包含兩種包格式:
appqf(Application Quick Fix)
appqf與應(yīng)用的app pack包是一一對應(yīng)關(guān)系,具體可參考應(yīng)用程序包結(jié)構(gòu)的介紹。
- appqf包是HarmonyOS應(yīng)用用于發(fā)布到應(yīng)用市場的單元,不能夠直接安裝到設(shè)備上。
- 它是由一個或多個hqf(Harmony Ability Package Quick Fix)組成,這些hqf包在應(yīng)用市場會從appqf包中拆分出來,再被分發(fā)到具體的設(shè)備上。
- appqf包上架到應(yīng)用市場前要有開發(fā)者的簽名信息。
hqf(Harmony Ability Package Quick Fix)
hqf包是修復(fù)HAP中問題的快速修復(fù)包,用于安裝到設(shè)備上的快速修復(fù)單元。一個hqf可以包含.abc的快速修復(fù)文件,.so的快速修復(fù)文件和描述該包的配置文件。
- .abc文件:應(yīng)用中修改后的ts代碼,編譯后生成的字節(jié)碼文件。
- libs目錄:存放.so庫文件的差分文件,以.so.diff為后綴。區(qū)分的不同的系統(tǒng)cpu架構(gòu),例如arm平臺、x86平臺。
patch.json:
該文件用于描述hqf包版本信息的配置文件,由開發(fā)者填寫,具體內(nèi)容如下:
- {
- "app" : {
- "bundleName" : "com.ohos.quickfix",
- "versionCode" : 1000000,
- "versionName" : "1.0.0",
- "patchVersionCode" : 1000000,
- "patchVersionName" : "1.0.0"
- },
- "module" : {
- "name" : "entry",
- "type" : "patch",
- "deviceTypes" : [
- "default",
- "tablet"
- ],
- "originalModuleHash" : "11223344556677889900"
- }
- }
具體字段說明:
字段 | 類型 | 說明 | 備注 |
---|
bundleName | string | 對應(yīng)應(yīng)用的包名。 | 不可缺省 |
versionCode | int | 對應(yīng)應(yīng)用版本號。 | 不可缺省 |
versionName | string | 對應(yīng)應(yīng)用的版本名稱。 | patch類型不可缺省 |
patchVersionCode | int | 補丁包的版本號。 | 不可缺省 |
patchVersionName | string | 補丁包的版本名稱。 | patch類型不可缺省 |
name | string | 對應(yīng)應(yīng)用的moduleName,用來修復(fù)該module的。 | 不可缺省 |
type | string | 對應(yīng)補丁包的類型,當(dāng)前可選擇為patch。 | 不可缺省 |
deviceTypes | array | 補丁包支持的設(shè)備類型。 | 不可缺省 |
originalModuleHash | string | 原始module Name對應(yīng)包的哈希值,可采用SHA256生成器自行生成。 | 不可缺省 |
快速修復(fù)TS編譯后的文件
上圖是通過TS代碼編譯工具生成快速修復(fù).abc文件的流程:
- 原始應(yīng)用編譯時,生成.abc文件和.map文件。.abc是TS代碼編譯后的字節(jié)碼文件,應(yīng)用運行時使用該文件。.map文件是通過TS代碼編譯工具編譯TS代碼時生成的中間文件,記錄有代碼中的函數(shù)、類等信息。
- 修復(fù)問題后的應(yīng)用編譯時,根據(jù)上述的.map文件,結(jié)合當(dāng)前的TS代碼,得到差異部分,根據(jù)差異部分生成快速修復(fù)的.abc文件。該.abc文件也既是最終要放到hqf包中的快速修復(fù)文件。
快速修復(fù)C++編譯后的文件
上圖是通過差分工具生成快速修復(fù).so文件的流程:
- 原始應(yīng)用C++源碼通過編譯工具生成.so文件,該.so文件供應(yīng)用在運行時使用。
- 修復(fù)問題后的C++源碼通過編譯工具生成.so文件,該.so文件和原應(yīng)用的.so文件通過差分工具生成.so快速修復(fù)文件,該.so快速修復(fù)文件也既是最終要放到hqf包中的快速修復(fù)文件。
快速修復(fù)包的發(fā)布部署流程
上圖涉及到的模塊如下:
- DevEco Studio:用于開發(fā)代碼的項目工程的集成開發(fā)環(huán)境。在快速修復(fù)的工程中能夠給予原應(yīng)用的代碼和修復(fù)問題后的代碼生成快速修復(fù)包,并完成快速修復(fù)包的簽名。
- 應(yīng)用市場服務(wù)器端:開發(fā)者將開發(fā)完成的快速修復(fù)包上架到該平臺,平臺會對上架的包進行簽名驗證、風(fēng)險掃描和拆包重簽名等,然后分發(fā)到客戶端。
- 應(yīng)用市場客戶端:用于接收應(yīng)用市場服務(wù)器端分發(fā)的快速修復(fù)包,并觸發(fā)安裝快速修復(fù)包。
- 包管理服務(wù):設(shè)備上用于管理應(yīng)用包及快速修復(fù)包安裝和卸載的系統(tǒng)服務(wù)程序。
- 快速修復(fù)引擎:設(shè)備上用于管理應(yīng)用切換使用快速修復(fù)包的系統(tǒng)服務(wù)程序。如果應(yīng)用正在運行,快速修復(fù)引擎接收到有快速修復(fù)包部署完成會通知應(yīng)用切換快速修復(fù)包,進而使得應(yīng)用使能快速修復(fù)包。
- 文件系統(tǒng):應(yīng)用及快速修復(fù)包部署在設(shè)備上的位置。
上圖是快速修復(fù)包的端到端發(fā)布部署流程:
- 開發(fā)者通過DevEco Studio,基于原應(yīng)用的源碼和修復(fù)后的源碼編譯打包生成快速修復(fù)包,并通過DevEco Studio完成快速修復(fù)包的簽名。
- 將生成的帶有簽名的快速修復(fù)包上架到應(yīng)用市場,應(yīng)用市場通過驗證簽名、風(fēng)險掃描和拆包重簽名后進行分發(fā)。
- 設(shè)備側(cè)的應(yīng)用市場客戶端檢測到應(yīng)用市場服務(wù)器端有新上架的快速修復(fù)包會下載最新版本的快速修復(fù)包,接著通過系統(tǒng)中的包管理服務(wù)來安裝部署快速修復(fù)包。
- 快速修復(fù)包部署完成后,再由快速修復(fù)引擎觸發(fā)應(yīng)用使用快速修復(fù)包,進而保證用戶使用到問題修復(fù)后的功能。
快速修復(fù)包的調(diào)試流程
- DevEco Studio中暫時還沒有集成快速修復(fù)的能力。當(dāng)前階段,HarmonyOS為開發(fā)者提供了命令行的調(diào)試開發(fā)工具可供使用,具體的調(diào)試開發(fā)流程如下:
- 基于原應(yīng)用的源碼和修復(fù)后的源碼,通過命令行工具可以編譯生成快速修復(fù)包,并通過命令行簽名工具完成對快速修復(fù)的包的簽名。通過命令行調(diào)試開發(fā),要對.hqf包簽名,并通過命令行工具將.hqf包安裝到設(shè)備上,.appqf包不能直接安裝到設(shè)備上。
- 通過快速修復(fù)的命令行工具,將.hqf包安裝部署到設(shè)備上。
- .hqf包安裝部署完成后,回調(diào)通知快速修復(fù)引擎觸發(fā)應(yīng)用使用快速修復(fù)包,進而保證用戶使用到問題修復(fù)后的功能。
更多建議: