一次搞懂----模塊化、組件化、插件化和熱修復

隨着web前端技術的發展,插件化技術已逐漸被拋棄,可是理解這三者的概念和區別,對編程思想的提升仍有幫助。前端

1 模塊化

狹義上說:
是指Android studio支持了多個module開發時,提出的模塊化概念。
具體實踐:把經常使用的功能、控件、基礎類、第三方庫、權限等公共部分抽離封裝,把業務拆分紅N個模塊進行獨立(module)的管理。
而全部的業務組件都依賴於封裝的基礎庫,業務組件之間不作依賴,這樣的目的是爲了讓每一個業務模塊能單獨運行。web

廣義上說:
將一個複雜業務實現,根據功能、頁面或者其餘進行不一樣粒度的劃分程不一樣的模塊,模塊之間解耦,分別進行實現,也就是編程的模塊化思想。編程

模塊化的特色是:模塊之間解耦,能夠獨立管理。併發

2 組件化

將一個app的代碼拆分紅幾份獨立的組件,組件之間是低耦合的,能夠獨立編譯打包;也能夠將組件打包到一個apk中。app

【沒有組件化的缺點】:框架

  • (1)項目可維護性降低。隨着項目的增長,即便有作分包目錄,可是項目會逐漸失去層次感,可讀性、可維護性降低
  • (2)開發和調試效率低。開發和調試時,修改了一個小功能,可是須要從新build整個項目才能看到結果,耗費時間
  • (3)易阻斷不一樣業務模塊的併發開發。一個業務模塊的小bug,可能阻斷其餘業務模塊的開發和調試,不一樣業務模塊的併發開發會被阻斷。
  • (4)版本管理困難。多人聯合開發時,在版本管理中容易出現衝突和代碼覆蓋問題。

【組件化的拆分】模塊化

  • 按照業務(功能)劃分各個業務組件模塊。

【組件化後的優勢】組件化

  • (1)每一個模塊可獨立編譯,提升了編譯速度;
  • (2)開發只負責本身的模塊,還能夠再作的隔離一些,每一個業務線只可見本身業務模塊的代碼,避免了誤修改和版本管理問題。
  • (3)公共的Lib依然是個獨立模塊

與模塊化的區別:是每一個模塊的角色的轉換,一個組件能夠獨立編譯打包,也能夠做爲lib集成到整個apk中ui

 

阿里的  Arouter 開源框架.net

3 插件化

插件化是將一個apk根據業務功能拆分紅不一樣的子apk(也就是不一樣的插件),每一個子apk能夠獨立編譯打包,最終發佈上線的是集成後的apk。在apk使用時,每一個插件是動態加載的,插件也能夠進行熱修復和熱更新。

  • 從技術上講,就是解決如何啓動未安裝的apk裏面的類(主要是四大組件)。
  • 主要問題:如何加載類、如何加載資源、如何管理組件生命週期。

與組件化的主要區別:

  • 形式上的區別,組件化的單位是module,插件化的單位是apk
  • 關注點不一樣,插件化更關注動態加載、熱更新、熱修復等‘插拔’技術。

組件化與插件化詳細對比

技術 單位 實現內容 靈活性 特性 靜動態

組件化

module 是解耦與加快編譯,隔離不須要關注的部分 按加載時機切換,是做爲lib,仍是apk 組:組原本就是一個系統,每一個組件不是真正意義上的獨立模塊 靜態加載
插件化 apk 是解耦與加快編譯,同時實現熱插拔也就是熱更新 加載的是apk,能夠動態下載,動態更新,比組件化更靈活 插:是獨立的apk,每一個插件能夠做爲一個徹底獨立的apk運行,也能夠和其餘插件集成爲大apk 動態加載,只用真正使用某個插件時,才加載該插件

Atlas

DroidPlugin

-
http://blog.csdn.net/wangbaochu/article/details/50518536

https://juejin.im/entry/57b2833a0a2b58006334e73a

https://juejin.im/entry/57d746dbd20309006a0b168e

https://juejin.im/entry/583bb48c61ff4b006cbf091b

https://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=2651113434&idx=1&sn=99a473c6fad2f7b366b2cba2afb96f7a&chksm=844c6e07b33be7112222c0d78be23979912f12d6c99ad2c7bfac766e67e4be4619709f170b09&mpshare=1&scene=1&srcid=0628gRj4w4sW8cxYupnu3TXk&pass_ticket=1bsPf4vfDjr2a7E45NfjrXCTMdvwi6/DgVwYPA7Byx5Zi5zQCgScguDpY/3gXkdO#rd

https://juejin.im/entry/58ad2730570c35006bcde6fb

4 熱修復

首先須要明確的一點,插件化和熱修復不是同一個概念,雖然站在技術實現的角度來講,他們都是從系統加載器的角度出發,不管是採用hook方式,亦或是代理方式或者是其餘底層實現,都是經過「欺騙」Android 系統的方式來讓宿主正常的加載和運行插件(補丁)中的內容;可是兩者的出發點是不一樣的。插件化顧名思義,更可能是想把須要實現的模塊或功能當作一個獨立的提取出來,減小宿主的規模,當須要使用到相應的功能時再去加載相應的模塊。熱修復則每每是從修復bug的角度出發,強調的是在不須要二次安裝應用的前提下修復已知的bug。

類加載原理:

提及熱修復就不得不提類的加載機制,和常規的JVM相似,在Android中類的加載也是經過ClassLoader來完成,具體來講就是PathClassLoader 和 DexClassLoader 這兩個Android專用的類加載器,這兩個類的區別以下:

  • PathClassLoader:只能加載已經安裝到Android系統中的apk文件(/data/app目錄),是Android默認使用的類加載器。
  • DexClassLoader:能夠加載任意目錄下的dex/jar/apk/zip文件,也就是咱們一開始提到的補丁。


(圖片轉自網路)

相信大部分APP軟件的開發流程都是上面那樣。

版本上線以後,用戶或者市場反饋說有bug,而後立馬加班緊急修復,接着又發佈版本上線;而後又反饋回來講有新的bug,好嘛,接着修復而後發新版本上線;這樣一直修復bug發版本上線……

雖然軟件的bug避免不了,可是老是發佈新版本,讓用戶去下載更新使用,會讓不少用戶失去耐心和信息。嚴重影響用戶使用和體驗,代價是很大的!

Andfix

Hotfix

Tinker

QFix

Amigo

Robust

Sophix

相關文章
相關標籤/搜索