個(gè)人博客地址 http://dandanlove.com/
前言
Android隨著系統(tǒng)的升級(jí)和app自有業(yè)務(wù)的增漲,新技術(shù)的不斷涌現(xiàn)。在這個(gè)好多技術(shù)還沒(méi)學(xué)習(xí)就已過(guò)期的時(shí)代。雖然不能去吃透那些前輩的作品,但是技術(shù)的史上我們作為碼農(nóng)應(yīng)該要了解,畢竟曾經(jīng)出現(xiàn)的一個(gè)個(gè)技術(shù)名詞都代表“成長(zhǎng)”。

----------------2021:10:14----------------
從上面的概述來(lái)看其實(shí)組件化跟模塊化沒(méi)有明顯的區(qū)別;一個(gè)登錄功能可以是一個(gè)模塊也可以是一個(gè)組件,一個(gè)日期選擇控件可以是一個(gè)模塊,也可以是一個(gè)組件,因?yàn)椴还苁悄K化還是組件化,它們都有一個(gè)共同的目標(biāo):將一個(gè)大的軟件系統(tǒng)細(xì)化成一個(gè)個(gè)模塊或者組件,都是為了重用和解耦。因此沒(méi)有一個(gè)明確的界線去區(qū)分它們。
網(wǎng)上很多文章對(duì)于組件和模塊的定義也是不盡相同的,一些人認(rèn)為組件的粒度更細(xì),它只是具備單一功能與業(yè)務(wù)無(wú)關(guān)的組件,比如一個(gè)日歷選擇控件就認(rèn)為是一個(gè)組件。而模塊他們認(rèn)為就是業(yè)務(wù)模塊,顧名思義,就是按業(yè)務(wù)劃分而成的模塊。而另一部分人則相反。
在維基百科對(duì)模塊化的解釋中有這么一句:
A component is a similar concept, but typically refers to a higher level; a component is a piece of a whole system, while a module is a piece of an individual program
也就是認(rèn)為組件粒度較模塊要更大,所以本文對(duì)組件和模塊做出以下定義:
組件:側(cè)重于業(yè)務(wù),可編譯成單獨(dú)的app,一般只負(fù)責(zé)單一業(yè)務(wù),具備自身的生命周期(通常包含Android四大組件的一個(gè)或多個(gè),所以稱之為組件也更加貼切)
模塊:側(cè)重于功能,與業(yè)務(wù)無(wú)關(guān),比如自定義控件、網(wǎng)絡(luò)請(qǐng)求庫(kù)、圖片加載庫(kù)等
----------------------end--------------------
在談模塊化之前我們先看看說(shuō)組件化,現(xiàn)在大部分app隨著業(yè)務(wù)的增加都會(huì)將一個(gè)app分成多個(gè)模塊,每個(gè)模塊都是一個(gè)組件(Module)。
正常一個(gè)App中可以有多個(gè)module,但是一般只會(huì)有一個(gè)module是設(shè)置為application的,其他均設(shè)置為library,組件化開(kāi)發(fā)就是要每個(gè)module都可以運(yùn)行起來(lái),因此在開(kāi)發(fā)期間(Debug版本)每個(gè)module均設(shè)置為application,發(fā)布時(shí)(Release版本)設(shè)置為libs再進(jìn)行合并。
組件可以分為兩大類,一類是application組件,一類是libs組件,application組件是一個(gè)可運(yùn)行的app。libs組件可以作為application的依賴,但是自身不可作為程序運(yùn)行的存在。
模塊化粒度更小,更側(cè)重于業(yè)務(wù)的解耦,而組件化粒度稍大于模塊,更側(cè)重于組件的重用。
組件化:
- 避免重復(fù)造輪子,節(jié)省開(kāi)發(fā)維護(hù)成本;
- 每個(gè)組件都有自己獨(dú)立的版本,可以獨(dú)立的編譯,測(cè)試,打包和部署;
- 產(chǎn)品組件化后能夠?qū)崿F(xiàn)完整意義上的按需求進(jìn)行產(chǎn)品配置和銷售,用戶可以選擇使用那些組件,組件之間可以靈活的組建;
- 如果對(duì)外提供的接口沒(méi)有發(fā)生任何變化,升級(jí)其他組件完全不需要再進(jìn)行測(cè)試.
插件化
有了組件化為什么還要有插件化,如果我們向動(dòng)態(tài)的更新組件那么就需要插件化技術(shù)。插件化實(shí)際也是將app分為多個(gè)部分,宿主和插件能分開(kāi)編輯、并行開(kāi)發(fā),這個(gè)和組件化相同。只不過(guò)插件化考慮了插件的按需下載以及動(dòng)態(tài)升級(jí)。
APP熱修復(fù)的概念:
APP修復(fù)是針對(duì)修復(fù)app中的bug場(chǎng)景來(lái)定義的。當(dāng)我們已上線的app出現(xiàn)bug的時(shí)候,我們想在用戶不知情的情況下修復(fù)這個(gè)bug,那么就會(huì)用到熱修復(fù)。
APP熱修復(fù)的實(shí)現(xiàn)原理:
- 首先,生成新版本的apk與舊版本的apk的差異補(bǔ)丁包文件;
- 其次,使用熱修復(fù)框架的Api在Application中去嘗試加載指定路徑的補(bǔ)丁差異包;
- 最后,只需要將補(bǔ)丁差異包寶貝到對(duì)應(yīng)路徑,代開(kāi)有bug的App,在Applcation創(chuàng)建的時(shí)候就會(huì)將補(bǔ)丁包文件加載到內(nèi)存中并且替換對(duì)應(yīng)的方法。