Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> 深入Android 【二】 —— 架構和學習

深入Android 【二】 —— 架構和學習

編輯:Android開發實例

Android架構和特征

千呼萬喚始出來,猶抱琵琶半遮。 -- 《琵琶行》
雖貴為富二代,但Android要是沒任何可圈點的地方,開不過70邁,在玲琅滿目的手機平台競爭中,充其量也就做幾個俯臥撐打一桶醬油,然後被落的遠遠的。說到底,出來混,靠的還是技術。

架構


從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那四不像的資源文件相比,真是強大了不知多少倍了。

Android學習入門

不積跬步,無以至千裡。 -- 《勸學》
說,萬事開頭難。想開始Android的開發,最重要的應該是先把馬步扎穩,套路摸清楚,後面的事情就順當多了。打開懷抱,擁抱Android,也許可以先做下面這些事。

開發環境

辣手摧花成性的GFW,無情的把Android開發者官網關在了牆外。不過沒關系,猛擊這裡,同樣可以殊途同歸(Shit,一直在用代理,剛試了下,發現竟然也被盾了,如果不行,那就只能翻牆了...)。 如果旅途順利,你可以在路徑sdk/index.html下找到安裝說明,成功配置好Android的開發環境(【注】在以後,如果要給開發者頁面上的鏈接,都會給一個像sdk/index.html這樣的相對路徑,你可以在前面加上官網地址,或者本地SDK的doc地址拼湊成完整的路徑,在一個盾牌橫行的朝代,只能用這樣委屈求全的方法保證能更好的使用...)。 在 2.0之前,每一次版本更新,你都要自己去下個全新的SDK,然後按照說明,小心翼翼的一步步修改eclipse的設置,甚是麻煩。在2.0後,這個模式有所改善,你會先下到一個類似於下載器的插件,通過它可以來管理和升級SDK,不僅簡化了整個升級模式,還使得你可以更好的在各個不同的SDK版本間游走,利國利民。 Eclipse + ADT(Android Development Tool),是正牌的Android開發環境。你可以在Windows,Linux,Mac下做開發,甚為自由。比之Symbian的開發環境,ADT顯得尤為強大,它對SDK提供的一堆優秀的命令行工具進行了UI上的封裝,提供了圖形界面(命令行控當然同樣幸福,具體參見:guide/developing/tools/index.html)。通過ADT,你可以用運行和管理模擬器,使用調試器進行調試,過濾和查看Log,浏覽模擬器上的文件信息,模擬撥號、短信等手機才有的事件,等等。

文檔

我知道,有很多人在學習一個新平台開發的時候,都習慣去買一些《xxx 21天精通》之類的書籍。但其實,最好的入門學習資料,就是SDK文檔。因為只有做平台的自己,才能最了解平台中的各個玄機,各方面的輕重緩急,從而能夠更好的對症下藥藥到病除。 在Android的SDK中,guide/index.html是由淺入深的教學文檔,reference/packages.html是標准的API文檔。對於教學文檔,我的意見是,一字不拉的通讀一遍甚至多遍,至少做到能對Android摸著頭腦,並且碰到問題的時候,能夠快速想起在哪裡可以找到,回來深刻閱讀。 而 API文檔方面,Android做的算是還不錯了。基本上每個類,每個接口,都有標准而詳盡的說明,在一些尤為重要的類中,還具有大量的學習性的內容,不和Symbian似的,有太多的太監類,只有光禿禿的一個函數,一行文檔說明都沒有。整個文檔結構是按照Java包來組織的,本身Java包命名的結構性和可讀性很強,找起來也頗為方便。 很多人對SDK文檔有抵觸情緒,我想,有兩方面的原因。一則是SDK文檔普遍缺少文學性,麻木不仁的八股文,難以下咽。Android在這方面做得算是乏善可陳,雖然算不上文采華麗,但還是挺適合閱讀的。另一則,就會是語言方面的原因了。SDK文檔多為英語,偶爾像MSDN這樣有中文的,也停留在機器翻譯的水平上,閱讀起來頗為難受。特地在網上搜了下,找到一些翻譯SDK的中文文檔,比如這裡。雖然是基於1.5 r1版本SDK所著,稍顯過時,但翻譯的還是有小用心的,作為輔助,也不失為一份好資料,特代表廣大看官向這些為人民福利著想的同志致敬。

Tutorials

光說不練假把式,除了讀,在入門階段,寫也是一項不能少的運動。同樣是在SDK中,Android提供了一組Tutorials和一些列的Samples,詳見:resources/index.html。 Tutorials很簡單,Hello World只是在教你如何在eclipse中,在ADT的幫助下,創建一個Android項目。相比之下,Hello Views復雜了些,它集中展示了幾種標准的Android Layout 樣式是如何構建的,很多時候,你都是在這些樣式下擴展所需的UI。 Hello Localization,是教你如何使用資源的,做完這個,就可以了解Android的資源有多殺~。最後收官的是一個更為完整的Notepad Tutorial,它展示了很多Android的核心機制,比如基於Intent的Activity整合,Activity的生命周期等。邁過這個Tutorial,歡迎你,進入Android的大門。 當然,做完Tutorials,對於Android而言,只是管中窺豹略見一斑。在SDK中,還提供了一系列的Samples。可以根據自己的需求,挑選合適的Sample編譯運行和學習。但其中,有一個是不論你做什麼,都需要必看必讀必熟悉的,就是API Demos。在這個Sample中,集中展示了Android重點功能的API使用,把這個Sample用熟悉,需要做什麼的時候過去找一下就可以很快的入手了。

源碼

到這裡,很多看官一定很不屑,前面所謂的學習入門介紹,只不過是圍著SDK打轉。其實,事實也是如此,SDK中包含的內容是真的非常重要,我只是期望通過一些簡短的介紹,激起一些初學者的重視,如是而已。 當然,SDK每一個平台都有,沒什麼稀罕的。但Android有另一個非常稀罕而值錢的看家法寶,就是源代碼。從Android Source的主站上:http://source.android.com/,你可以獲得整個平台的源碼以及相關介紹。非常苦口婆心的期望大家都去down一份源碼放在機器上,哪怕你不需要進行修改編譯,放在機器上當百科全書也是遠勝於任何一本Android教學書籍的。本系列文章後續很多內容,都是從源碼中學習到的一些淺薄見識。 對於大部分開發者都有學習價值的源碼,主要在源碼的frameworkspackages目錄下。前者包含的是平台核心的一些實現,比如你需要自定義一個控件,也許你就可以翻到一個系統控件的實現中去,看看它是怎麼來做的。後者包含一些系統的應用實現,比如你想做個播放器,也許你可以先去參考參考系統自帶的是具體怎麼做的。這樣的實現,即便不算是最華美,至少也是最標准,其價值不容小視。 另外,你也可以把它當個代碼庫來使,不會使用某個類,grep一把,也許就能獲得一份最漂亮的Sample。當然,如果你有時候對某些系統機制表示費解,抑或有一些bug不知道源頭在哪,都可以跟著源碼順籐摸瓜的搞清楚。這樣的好東西,可不是每個平台都能夠享用的。

其他

論壇,其實對於開發和學習都是很重要的資源。畢竟,所有的資料都是死的,只有人是活得,能夠最大限度的因地制宜解決問題。 只不過,標准的官方論壇,放在Google Group上,已經惆怅的被盾了。中文論壇方面,沒有特別優秀和活躍的,這一方面是由於Android的發展現狀還不算很磅礴,另一方面是由於 Android的開發相對於Symbian而言,奇技淫巧少了很多,沒有那麼多好問的。也許你可以去去csdn這樣的傳統論壇,或者eoe這樣專門的論壇。有的時候,還是多少能獲得一些幫助的。 書籍方面,真沒有什麼推薦,豆瓣上搜索一下,你可以看到,目前的書籍,基本上還是集中在SDK使用層面上,很少有解析的很透徹,做的很深入的。而SDK的使用,看SDK的文檔就足夠了,如果實在對e文不感冒,買一兩本評價不太差的中文書籍,放著翻翻也還是挺好。 更進一步,也許可以讀讀一些經驗性的文檔,去Google Code上搜索一些代碼回來看看。比如,SDK文檔中,有個經驗性文檔的集合:resources/articles/index.html,就可以翻看一下。
最後,更多的一切還需要自己在工程和思考中,慢慢總結。相信,好的代碼,會垂青一個勤於動手和思考的人。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved