1. 程式人生 > >android 熱更新

android 熱更新

熱更新的產生

線上版本出現嚴重的bug,需要重新發版。熱更新能快速的解決線上問題,不需要重新發版。

熱更新流程

  1. 線上檢測到嚴重的crash
  2. 拉出一個新的分支來修復線上問題
  3. 開發人員自測,專案測試人員測試,然後jenkins構建和補丁生成
  4. app通過推送或者主動拉取補丁檔案
  5. 把修復的程式碼同步到master分支上

主流熱更新框架

  1. 阿里 Dexposed
    是基於xposed hook方案,AOP框架。包括日誌記錄,效能統計,安全控制,事務處理。不僅可以定義hook自定義函式,也可以hookandroid Framework 的函式,然後用動態載入的技術讓APP載入一小塊java程式碼,需要用反射的技術,比較消耗效能

  2. 阿里 AndFix
    只專注於熱修復,能夠提供完善的apkpatch工具生成.apatch檔案

  3. Nuwa
    基於類載入器載入.dex檔案。技術結構是基於android的dex檔案分包的技術

android類載入機制

PathClassLoader:用於載入系統類和應用的類

DexClassLoader:用於載入一些dex檔案和一些jar包

熱更新原理

  1. dexElement 陣列
  2. ClassLoader 會遍歷這個陣列
    dexElement 會在基類的BaseClassLoader 中建立,會通過ClassLoader 去遍歷這個陣列,載入陣列中的dex檔案。當BaseClassLoader 載入到正確的類以後,就不會載入有問題的類。把修改的類檔案打包成dex檔案,讓正確的dex檔案排在dexElement陣列的最前面。