概要了解备畦,先要明確這幾個(gè)功能具體是做什么的低飒,是為了解決什么問題
1.組件化
組件化首先要做的事是將app按功能模塊進(jìn)行拆分,降低各個(gè)模塊間的耦合萍恕,并且可以將每個(gè)模塊單獨(dú)編譯運(yùn)行逸嘀,也可以進(jìn)行全量打包,可分可合允粤。那說到這里崭倘,好處就顯而易見了,在團(tuán)隊(duì)開發(fā)中可以讓功能模塊責(zé)任到人类垫,各個(gè)模塊開發(fā)同步進(jìn)行司光,增強(qiáng)協(xié)作能力以及效率。全量或者拆分運(yùn)行打包依靠的是gradle的靈活配置能力悉患。
總結(jié):組件化可拆分可全量打包残家,組件可單獨(dú)測(cè)試,打包售躁,提高開發(fā)效率坞淮。
2.插件化
插件化見名知意茴晋,像插件一樣可插拔。但是需要提前預(yù)留插件的插槽回窘,也就是對(duì)應(yīng)插件的apk诺擅。實(shí)際開發(fā)中,會(huì)預(yù)先將一個(gè)插件打包成一個(gè)apk啡直,放置到主module下的assets目錄烁涌,而后在運(yùn)行過程中莲祸,如果需要裳擎,先將assets目錄下的apk復(fù)制到app的目錄下翩瓜,讀取到插件apk钙畔,再通過反射(DexClassLoader)從對(duì)應(yīng)的dex文件中讀取到對(duì)應(yīng)的類進(jìn)行加載。但是該功能無法直接繞過Android的清單文件注冊(cè)(并不絕對(duì)蜡峰,比較麻煩)瞬欧,所以如果進(jìn)行頁面的加載是不能使用Activity的僧凰,只能加載Fragment掂榔。當(dāng)然继效,預(yù)留的插件app也可以通過動(dòng)態(tài)部署的方式去更新放置到app目錄下症杏,故可以變相的減少app的體積装获,提升用戶體驗(yàn)。
總結(jié):插件化可以通過動(dòng)態(tài)部署的方式厉颤,減少apk體積穴豫,增強(qiáng)功能上的靈活性。
注意:插件化對(duì)插件的行為是已經(jīng)預(yù)測(cè)到的有計(jì)劃的逼友。所以會(huì)預(yù)先留出加載的邏輯精肃,只是相關(guān)的類文件首次打包不存在,這也是區(qū)別于熱更新的地方帜乞。
3.熱更新/熱修復(fù)
熱更新主要用于在線上環(huán)境司抱,若線上出現(xiàn)bug或者需要更新一些功能,使用熱更新適合的時(shí)候進(jìn)行更新黎烈。該行為不需要像插件化一樣預(yù)留“插槽”习柠,哪里需要補(bǔ)哪里。