快速修復(fù)概述

2024-01-25 11:56 更新

快速修復(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)容如下:

        1. {
        2. "app" : {
        3. "bundleName" : "com.ohos.quickfix",
        4. "versionCode" : 1000000,
        5. "versionName" : "1.0.0",
        6. "patchVersionCode" : 1000000,
        7. "patchVersionName" : "1.0.0"
        8. },
        9. "module" : {
        10. "name" : "entry",
        11. "type" : "patch",
        12. "deviceTypes" : [
        13. "default",
        14. "tablet"
        15. ],
        16. "originalModuleHash" : "11223344556677889900"
        17. }
        18. }

        具體字段說明:

        字段

        類型

        說明

        備注

        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ā)布部署流程:

  1. 開發(fā)者通過DevEco Studio,基于原應(yīng)用的源碼和修復(fù)后的源碼編譯打包生成快速修復(fù)包,并通過DevEco Studio完成快速修復(fù)包的簽名。
  2. 將生成的帶有簽名的快速修復(fù)包上架到應(yīng)用市場,應(yīng)用市場通過驗證簽名、風(fēng)險掃描和拆包重簽名后進行分發(fā)。
  3. 設(shè)備側(cè)的應(yīng)用市場客戶端檢測到應(yīng)用市場服務(wù)器端有新上架的快速修復(fù)包會下載最新版本的快速修復(fù)包,接著通過系統(tǒng)中的包管理服務(wù)來安裝部署快速修復(fù)包。
  4. 快速修復(fù)包部署完成后,再由快速修復(fù)引擎觸發(fā)應(yīng)用使用快速修復(fù)包,進而保證用戶使用到問題修復(fù)后的功能。

快速修復(fù)包的調(diào)試流程

  • DevEco Studio中暫時還沒有集成快速修復(fù)的能力。當(dāng)前階段,HarmonyOS為開發(fā)者提供了命令行的調(diào)試開發(fā)工具可供使用,具體的調(diào)試開發(fā)流程如下:
  1. 基于原應(yīng)用的源碼和修復(fù)后的源碼,通過命令行工具可以編譯生成快速修復(fù)包,并通過命令行簽名工具完成對快速修復(fù)的包的簽名。通過命令行調(diào)試開發(fā),要對.hqf包簽名,并通過命令行工具將.hqf包安裝到設(shè)備上,.appqf包不能直接安裝到設(shè)備上。
  2. 通過快速修復(fù)的命令行工具,將.hqf包安裝部署到設(shè)備上。
  3. .hqf包安裝部署完成后,回調(diào)通知快速修復(fù)引擎觸發(fā)應(yīng)用使用快速修復(fù)包,進而保證用戶使用到問題修復(fù)后的功能。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號