? ? ? 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)該有吧基本的認識了富拗,趕快學(xué)習(xí)起來吧臼予。