在剛剛過去的云棲大會上,手淘宣布其移動容器化框架Atlas將于2017年年初開源,對這個框架,在過去團(tuán)隊對外部做過一些分享,外界也一直對其十分關(guān)注,到現(xiàn)在它終于即將開源了。
本文將介紹Atlas的設(shè)計思路和手淘對容器化、組件化和動態(tài)化上的思考,主要內(nèi)容來自阿里巴巴資深技術(shù)專家倪生華(玄黎)在云棲大會上的分享。
Atlas是什么
2013年,手淘航母戰(zhàn)略的制定,帶來了業(yè)務(wù)和開發(fā)人員的翻倍膨脹。從不到100人猛增四五倍,同時業(yè)務(wù)數(shù)量大增,整個客戶端的架構(gòu)和發(fā)版節(jié)奏受到極大挑戰(zhàn),Atlas作為之前手淘客戶端的基礎(chǔ)框架,進(jìn)行了一次大的重構(gòu),形成了今天的Atlas。
Atlas是一個Android客戶端容器化框架,主要提供了組件化、動態(tài)性、解耦化的支持。支持工程師在工程編碼期、Apk運(yùn)行期以及后續(xù)運(yùn)維修復(fù)期的各種問題。
在工程期,實現(xiàn)工程獨(dú)立開發(fā),調(diào)試的功能,工程模塊獨(dú)立。
在運(yùn)行期,實現(xiàn)完整的組件生命周期的映射,類隔離等機(jī)制。
在運(yùn)維期,提供快速增量的更新修復(fù)能力,快速升級。
Atlas是工程期和運(yùn)行期共同起作用的框架,它的特點(diǎn)是盡量將一些工作放到工程期,這樣來保證運(yùn)行期的簡單,穩(wěn)定。
目前,Atlas在淘系A(chǔ)pp的應(yīng)用十分廣泛,手淘自身超過60+業(yè)務(wù)組件、20個協(xié)作團(tuán)隊,以及百萬行級別代碼都在Atlas上運(yùn)行,其快速迭代能力讓應(yīng)用的發(fā)布周期從每月到每周再到隨時發(fā)布,在過去半年里就發(fā)布了446次。另外Atlas本身非常輕量,只有90多個類,支持大小型App開發(fā),從大型的手淘到相對小型的阿里健康等都是用的這個框架。其穩(wěn)定性也接受了考驗,兼容Android 4.x以上系統(tǒng)版本。整體手淘的Crash率一直維持在萬分之五左右,因為容器導(dǎo)致的crash占比小于百分之一。
從這個意義上來說,Atlas首先要解決的問題是大規(guī)模團(tuán)隊的協(xié)作問題,訴求包括并行開發(fā)、快速迭代、工程解耦,然后解決的問題是客戶端動態(tài)更新的問題。手淘內(nèi)部思考的解決方案就是組件化。
Atlas組件化實現(xiàn)
組件化,業(yè)界稱為插件化,不過這里Atlas的組件化和現(xiàn)在的插件化有一些不一樣的地方。組件化是需要去知道組件的功能,設(shè)計更規(guī)范。

(手淘APK包目錄結(jié)構(gòu))
這是一個手機(jī)淘寶的APK包,第一層目錄上與標(biāo)準(zhǔn)的APK是完全一樣的,在APP會有很多的so文件,如果解開來看的話,它的結(jié)構(gòu)類似于完整的APK,但本身并不能獨(dú)立運(yùn)行,它跟很多插件化的差別是在運(yùn)行期,它是運(yùn)行在整個容器里的,每一個組件都是獨(dú)立的Bundle。

從模塊來劃分,手淘APK可以分為兩層,上層是經(jīng)過拆分的業(yè)務(wù)Bundle,掃碼、評價、詳情,各個業(yè)務(wù)之間可以進(jìn)行功能的調(diào)用,可以通過路由調(diào)度到其他業(yè)務(wù)方。下層是共享的底層中間件,向業(yè)務(wù)方開放各種能力,如網(wǎng)絡(luò)庫、圖片庫等,會在容器里進(jìn)行統(tǒng)一地把控,這樣做的好處是包做到盡可能小,第二是性能佳。

這一塊是Atlas的整體設(shè)計,分為五層:
第一層我們稱之為Hack層,包括OS Hack toolkit & verifier,這里我們對系統(tǒng)能力做一些擴(kuò)展,然后做一些安全校驗。
第二層是Bundle Franework,就是我們的容器基礎(chǔ)框架,提供Bundle管理、加載、生命周期、安全等一些最基本的能力。
第三層是運(yùn)行期管理層,包括清單,我們會把所有的Bundle和它們的能力列在一個清單上,在調(diào)用時方便查找;另外是版本管理,會對所有Bundle的版本進(jìn)行管理;再就是代理,這里就是和業(yè)界一些插件化框架機(jī)制類似的地方,我們會代理系統(tǒng)的運(yùn)行環(huán)境,讓Bundle運(yùn)行在我們的容器框架上;然后還有調(diào)試和監(jiān)控工具,是為了方便工程期開發(fā)調(diào)試。
第四層是業(yè)務(wù)層了,這里我們向業(yè)務(wù)方暴露了一些接口,如框架生命周期、配置文件、工具庫等等。
最上面一層是應(yīng)用接入層,就是我們的業(yè)務(wù)代碼了。
所以Atlas作為一個框架提供了相對完整的能力,業(yè)務(wù)層的開發(fā)可以在框架生命周期的各個環(huán)節(jié)做一些自定義的動作,也可以自由的調(diào)用系統(tǒng)、框架,乃至其它組件釋放的能力。