Android平台演進和未來展望

像程序那樣思考 發佈 2020-01-17T15:50:01+00:00

圖中是每個大版本中最具代表性的特徵標記在圖中,並不代表著該版本全部特徵,同樣專項計劃也不是只在某一個版本執行,比如續航和性能優化,每一個版本都在持續改進中,Treble計劃也一直在疊代至今。

引言

眾所周知,Android是谷歌開發的一款基於Linux的開源作業系統,每年疊代一次大版本升級。 小米、華為、OPPO、VIVO、三星等各大廠商對Android原生系統進行二次開發衍生出具有各家特色的系統(比如MIUI),為手機、電視、平板電腦、手錶等數十億設備提供平台支持,使得Android作為全球最受歡迎的移動作業系統。Android誕生至今已有10餘年,這一路走來Android遇到哪些問題?大版本升級朝著什麼方向演進?Android的未來如何?

1. 發展歷程

先來看看Android系統的發展過程,從2008年發布Android 1.0系統,直到2019年即將發布Android 10.0系統,下面列舉些重要的時間節點。

  • 2003年10月,Andy Rubin團隊創辦Android公司;
  • 2005年8月,谷歌收購Android公司,Andy Rubin擔任谷歌工程部副總裁繼續負責Android項目;
  • 2008年9月,谷歌正式發布Android 1.0系統;
  • 2011年1月,Android系統設備的用戶總數達到了1.35億,成為智慧型手機領域占有量第一的系統;
  • 2011年8月,Android手機占據全球智能機市場48%份額,並在亞太地區市場占據統治地位,終結了Symbian系統的霸主地位,躍居全球第一;
  • 2012年1月,谷歌Android Market已有10萬開發者,推出超過40萬應用;
  • 2013年11月,Android 4.4正式發布,系統更智能、UI更現代;
  • 2013年到2018年,這個階段安卓進入飛速發展期,被升級的有攝像頭、內存、機身、晶片等,原來的3.5寸小屏已退出歷史舞台,全面屏、劉海屏、水滴屏已成為當下主流螢幕方案。

2. 系統演進

系統演進趨勢:每個Android大版本的更新疊代前行,歷經10餘年,在用戶體驗、流暢性、續航、安全、隱私、機器學習等方面都取得較大的改進。圖中是每個大版本中最具代表性的特徵標記在圖中,並不代表著該版本全部特徵,同樣專項計劃也不是只在某一個版本執行,比如續航和性能優化,每一個版本都在持續改進中,Treble計劃也一直在疊代至今。

  • 從Android 1.0發展到Android 4.0,系統各項功能和特性疊代到一個較完善的階段;
  • Android 4.1系統,Google開展了黃油計劃(Project Butter),為了讓Android系統擺脫UI交互上的嚴重滯後感,希望能像「黃油」一樣順滑。 核心原理是系統框架中的渲染和動畫統一採用垂直同步技術(VSYNC),以及三重緩衝技術(Triple Buffer),讓滑動、翻頁等操作更加一致與順滑。
  • Android 4.4系統,Google開展了瘦身計劃(Project Svelte),力求降低安卓系統的內存使用,解決低端機型升級難的問題,讓Android 4.4可正常運行在所有Android手機,從而減少安卓系統繼續碎片化。UI設計上,支持新的「沉浸式模式」,用戶介面由過去的黑色與藍色為主的色調轉向帶有透明度的淺色系,視覺語言變得更加明亮與現代化。
  • Android 5.0系統,Google開展了伏特計劃(Project Volta),力求提升續航能力,這方面Google落後於業界廠商,廠商直面用戶對續航尤為迫切,往往系統資源管控更為嚴格。另外,系統採用全新的ART,拋棄Dalvik虛擬機,大幅提升運行效率。UI設計上,使用全新的扁平化Material Design設計風格,更加清新與質感的設計,統一Android設備的外觀和使用體驗。
  • Android 6.0系統,Google引入新的運行時權限,讓用戶能夠更好地了解和控制權限;引入了Doze模式,進一步提升電池續航能力。UI設計上,新增夜間模式,大幅改進通知欄,讓通知更簡潔。
  • Android 7.0系統,引入新的JIT編譯器,對AOT編譯器的補充,可節省存儲空間和加快更新速度;進一步優化Doze喚醒機制;UI設計上,支持分屏功能;
  • Android 8.0系統,Google開展了計劃(Project Treble),重新架構Android,將安卓系統框架與Vendor層解耦,力求徹底解決安卓碎片化這一老大難的問題,這是安卓系統架構最大的變化。系統層面加強對後台服務、廣播、位置的管控限制。UI設計上,改進通知欄,智能文本選擇和自動填充功能。
  • Android 9.0系統,引入神經網絡API,採用機器學習的思路來預測用戶使用習慣來做省電優化,繼續強化Treble計劃;文件系統(sdcardf/F2FS)持續提升;私有API的限制進一步規範化Android生態,強化隱私和安全,硬體安全性模塊以及統一生物識別身份驗證介面。 UI設計上,新的手勢導航,加強支持劉海屏,UI搜索介面使用到機器學習,AI正在逐步強化Android系統。
  • Android 10.0系統,Google開展了主線計劃(Project Mainline),相關模塊(Modules)不允許廠商直接修改,只能由Google應用商店來更新升級,強化用戶隱私、系統安全與兼容性。支持臉部生物識別。

系統不斷演進,但整體架構基本沒有改變,如下圖所示。

3. 碎片化

Android歷經10餘年的疊代,在流暢性、內存、續航、安全、隱私等方面都取得很大的進步,但Android系統的碎片化一直是痛點問題,帶來不一致的用戶體驗。Android的開放性,是其長久發展的主要原因,讓大多數的廠商都選擇Android系統,但開放性的背後是碎片化,從Android誕生至今問題就一直存在,Google一直在努力從技術角度來解決碎片化問題。從Android 8.0提出Treble項目,重新架構系統將system與vendor解耦合,用於加快Android新版本的適配,效果並不明顯,Google繼續在後續的Android P以及Android Q一直在不遺餘力地持續完善Treble項目,力爭加快系統升級速度。如下圖,目標是希望在保持Vendor不變的情況下,可以獨立升級System模塊。

Android系統碎片化,讓安全、隱私問題存在風險,且存在體驗不一致性問題,但老版本手機的OTA維護升級對廠商來說成本是昂貴的,Google感覺到對Android系統掌控力度不足,要想徹底改變,除非不讓各大廠商定製化,這勢必導致Android手機完全同質化,手機廠商就沒法玩了,等於自掘墳墓,Google肯定不會這麼幹。於是,Google在Android 10.0提出了」Project Mainline「,將對隱私、安全、兼容性造成重大影響的少數模塊獨立成module,每個module打包成APEX格式(一種類似於APK的新格式),由Google通過應用商店定期來升級,從而保證低版本的手機不會因為碎片化而得不到隱私、安全與兼容性的更新。這些module是由Google維護的主線,各大廠商只能跟Google溝通並將代碼upstream到AOSP主線。Google花費了大量的人力在努力完善並推行Mainline,Google希望統一管控的機制,廠商希望最大的自由定製空間,這是一場有趣的角逐,筆者跟團隊一起跟Google協商落地module的落地計劃,最終將某些module影響較大模塊爭取Android 11再上線,Mainline更新機制如下圖。

4. 應用演進

Android系統離不開各App來提供豐富的功能,下面再來簡單說一說應用的一些技術演進。

移動端跨平台技術:從最開始以Cordova為基礎(依賴於WebView)的Hybrid混合開發技術,到React Native的橋接(將JS轉為Native)的技術,再到最新的Flutter技術。Flutter是Google發布的全新的移動跨平台UI框架,渲染引擎依靠跨平台的Skia圖形庫來實現,依賴系統的只有圖形繪製相關的接口,可以在最大程度上保證不同平台、不同設備的體驗一致性,邏輯處理使用Dart語言,執行效率比JavaScript高。另外,Google內部正在開發的另一個作業系統Fuchsia的UI layer採用的是Flutter,也就是說Flutter天然可以支持Android、IOS以及未來的Fuchsia。在大前端方向,對於跨平台開發中一直在不斷疊代中尋找更好、更優的解決方案,目前來看Flutter還是更有優勢。

應用架構:MVC模式(Model–view–controller)但Activity類過於臃腫,為解決這個問題,有了MVP(Model–view–presenter),presenter不僅要操作數據,而且要更新view;再到MVVM(Model-View-ViewModel)解決了MVP大量的手動View和Model同步的問題,提供雙向綁定機制。

熱修復與插件化技術:熱修復的主要應用場景是為了讓用戶無感得修複線上缺陷,比如Tinker,Andfix,Sophix等。插件化是為了減少模塊耦合,可減少主程序的規模,可按需加載,比如DroidPlugin,OpenAtlas等。關於各個熱修復與插件化的細節不再展開,這裡就說一點,Android 7.0對Native的NDK的調用限制是手銬,尤其是Android 9.0對Java層SDK的調用限制就是腳銬,那麼對於Android應用想再搞插件化之類的黑科技便是帶著腳手銬跳舞,能跳但舞姿可能不太美觀。

App Bundle:隨著應用不斷演講,功能越來越複雜,且應用針對不同螢幕設備、不同國家語言資源都打包在同一個App,導致應用包不斷增大,據統計自2012年以來應用包大小增長5倍。雖然現在手機的存儲空間越來越大,但用戶照片、視頻等媒體文件品質在逐漸提升,導致設備可用空間逐漸緊縮。為此Google在去年Google I/O大會講述Android引入新的App動態化框架(即Android App Bundle,縮寫為AAB)。利用Split Apk完成動態加載,使用AAB動態下發方式,可顯著縮小應用體積,減少對存儲空間的占用。

Kotlin:是Google推薦的官方靜態程式語言,與Java互通,可相互轉換。Kotlin編譯成Java字節碼,也可以編譯成JavaScript,運行在沒有JVM的設備上,簡潔安全。使用Kotlin更快速地編寫Android應用,可以提高開發者的工作效率,少編寫樣板代碼,被稱之為 Android 世界的Swift。谷歌開發者社區做過一個問卷調查,大概有40%的Android開發者已使用過Kotlin。這裡並非鼓勵大家一定都要使用Kotlin,學習新語言就像一次投資,要權衡團隊成本與收益之間的利弊。

5. Fuchsia

2016年開始,Google有一群超過百人的工程師團隊秘密研發一款名為Fuchsia的新系統,該團隊很豪華,有來自Android、iPhone、WebOS、Chrome、Flutter等核心工程師,這麼多優秀的人在一起研發這個項目,的確值得期待。Fuchsia的內核採用Zircon,UI層採用Flutter框架,底層渲染Escher,支持Vulkan作為底層Graphics API。

提到Vulkan,順便說一下,去年筆者在美國跟Android團隊討論到並問及Vulkan未來的規劃,Google表示未來幾年會大力推廣Vulkan技術,Vulkan是一種跨平台的高性能低開銷的圖形接口,在移動設備上比OpenGL ES有著更出色的表現。Vulkan將會是未來Android平台的一個發展方向,尤其是遊戲領域,比如王者榮耀Vulkan版本。

在2017年5月,Google的Android工程副總裁Dave Burke稱Fuchsia是早期實驗項目,而在谷歌內部有很多這類實驗項目,存在很大未知變數。2017年11月,Google研發人員表示Fuchsia支持Swift,足見打造統一作業系統的野心。在過去的Google I/O大會隻字未提及Fuchsia,Google官方回應不清楚Fuchsia會在出現在什麼設備。

Fuchsia會是Android的終結者嗎? 筆者認為至少未來五年內不太可能取代Android。當年為了和蘋果iOS抗衡,Android系統研發作為Google重中之重,在這種情況下,Android誕生依然花費了Google 3年時間。而Fuchsia只是公司目前的實驗項目,且Fuchsia並非基於業界成熟Linux內核,而是採用全新Zircon內核,項目工程路還很遠。

筆者簡單研究了一下Fuchsia系統源碼,總結了一下Fuchsia的整個技術架構圖如下所示。

從Fuchsia技術架構來看,內核層zircon的基礎LK是專為嵌入式應用中小型系統設計的內核,代碼簡潔,適合嵌入式設備和高性能設備,比如IOT、移動可穿戴設備等,目前這些領域標準化級別的壟斷者。以及在框架層中有著語音交互、雲端以及智能化等模塊,由此筆者揣測未來Fuchsia率先應用在音控等智能設備。

Fuchsia基於功能的模塊化作業系統,應該會使各組件模塊能獨立升級更新能力,保證體驗一致性。Fuchsia在IOT領域占據一定份額後,加之其良好的跨平台,可以再逐步滲透到移動手機、筆記本電腦等設備,進而三位一體,打造手機、電腦與IOT完美的互聯互通的統一平台體驗,讓多端設備都離不開Fuchsia。在2018年10月,在「藍牙特別興趣小組(Bluetooth SIG)」舉辦的UnPlugFest(UPF)測試大會上,Google再展示了Fuchsia與Android設備的互聯性,可以窺見一斑。

Fuchsia的定位更是物聯網,再是一統江湖,但路途漫長,至少要5年甚至更遠。未來不可知,當然說不定Fuchsia作為實驗項目,一直待在實驗室,不過這種可能性比較小,做不到一統江湖,在IOT領域發光發亮還是大有可為的。

6. 展望未來

作業系統

移動作業系統的演變過程,從按鍵交互的塞班功能機到觸摸屏交互的Android/IOS智能機,從小螢幕手機到全面屏、劉海屏、水滴屏。任何系統無非干兩件事:輸入和輸出,接收到外部輸入信號後經過作業系統處理後輸出信息。

  • 從按鍵式交互到觸屏式交互,伴隨著塞班系統到Android系統的轉變。未來的交互方式一定會更加生物智能化,當下的觸屏交互可以理解成人類的觸覺輸入方式,未來將朝著人們更常見的聽覺輸入(語音)和視覺輸入(身體姿勢、表情等),甚至嗅覺輸入(氣味變化),也會伴隨著新的作業系統的誕生。需要更加無縫地切入生活,而不是「安靜,你吵到我的TNT」方式。
  • 螢幕從小尺寸到大尺寸,並沒有引發作業系統變革,因為技術創新是非連續性,非連續性才會引發第二曲線,誕生新技術。從1960年大型機,到1990年個人筆記本,再到現在的智慧型手機,設備本身越來越小。未來的設備如果發展非連續變革,可能不再需要實體硬體,隨處可輸出,一張白紙、一面牆,到那時作業系統的UI架構必然全新的變化。

前面提到Fuchsia系統,筆者認為至少未來五年內不太可能取代Android,但未來可期。新作業系統的崛起源於降維打擊,直線超車很難,需要有非連續變革,如果只是某種程度上的改進,很難突破用戶習慣、廠商以及生態圈的阻礙。Fuchsia需要降維打擊,比如Fuchsia在IOT領域以及新的交互方式都很出色,加上萬物無縫式的互聯互通的平台,擁有跨平台型特性的Fuchsia有機會成為超級平台。

Android發展至今,已成為全球用戶量最廣泛的移動作業系統,手機行業競爭異常激烈,經過幾番洗牌,國內手機廠商主要是華米OV四大公司,筆者預測在未來五年內國內手機廠商可能只有TOP3,那麼Android的未來在哪裡呢?

Google在2014年發布Android Wear智能手錶系統、Android TV系統以及Android Auto汽車系統,在2016年發布的Android Things智能設備,這些全方位構建安卓的生態圈。在未來在人工智慧和5G的賦能下,智能汽車、智能家居、IOT都將會有廣闊的市場前景。但就目前人工智慧的奇點還沒到來,技術還處於前期階段,一旦奇點來臨將會爆炸式發展,或將重新定義生活方式。

汽車的智能化和網際網路化是未來一大趨勢,Google這兩年確實在汽車領域發力,Android Auto在過去一年的用戶增長250%。天生的移動特性加上越來越多的網際網路服務需求,汽車需要一個具備多種感知能力的系統,或將成為是繼手機、電視後Android的下一重點開拓領域。受到駕駛安全的限制,車載場景正好需要將以往的觸屏按鈕的交互方式,轉向語音交互和生物感知,車艙內是天然的語音交互場景,而不再是「安靜,你吵到我的TNT」,語音和圖像識別、人工智慧等技術或許會在車載領域得到更大的發展。

職業發展

隨著Android的發展,有些人對Android未來感到茫然,經常收到讀者私信問,「前輩,從事Android是不是沒有前途,找工作困難,希望能給點建議?」。早在2010年市場上有大量Android招聘,基本懂一點Java基礎的就可以搞Android,當時是移動網際網路創業的高峰期,號稱只要做個App就可以創業。「風來了豬都能找到工作,風停了最先摔死的都是豬」,如果你覺得找工作難,那一定是你在混日子,Android中高級以上的人才一直都非常稀缺。

只要在Android領域深耕,做到極致,努力成為這個方向的專家,有精力再提升工程架構思維,軟體工程思想都是相通的,境界會得到提升,即便再學習新東西也會非常快。只要一個領域做到極致,即便Android被淘汰了,換新領域面試官依然會相信你也能做到極致。千萬不能用一年的工作能力混十年工作經歷,否則你的市場價格連一年都不如,成為工作困難戶。

Android

Android系統疊代更新10餘年,在用戶體驗、性能、功耗、安全、隱私等方面都取得很大的進步,後續版本會持續在內存、文件系統、虛擬機、圖形圖像等方向優化。隨著Android系統功能越來越多,系統架構中有些模塊未來可能會被重構,某些服務大鎖制約性能,比如Android 8.0優化過binder大鎖讓性能顯著提升。關於圖形方面,Vulkan將會是未來Android平台的一個發展方向,尤其是遊戲領域。

人工智慧在Android系統上目前效果不太顯著,Google未來應該還會持續投入,比如在AI預測用戶行為加上相應後台管控策略用於提升手機續航。碎片化仍是當下最主要的問題,碎片化也導致用戶隱私、安全和體驗一致性方面得不到保障,Google專門成立團隊致力於Android Mainline,從Android Q開始規劃Mainline,未來的版本都將逐步疊代更新。最後說一點,App兼容性問題比較嚴重,據Google實驗統計Android Q系統在全球Top 1000應用的兼容性不達標率4.3%,而中國Top 1000應用的兼容性不達標率17.6%,可見國內Android生態圈更為嚴峻得多,Google對隱藏API的限制就是一步長遠之棋,短期內導致應用不兼容加劇,長期來看生態圈會逐步健康,最理想的情況就是Android系統大版本升級而App兼容性問題不再有,後續Google應和廠商會加強跟主流應用協作規範應用,搭建良好健康的Android生態圈。


從Android未來來看,我認為Android可以存活更長的時間,Fuchsia在10年內是很難替代Android的,甚至會提前夭折。從歷史角度來看,凡是想要多端統一的系統都起不來,因為每一個端的競爭都是十分慘烈的,貪多就很難做到兼顧。

2011年的時候,輿論就已經盛傳Android要滅亡,我當時很年輕竟然動搖了,業餘時間學習了iOS想要轉行,然而過了8年,Android仍舊安然無恙,但Android滅亡或者被替代的輿論仍舊繼續毒害著年輕人。與其擔心Android被替代,不如擔心自己遲早要到來的中年危機,Android存活時間要遠大於大部分人的程式設計師職業生涯。

從職業發展來看,我認為成為技術專家相對而言是最容易走的路,但是很多人因為受到外界的影響或者遇到瓶頸就變換技術分支,一個技術分支遇到瓶頸就換分支,那麼換完分支再次遇到技術瓶頸就能突破了嗎?這也是技術專家稀缺的原因之一。經常會有一些開發人員跟我感慨,說學了一堆技術的皮毛沒什麼意思,級別升不上去不說,工作丟了就很難再找到合適的,早知道就深入技術的原理了,希望大家儘早的認識到這一點。

在這我也分享一份大佬自己收錄整理的Android學習PDF+架構視頻+面試文檔+源碼筆記,還有高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習

如果你有需要的話,可以點讚+評論+轉發關注我,然後私信我【進階】我發給你

關鍵字: