概要了解,先要明確這幾個功能具體是做什么的,是為了解決什么問題
1.組件化
組件化首先要做的事是將app按功能模塊進行拆分,降低各個模塊間的耦合,并且可以將每個模塊單獨編譯運行,也可以進行全量打包,可分可合。那說到這里,好處就顯而易見了,在團隊開發中可以讓功能模塊責任到人,各個模塊開發同步進行,增強協作能力以及效率。全量或者拆分運行打包依靠的是gradle的靈活配置能力。
總結:組件化可拆分可全量打包,組件可單獨測試,打包,提高開發效率。
2.插件化
插件化見名知意,像插件一樣可插拔。但是需要提前預留插件的插槽,也就是對應插件的apk。實際開發中,會預先將一個插件打包成一個apk,放置到主module下的assets目錄,而后在運行過程中,如果需要,先將assets目錄下的apk復制到app的目錄下,讀取到插件apk,再通過反射(DexClassLoader)從對應的dex文件中讀取到對應的類進行加載。但是該功能無法直接繞過Android的清單文件注冊(并不絕對,比較麻煩),所以如果進行頁面的加載是不能使用Activity的,只能加載Fragment。當然,預留的插件app也可以通過動態部署的方式去更新放置到app目錄下,故可以變相的減少app的體積,提升用戶體驗。
總結:插件化可以通過動態部署的方式,減少apk體積,增強功能上的靈活性。
注意:插件化對插件的行為是已經預測到的有計劃的。所以會預先留出加載的邏輯,只是相關的類文件首次打包不存在,這也是區別于熱更新的地方。
3.熱更新/熱修復
熱更新主要用于在線上環境,若線上出現bug或者需要更新一些功能,使用熱更新適合的時候進行更新。該行為不需要像插件化一樣預留“插槽”,哪里需要補哪里。