? ? ? android原生應(yīng)用開發(fā)發(fā)展到今天,幾乎每個App都是巨無霸級的大小,手淘,優(yōu)酷這種應(yīng)用更是航母級別的應(yīng)用,一個應(yīng)用可能幾百人一起合作開發(fā),在應(yīng)用還小的時候大家可以甜蜜的合作,快速的迭代就像孩子小的時候每個人都喜歡,但隨著應(yīng)用越來越大,我們不得不面對的以下幾個問題:第一,團隊合作的效率越來越低,這是無法避免的,可能一個人的延期就會導(dǎo)致整個版本的延期,而人越多這個概率就是指數(shù)級別的增長。第二,潛在的bug越來越多,功能越多,隱藏的問題就自然就越多,一旦爆發(fā)可能帶來的影響會非常的大。第三,應(yīng)用越來越大,導(dǎo)致新功能的開發(fā)越來越受到限制,比如:android的方法數(shù)65535的限制,虛擬機內(nèi)存的限制,而且占用內(nèi)存越大的應(yīng)用在后臺被回收的可能性也就越大等等。當(dāng)然應(yīng)用越來越大絕不僅僅只有這么點問題。我們這里列舉的只是幾個比較明顯的問題。那這些問題該如何解決呢? 這就需要提到我們文章的核心熱修復(fù)與插件化技術(shù)了。
? ? ? 再講熱修復(fù)與插件化技術(shù)前呢大家首先要搞明白動態(tài)加載技術(shù),動態(tài)加載是安卓原生為我們提供的一種加載未安裝到手機系統(tǒng)的apk文件或者jia包中的類,這其中的核心技術(shù)就是對Classloader中的DexClassloader的合理的使用。這就為我們提供了一種思路,既然我們可以加載未安裝到android系統(tǒng)的一些特定格式文件中的class,那我們能不能讓應(yīng)用在運行期動態(tài)的去加載這些文件中的類,從而實現(xiàn)按我們的策略或者需求去加載我們想加載的類和資源呢。答案是肯定的,解決方案就是我們的熱修復(fù)與插件化技術(shù)的實踐。其實熱修復(fù)與插件化就是動態(tài)加載技術(shù)的不同的使用場景。下面我們就來分別介紹一下熱修復(fù)與插件化技術(shù)。
? ? ?熱修復(fù)也叫動態(tài)更新,從名字就可以很容易的理解它的作用,就是用來動態(tài)的修改我們應(yīng)用的缺陷的。以前我們在應(yīng)用產(chǎn)生bug以后,我們只能無奈的等待字啊一個版本的發(fā)布才能解決這個問題。但有了熱修復(fù)技術(shù)以后,那我們就無需等到下一個版本,可以立馬解決問題,生成patch文件,然后下發(fā)到用戶手機,讓我們的應(yīng)用去安裝了這個patch,patch文件安裝成功以后,就可以替換掉我們有問題的代碼,從而達到問題的解決。經(jīng)過15年的出現(xiàn),16年的發(fā)展到今天熱修復(fù)技術(shù)已經(jīng)已經(jīng)比較成熟了,比較有代表性的有alibaba的andfix和微信的tinker,兩種方案各有優(yōu)劣,andfix勝在patch文件可以立馬生效而無需應(yīng)用重啟,而tinker勝在不僅可以更新代碼還可以更新資源文件,技術(shù)沒有絕對的好與不好,適合自己的就是最好的。有了熱修復(fù)技術(shù)以后基本上就可以解決應(yīng)用越來越大帶來的潛在問題越來越多的問題。在對熱修復(fù)有了一定的了解后我們在來看插件化技術(shù)。
? ? ? 不同于熱修復(fù)的容易理解,插件化是一個不太容易被理解的概念,那究竟什么是插件化呢,插件化就是把一個大的應(yīng)用拆分成多個小的應(yīng)用,這些小的應(yīng)用相互配合實現(xiàn)和我們原來一個大應(yīng)用完全一樣的功能,這個過程就叫插件化,無論是手機淘寶,還是優(yōu)酷等應(yīng)用無一不采用這一技術(shù)進行插件化改造,而我也有幸參與了這個改造的過程,整個流程下來,我的感受是前期確實很繁瑣,各種修改重構(gòu),解耦合,組件化。但當(dāng)整個過程都走完以后,應(yīng)用的結(jié)構(gòu)變得非常的合理。各團隊間的功能不在那么強耦合,即使又耦合的地方也可以通過適當(dāng)?shù)募夹g(shù)去消除,例如:提取公共組件,AIDL等。插件化以后,我們每一個功能模塊都是一個獨立的小apk,完全按照我們開發(fā)小應(yīng)用的節(jié)奏,一切又變的那么的簡單。插件化技術(shù)比較成熟的是alibaba的Atlas和一個開源的框架small。二者又是各有千秋。Altas呢功能強大,完整,集合了插件化,動 態(tài)部署,遠程組件加載于一身,但同時學(xué)習(xí)成本和改造成本也非常的大,而small呢與它的名字一樣,專注于應(yīng)用的插件化改造這一點,讓他的上手非常的容易,如何選取技術(shù)方案就看大家的需求。兩個技術(shù)方案都非常棒。
? ? 好,說了這么多你對插件化與熱修復(fù)應(yīng)該有吧基本的認(rèn)識了,趕快學(xué)習(xí)起來吧。