談談Android(高階)

一、Android設(shè)計的現(xiàn)實意義

??架構(gòu)的工程意義在于:定義并解決一類問題,為需求到實現(xiàn)的平穩(wěn)過渡提供保障紧显。傳統(tǒng)意義的Android架構(gòu)已被人熟知,但不同角色的視角不同缕棵,例如認為Runtime和框架是其核心孵班、或者將Android看做是一種特異性JVM平臺涉兽、還有從嵌入式出發(fā)將其看做是Linux…… 實際上,Android是極少數(shù)幾個用設(shè)計來解決自身發(fā)展問題的系統(tǒng)篙程,其核心在于通過硬件抽象枷畏、組件化、接口層三種能力來為發(fā)展提供基礎(chǔ)虱饿,并為諸多變數(shù)預留大量可操作的空間拥诡。

Android系統(tǒng)架構(gòu)

1.1 發(fā)展的前提:硬件抽象

??2008年,我們邁入3G時代前夕郭厌,基礎(chǔ)設(shè)施的變革讓移動領(lǐng)域充滿變數(shù),無論設(shè)備雕蔽、硬件還是軟件都均未定型折柠。擅長架構(gòu)和軟件的Google在這一領(lǐng)域要獲得生存和長足發(fā)展,需要團結(jié)一切可能的批狐、甚至是未知的力量扇售,取得移動運營商、芯片供應商嚣艇、手機制造商的支持則是生存的第一步承冰。

??硬件抽象層[(HAL)在一定程度上起到這樣的目的:它為移動領(lǐng)域五花八門、標準不統(tǒng)一的硬件驅(qū)動定義標準接口食零,避免Android過分依賴Linux困乒,讓后續(xù)的擴展和整機集成更加高效,滿足了手機制造商的重要訴求贰谣;同時還起到隔離Linux內(nèi)核的作用娜搂,避免廠商充滿硬件秘密的驅(qū)動源碼受GPL協(xié)議影響而開源,保障了芯片等硬件制造商的核心利益吱抚。傳統(tǒng)手機OS的定制和集成流程需要修改大量代碼百宇,負擔不少,從這個角度來看Android HAL其設(shè)計是領(lǐng)先的秘豹。結(jié)合AOSP優(yōu)良的代碼分支携御、模塊管理,加上基于GNU automake巨集形成的Android build system既绕,廠商享受到超越以往的便捷啄刹。

??然而HAL并無固定做法,Android 8.0之前凄贩,最初大量采用HAL舊版方式鸵膏,表現(xiàn)為framework直接加載*.so并依賴,主要集中在網(wǎng)絡(luò)怎炊、藍牙等模塊谭企;舊版方式導致framework與具體驅(qū)動接口耦合過緊廓译,后來形成HAL傳統(tǒng)方式,即提供一定規(guī)范和接口進行改進债查,從而減少直接耦合非区,但每次廠商支持新版Android依舊有大量改動和適配;為更有效地解決這一問題盹廷,Android 8.0開啟Treble項目征绸,從此芯片廠商能通過基于Binder的HIDL提供穩(wěn)定接口,制造商則可不受芯片廠商影響而直接更新Framework俄占,甚至獲得無需重新編譯HAL即可OTA的能力管怠。


Android對硬件驅(qū)動的設(shè)計

??受益于HAL這一設(shè)計,Google在全球獲得更廣泛的支撐缸榄,尤其是Android 8.0在國內(nèi)廠商的迅速適配可見一斑渤弛。HAL為Android設(shè)備量的持續(xù)增長提供了基礎(chǔ),并促進有實力的廠商向設(shè)備上層及基礎(chǔ)設(shè)施兩個領(lǐng)域縱深發(fā)展甚带,體現(xiàn)在掌握核心技術(shù)的廠商(如高通她肯、華為、MTK)鹰贵,通過不斷建設(shè)系統(tǒng)能力來強化競爭力(支持5G標準晴氨、硬件能力、軟硬結(jié)合以及系統(tǒng)能力的深度定制等)碉输,而具備渠道和資源整合優(yōu)勢的手機制造商(華為籽前、OPPO、小米敷钾、VIVO等)聚假,則立足OS持續(xù)構(gòu)建更高效的應用來拓展版圖(UI、推送闰非、商店膘格、輕應用等),這都體現(xiàn)出Android HAL對整個產(chǎn)業(yè)的凝聚和影響财松,間接彌補Android自身的諸多不足瘪贱。

1.2 能力的樞紐:組件化

??對能力進行如何組織和復用是架構(gòu)的最大挑戰(zhàn),借鑒現(xiàn)有能力是發(fā)展的捷徑辆毡。無論是Mircosoft的COM菜秦,還是OMG的CORBA,或是從EJB到Spring舶掖、從SOA到Serverless球昨,隨著基礎(chǔ)設(shè)施如網(wǎng)絡(luò)、終端設(shè)備的能力提升眨攘,這些技術(shù)的發(fā)展呈現(xiàn)出從重量到輕量主慰、從對中心(總線)的重度依賴到輕量級依賴的趨勢嚣州。Android充分結(jié)合各領(lǐng)域先進技術(shù),并基于移動端資源受限這一最大特色共螺,形成了自身的技術(shù)特色:AIDL衍生自復雜的CORBA IDL该肴,組件由SOA精簡而來,各獨立生老病死的System Service類似一個個微服務藐不,Binder可以看做是對一種弱化總線匀哄、性能更好、可點對點通信的DBUS雏蛮,UI布局系統(tǒng)則極大程度受到SWING的影響涎嚼、manifest實際上就是APP與系統(tǒng)通信所必須的組件接口描述文件......
??上面提到的領(lǐng)域技術(shù)的確有利于Android發(fā)展,但遠遠不夠挑秉》ㄌ荩回想之前談到的HAL以及整體架構(gòu),我們看到Android實際上就是個大雜燴衷模,使用的是諸多技術(shù)的混合鹊汛。過去除Palm等Web OS外蒲赂,無論是基于Linux/Unix構(gòu)建的系統(tǒng)如Meego阱冶,還是Symbian、MTK滥嘴、UCOS木蹬、WindowsCE,無論是實時系統(tǒng)還是非實時系統(tǒng)若皱,這些移動端系統(tǒng)都以C/C++為主且小巧精悍镊叁,對內(nèi)存使用和要求極為考究,雖然滿足了資源受限設(shè)備的使用訴求但帶來了門檻走触;虛擬機類的平臺如KJava晦譬、.NET on Windows Phone雖然內(nèi)存使用和能耗方面比較大方,卻勝在研發(fā)效率和容錯性互广,因而受到不少開發(fā)者歡迎敛腌。
??所以選擇混合架構(gòu)對于缺乏完整移動領(lǐng)域產(chǎn)業(yè)鏈支撐的Google既符合其自身技術(shù)理念、又勝算最大惫皱,于是量身定制的組件化能力便肩負起這一使命像樊,使得各組件得到有機組合、應用之間以及應用和系統(tǒng)的溝通更為明確和有約束旅敷,最終幫助整個系統(tǒng)靈活運轉(zhuǎn)生棍,能力被迅速放大。
??觀察Android系統(tǒng)的啟動運行流程以及APP對系統(tǒng)能力的使用媳谁,可以發(fā)現(xiàn)其各類能力已按照組件化標準和粒度進行組織(能力的注冊發(fā)現(xiàn)涂滴、接口和通信的標準化友酱、運行空間的隔離等),讓快速迭代的手機硬件和持續(xù)升級的系統(tǒng)能力以最小代價透出氢妈,將復用的價值在移動設(shè)備系統(tǒng)上具體化并最大化粹污,從而具備更高的靈活性和兼容性;其背后軟件工程的意義在于為軟件需求首量、設(shè)計之間架起一座橋梁壮吩,解決了系統(tǒng)結(jié)構(gòu)和研發(fā)需求向?qū)崿F(xiàn)平坦過渡的問題。


Android系統(tǒng)進程架構(gòu)概要
使用設(shè)備能力的典型調(diào)用路徑

??當然加缘,歷史上其他公司面臨這類挑戰(zhàn)時也有不一樣的想法鸭叙,例如Windows Phone 8.0選擇了另外一條路,無論是提供媲美JAVA的C#及VB.NET框架拣宏、還是基于Sliverlight Dependency Property + XAML的UI系統(tǒng)沈贝、甚至是為了支持C++研發(fā)出來的C++/CX及一套運行時,都仿佛無時無刻標榜著其系統(tǒng)技術(shù)的多樣化與復雜性勋乾,算得上是一場技術(shù)盛宴宋下。

??Meego則是另外一個例子,被期待救Nokia于危難辑莫,并由Intel聯(lián)袂推出学歧,通過各種開源能力的組合來完成系統(tǒng)的建設(shè),如Linux內(nèi)核+QEMU模擬器+QT+QML界面各吨,但實際上曇花一現(xiàn)枝笨。

1.3 應用的基礎(chǔ)-接口層

??系統(tǒng)能力基本就緒,如何迎來更多開發(fā)者對Android長遠發(fā)展至關(guān)重要揭蜒。選擇JAVA作為上層語言横浑,既需要勇氣又足夠彰顯其野心;為迎合資源受限這一移動領(lǐng)域過去屉更、現(xiàn)在也是未來的最大客觀事實徙融,其設(shè)計了基于寄存器架構(gòu)、可執(zhí)行文件更小的Dalvik虛擬機瑰谜,并通過凈室工程來高質(zhì)量實現(xiàn)欺冀,同時結(jié)合諸多工具對外提供了流暢的JAVA編程方式,擺脫類似MTK feature phone只能用KJava寫些小游戲的局限似舵,使得Android研發(fā)兼具JAVA的便利和不錯的性能脚猾。

??天有不測風云,SUN在09年4月被Oracle收購砚哗,距離Android 1.0發(fā)布還不到一年龙助。雖然最初選擇Apache Harmony來提供JAVA API十分明智,但卻遭遇到技術(shù)上不支持JAVA 7/8、版權(quán)上Oracle訴訟紛至沓來等諸多挑戰(zhàn)提鸟。為應對這一切军援,Google從Android N開始,將JAVA的支持變更為OpenJDK称勋。另外胸哥,Kotlin因為特性相近、又可被編譯為class或者dx字節(jié)碼赡鲜,也獲得了Google青睞和收編空厌。


.Android接口層的過去和未來

??實際上,之所以Android敢這么做银酬,從Android API的調(diào)用鏈路上能發(fā)現(xiàn)端倪:無論底層依賴嘲更、實現(xiàn)和流程如何變化,上層的使用形式并不會改變揩瞪。


Android內(nèi)部對調(diào)用鏈路的3種實現(xiàn)

??這意味著幾乎所有系統(tǒng)能力的核心赋朦,已在native library被實現(xiàn)殆盡,并結(jié)合上層提供良好屏蔽李破。這為其他語言實現(xiàn)Framework提供了可能宠哄,尤其是一門特性與JAVA相近的語言。所以是什么語言嗤攻、是不是kotlin都只事先設(shè)計規(guī)范下的一種合適的選擇毛嫉。


一種未來用kotlin代替java的極端可能

二、對于我們的象征意義和實踐

綜上所述屯曹,Android從三個方面來解決其發(fā)展的關(guān)鍵問題:

  • 硬件驅(qū)動:形成廠商的合作基礎(chǔ)狱庇,并反過來對整個產(chǎn)業(yè)施加影響惊畏。

  • 組件化:高效組織各種內(nèi)部能力恶耽,尋求自身的更快發(fā)展。

  • 接口層:滿足上層對系統(tǒng)和硬件能力的各種使用訴求颜启。

??移動互聯(lián)網(wǎng)產(chǎn)業(yè)巨頭發(fā)展因為起點以及執(zhí)行理念不同而有所不同偷俭,Apple圍繞著其App Store構(gòu)建其整個體系并精心維護,而且在現(xiàn)代化API編程缰盏、整機體驗涌萤、垂直領(lǐng)域技術(shù)如網(wǎng)絡(luò)/算法等各縱深領(lǐng)域走在前列;Google則用Android帶路口猜,需要在各個層面維護和團結(jié)不同力量來形成自己的發(fā)展特色负溪。所以,Android為系統(tǒng)如何發(fā)展提供了另外一種答案:除關(guān)注系統(tǒng)自身能力的發(fā)展济炎,如何維護好系統(tǒng)不斷發(fā)展的基礎(chǔ)和前提川抡、如何更好地暴露和讓外界使用系統(tǒng)能力也至關(guān)重要

三、結(jié)語

??結(jié)合傳統(tǒng)的C/S觀念须尚,服務端獲取的信息來源于各網(wǎng)絡(luò)終端崖堤,網(wǎng)絡(luò)+協(xié)議屏蔽或規(guī)范了外界對服務輸入的多樣性侍咱,使得服務端過去關(guān)注的是集群和高并發(fā),但現(xiàn)在無論是上云還是利用率密幔,背后都是業(yè)務楔脯、成本規(guī)模和邊際效應在驅(qū)動,這里面發(fā)展的代際主旨鮮明胯甩。但回到客戶端昧廷,由于受到環(huán)境和交互等多樣性直接影響,即便是動態(tài)性的技術(shù)也難以代表端側(cè)的全部甚至是主流偎箫。所以在某種局部技術(shù)比拼武功麸粮,成為過去客戶端的一種行業(yè)“潮流”。

??結(jié)合過往經(jīng)驗及Android設(shè)計镜廉,可以更系統(tǒng)性地看待這一現(xiàn)象:即除了滿足業(yè)務核心訴求(因為投入大量資源弄诲,必須、肯定要成娇唯,至少小成)齐遵,更應該關(guān)注技術(shù)如何更好地服務業(yè)務以及如何持續(xù)挖掘能力護城河這兩頭的問題。所以要打造和發(fā)展好一個系統(tǒng)塔插,除構(gòu)建系統(tǒng)各中堅能力外梗摇,還需維護好系統(tǒng)發(fā)展的前提、組織好各系統(tǒng)能力的內(nèi)聚想许、滿足好外部對系統(tǒng)的訴求伶授。

??以上是個人從Android系統(tǒng)設(shè)計到技術(shù)支撐系統(tǒng)發(fā)展的一點淺薄看法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末流纹,一起剝皮案震驚了整個濱河市糜烹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漱凝,老刑警劉巖疮蹦,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異茸炒,居然都是意外死亡愕乎,警方通過查閱死者的電腦和手機壁公,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來紊册,“玉大人,你說我怎么就攤上這事⌒角埃” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵示括,是天一觀的道長。 經(jīng)常有香客問我垛膝,道長鳍侣,這世上最難降的妖魔是什么吼拥? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮凿可,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘枯跑。我一直安慰自己惨驶,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布敛助。 她就那樣靜靜地躺著粗卜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纳击。 梳的紋絲不亂的頭發(fā)上续扔,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音焕数,去河邊找鬼纱昧。 笑死,一個胖子當著我的面吹牛百匆,可吹牛的內(nèi)容都是我干的砌些。 我是一名探鬼主播呜投,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼加匈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仑荐?” 一聲冷哼從身側(cè)響起雕拼,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粘招,沒想到半個月后啥寇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年辑甜,在試婚紗的時候發(fā)現(xiàn)自己被綠了衰絮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡磷醋,死狀恐怖猫牡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邓线,我是刑警寧澤淌友,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站骇陈,受9級特大地震影響震庭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜你雌,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一器联、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婿崭,春花似錦主籍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至颤绕,卻和暖如春幸海,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奥务。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工物独, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挡篓。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓官研,卻偏偏與公主長得像闯睹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子楼吃,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355