Android架構和特徵

來源:互聯網
上載者:User

本文轉自網路...

 

架構

 

從SDK文檔中,偷來一幅Android平台的 架構圖,如上。在整個架構最底層紅彤彤的部分,是 Linux Kernel在移動平台的一個移植,它隱藏了硬體、網路等相關的細節,為上層提供了一個相對純潔的統一介面。除非要做的是Android到不同裝置的移植工作,否則對於大部分普通開發人員而言,基本上是遠觀而不必褻玩的。Google一直強調,Android的底層實現異常NB,可移植性超強,暫沒有功夫研讀,實屬遺憾。靠上一層,是一些 核心的和擴充的類庫,它們都是原生的C++實現。在這一層,你可以看到很多熟悉的面孔,一如SQLite、WebKit、OpenGL,開源的力量與貢獻由此可見。如果,該層類庫需要被上層函數調用,就必須要通過 JNI的匯出相應的介面函數,否則就只能在層次內部自個把玩。也是在這一層次上,還有為上層Java程式服務的 運行時。Dalvik虛擬機器,是Android的Java虛擬機器,之所以不採用J2ME的虛擬機器,一方面是因為J2ME的設計是為了低端機器而最佳化,而Dalvik則是為了高端一些的機器進行最佳化,提供更好的效能。另一方面,從商業角度來看,必須繞開J2ME虛擬機器,Android才能徹底解放,想怎麼開源就怎麼開源,不再需要考慮License的問題。再往上,終於有Java出沒了。首先是 架構層,這裡包含所有開發所用的SDK類庫,另外還有一些未公開介面的類庫和實現,它們是整個Android平台核心機制的體現。而在最上面,就是 應用程式層了,系統的一些應用和第三方開發的所有應用都是位於這個層次上,也許要糾結兩者的差別,就是系統應用會用一些隱藏的類,而第三方的應用,總是基於SDK提供的東西來搞。一般來說,Android開發,就是在SDK的基礎上,吭哧吭哧用Java寫應用。但自從有了NDK,一切有了寫小變化。NDK的出現意味著,最上面應用程式層的內容,可以穿越Java部署的架構層,直接和底層暴露出來的,或者自行開發的C++庫直接對話,當然在這些庫中需要包含JNI的介面。人說,這就不是Android也可以用C++開發應用麼,但其實,這樣的說法不夠確切,純C++應用,是無法被接受的。因為在Android中,大量的核心機制部署在架構層,它們都是用Java實現的,比如控制項陳列庫,Activity的調度之類的。因此,沒了介面,沒了調度,還是只用C++做類庫比較合適,否則一切都亂了套了。特徵基於這樣的架構,Android有很多的設計顯得很有意思。縱覽整個SDK和核心機制的設計,工整漂亮,是Android給人的第一感覺。為了說明這一點,找一個反面教材是很有必要的,Symbian同學毫無懸念的擔當這個偉岸的角色。寫Symbian程式,感覺就像是在玩一個猜謎遊戲。哪怕你是一個Symbian老手,當需要用到Symbian中某塊陌生功能的時候,你可能依然束手無策。你往往需要猜並反覆找尋,在這裡我需要使用哪一種奇巧淫技呢,是該臆想某些事件,還是應該用一個神秘的UID尋找某個特定應用,諸如此類。而做Android應用的時候,就像是做高考類比試題,題看上去不一樣,解答模式摸清楚,就一通百通,一了百了。監聽某個系統事件,查一下SDK就好;訪問某個應用的資料,看看它有沒有提供Content Provider就可以。所有的一切,都是按套路出牌,只要你瞭解了套路,再陌生的牌也可以看得懂,出的順。人說武林高手,都應該是無招勝有招,而一個好的應用程式框架,也應該做到舉重若輕,可觸類旁通。而Android架構最文采飛揚的一點,就是引入了Mash-Up的思想。所謂Mash-Up,就是把寫應用搞成搭積木,要出效果的時候,東家一塊西家一塊現場拼起來就好。這裡面關鍵有兩點,一個是 模組化,另一個就是 動態性。所謂模組化,就是一個應用的功能要明確的被封成一個個邊界清晰的功能點,每一個功能點都像是一個黑盒,由預先定義的規則描述出其互動方式;而動態性,就是這些獨立的模組能夠在啟動並執行時候,按照需求描述,串連在一起,共同完成某項更大的功能。在這兩點上,Android都做得非常出色。站在可Mash-Up構造應用這一點去看其他的一些Android中的核心功能設計,就顯得很有章可循了。比如為什麼要把檔案私人化,為什麼要讓進程被託管,等等(當然也可以站在別的角度看出不同的效果,視角不同,視野自然不同...)。在UI機制方面,Android也有很不錯的表現。它採取xml格式的資源檔,描述所有介面相關的內容。資源檔不是什麼新東西了,xml格式也是老調重彈,但可貴的是Android做的更為的豐富和徹底,基本把介面相關的邏輯,全部從代碼中剝離到了資源檔中,和Symbian那四不像的資源檔相比,真是強大了不知多少倍了。++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Libraries層:OpenGL是一個開源的圖形庫SGL是基於OpenGL的3D介面庫libc是c運行庫FreeType是字型相關的庫SSL是安全套接層協議層WebKit是一個開源的瀏覽器網頁排版引擎,可以參考:http://www.jjos.org/android/2010/05/10/312_webkit-webkit-for-android.html

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.