本系列是閱讀《Pro Android4》的讀書筆記,也包括網路閱讀資料的整理,以及個人心得。
由於智能手機引入AP(應用處理器),Android在某種意義上是個人電腦,具有案頭電腦的完整架構,採用Linux-based OS stack來管理裝置、記憶體和進程。Android的Java庫覆蓋電話,視頻、串連、圖形、UI編程等多個方面。Android SDK支援幾乎全部的J2SE,除去UI的AWT和Swing部分,而用Android UI framework取而代之。
Android針對手持功能的受限記憶體、處理器速度和電池能力進行最佳化Dalvik VM。Dalvik VM將所產生的Java calss檔案封裝到一個或多個Dalvik執行性檔案(.dex)。最終在Android執行的代碼,並不是Java Byte code,而是.dex檔案。也就是你不能直接運行Java Byte code,需要轉為.dex檔案。
應用開發人員的Android架構視圖
從應用開發人員角度看Android軟體stack。
LinuxKernel處理裝置驅動、資源訪問、電源管理以及其他的OS工作。(Wei:我覺得這不準確,因為Android有改動,特別是HAL,且Linux社區沒有接納Android的貢獻。)
在核心之上是C/C++庫,如OPenGL,WebKit,FreeType(字型處理),SSL,libc,SQLit、Meida。Bionic是Android基於BSD的Glibc,針對嵌入系統進行改良的libc版本,大小約為原來的一半。媒體庫是基於PacketVideo的OpenCore,用於錄製和播放音頻及視頻格式。Surface管理器處理系統顯示,支援2D和3D。Android採用Skia作為2D圖形庫,採用OpenGL
ES來支援3D。
絕大部分的應用程式框架是通過DalvikVM來訪問核心庫。Dalvik VM運行多個VM執行個體。當Java應用訪問核心庫時,每個應用獲得它自己的VM instance。(Wiki:Dalvik虛擬機器可以有多個執行個體,每個Android應用程式都用一個自屬的Dalvik虛擬機器來執行,讓系統在執行程式時可達到最佳化。Dalvik虛擬機器並非執行Java位元組碼,而是執行一種稱為.dex格式的檔案)
Android Java庫就是Android標準架構圖中的應用程式框架層,包括電話、資源,位置、UI、內容提供者、和包管理器。開發人員在這些API上進行應用開發。有些應用已經整合到系統上,如Home,連絡人,電話,和瀏覽器。
通過Android SDK開發應用
Android模擬器。Android模擬器能支援90%的應用開發,但在USB串連、攝影和視頻捕獲,電池類比,藍芽,耳機,Wi-Fi,NFC和OpenGL ES上有限制。Android採用QEMU技術,是開源的“處理器模擬器”,允許一個OS模擬器在另一個OS上運行。(Wei:MeeGo的模擬器也是採用QEMU,此外還需要KVM,最大的問題是KVM虛擬化需要硬體的支援,即CPU必須支援VT,但不是所有案頭機的CPU都能支援,特別手提的CPU)
Android UI。Android UI可以用XML指令檔來定製UI應用的視窗,通過ID來擷取在Java代碼中進行控制。而螢幕或視窗在Android中稱為activity。View是Android基礎的UI單位,可組合為view group。View內部使用cavase,painting和使用者互動這些熟悉概念。在Android
3.0引入新UI概念fragment,目的是在大螢幕(平板)上處理多窗格,而fragment提供窗格的抽象。Android架構的一個關鍵概念是activity視窗的生命週期管理。
基礎組件。Android的UI架構引入新概念intent。Intent是一個進程內和進程間喚醒組件的機制。作為組件就是一段有明確生命週期的代碼,如activity、service,由事件喚起的receiver,都是組件。要調起組件,intent具有視窗訊息,action,發布和訂購模式,以及處理序間通訊。
Android對資源支援很直觀,支援string,bitmaps以及XML-basedView定義。自動組建檔案R.java就是對資源的描述,每個自動產生的ID都對應在XML檔案中元素或整個XML檔案。開發人員可通過這些ID使用這些XML定義。這對於處理本地語言環境、裝置大小適配等非常有協助。
另一個新概念是content provider,資料來源的抽象。
先進UI概念。Android引入很多先進的UI概念。包括採用XML方式來描述layout和menu,非同步dialog(注意,不是Windows中MFC的同步方式的modal dialog),對動畫的支援,包括frame-by-frame動畫,視覺轉換的漸層方式(放大、縮小,位移,旋轉、角度)。Android通過OpenGL
ES支援3D圖形。OpenGL ES是C庫,Android沿用了J2ME中對Open ES定義的API,具體可以參考ProAndroid 3。
在HomeUI方面。Android支援live floder(是一種小型的應用程式層外掛程式。它本身體現為案頭出現的表徵圖,通過點擊這些表徵圖,將出現一個列表框,列表框中將顯示資料資訊。通過活動目錄可以在不開啟應用程式的情況下,在案頭就能查看其中的資料資訊。[1])。但是隨著對home screen
widget的支援,livefloder的作用漸微。Android還提供Integrated Search,可以搜尋裝置和網路的資訊,提供searchAPI。
此外還有自訂的手勢、感應器控制、動態配置(如根據橫豎屏進行的排版),平板的actionbar,Drag-and-drop(Android 4.0中可用於phone和pad)等。
上面的這一些大都會在《Pro Android 4》後面章節中詳細描述。
其他。此外還有Service組件,Media組件、Telephony組件,具體可以詳細閱讀Android SDK reference對package的說明。Android通過應用的AndroidManifest.xml檔案來體現這些概念,包括activities的定義、service和contentprovider的註冊,許可聲明等等。
目前Andriod有超過50個包和過千個class。除了andriod.*外,還包括java.*,javax.*,以及其他,如org.apache.http,org.json, org.w3c.com,org.xml.sax, org.xml.sax.ext, org.xml.sax.helpers, org.xmlpull.v1, and org.xmlpull.v1.sax2開頭的namespace包。
從Android開原始碼中獲益
Android原始碼教程在http://source.android.com。Git在https://android.googlesource.com/,但目前不支援線上閱讀,必須git下來。線上閱讀可在http://www.oschina.net/code/explore/android-4.0.1。或者更為完整的,更便於閱讀的,可訪問http://www.grepcode.com/search/?query=google+android&entity=project。
相關連結:
我的Android開發相關文章