Android 應用開發筆記 - Android的系統構架


 

    從圖中可以看出Android分爲4層,從高到低分別是應用層、應用框架層、系統運行庫層和Linux內核層。下面將對這4層進行簡要的分析和介紹。

 

1.      應用層

應用是Java語言編寫的運行在虛擬機上的程序,如上圖中最上層部分所示。

我們要開發的程序就是運行在此層。

2.      應用框架層

此層是Google提供的API框架,我們可以使用這些框架來開發自己的應用。

我們可以理解爲Windows API。

Android提供如下組件。

²       視圖系統:包括列表(List)、網格(Grid)、文本框(Text Box)、按鈕(Button),以及可以嵌入的Web瀏覽器。

²       內容提供器(Content Providers):提供類似Windows IPC功能。

²       資源管理器(Resource Manager):提供非代碼資源的訪問,如本地字符串、圖形和佈局文件(Layout file)。

²       通知管理器(Notification Manager):應用可以在狀態欄中顯示自定義的提示信息。相當於Windows中的Message服務。

²       活動管理器(Activity Manager):用來管理應用程序生命週期並提供常用的導航退回功能。

²       窗口管理器(Window Manager):管理所有的窗口程序。類似Windows的explorer功能。

²       包管理器(Package Manager):Android系統內的程序管理

3.      系統運行庫(C/C++庫以及Android運行庫)層

²       Bionic系統C庫:C語言標準庫,系統最底層的庫,C庫通過Linux系統來調用。

²       多媒體庫(MediaFramework):Android系統多媒體庫,基於PacketVideo OpenCORE,該庫支持多種常見格式的音頻、視頻的回放和錄製,以及圖片,比如MPEG4、MP3、AAC、AMR、JPG、PNG等。

²       SGL:2D圖形引擎庫。

²       SSL:位於TCP/IP協議與各種應用層協議之間,爲數據通信提供支持。

²       OpenGL ES 1.0:3D效果的支持。

²       SQLite:嵌入式的關係數據庫。

²       Webkit:Web瀏覽器引擎。

²       FreeType:位圖(bitmap)及矢量(vector)。

 

每個Java程序都運行在Dalvik虛擬機之上。

很多人認爲Dalvik虛擬機是一個Java虛擬機,但是這種說法並不準確,兩者並不兼容。

他們有兩個明顯的不同:Java虛擬機運行的是Java字節碼,而Dalvik虛擬機運行的則是其專有的文件格式爲dex(Dalvik Executable)的文件。在Java SE程序中的Java類會被編譯成一個或者多個字節碼文件(.class)然後打包到jar文件,而後Java虛擬機會從相應得class文件和jar文件中獲取相應的字節碼;Android是在編譯成class文件後,還會通過一個工具(dx)將應用所有的class文件轉換成一個dex文件,而後Dalvik虛擬機會從其中讀取指令和數據。

Dalvik虛擬機有如下幾個主要特徵:

(1)      專有的dex文件格式。

爲什麼棄用已有的字節碼文件(.class文件)而採用新的格式呢?原因如下:

Ø        每個應用中會定義很多類,編譯完成後即會有很多相應的class文件,class文件中會有大量冗餘信息,而dex文件格式會把所有的class文件內容整合到一個文件中。這樣,除了減少整體的文件尺寸和I/O操作外,也提高了類的查找速度。

Ø        增加了對新的操作碼的支持。

Ø        文件結構儘量簡潔,使用等長的指令,藉以提高解析速度。

Ø        儘量擴大隻讀結構的大小,藉以提高跨進程的數據共享。

(2)      dex的優化。

Ø        調整所有字段的字節序(LITTLE_ENDIAN)和對齊結構中的每一個域。

Ø        驗證DEX文件中的所有類。

Ø        對一些特定的類和方法裏的操作碼進行優化。

(3)      基於寄存器。

相對於基於堆棧實現的虛擬機,基於寄存器實現的虛擬機在代碼的執行效率上更勝一籌。

(4)      一個應用,一個虛擬機實例,一個進程。

 

4.      Linux內核層

Android是經過量身裁減的、基於Linux2.6內核的移動設備的操作系統。

   其主要的驅動如下:

Ø        顯示驅動(Display Driver):基於Linux的幀緩衝(FrameBuffer)驅動。

Ø        鍵盤驅動(KeyBoard Driver):作爲輸入設備的鍵盤驅動。

Ø        Flash內存驅動(Flash Memory Driver):基於MTD的Flash驅動程序。

Ø        照相機驅動(Camera Driver):常用的基於Linux的v412(Video for Linux)驅動。

Ø        音頻驅動(Audio Driver):常用的基於ALSA(AdvancedLinux Sound Architecture)的高級Linux聲音體系驅動。

Ø        藍牙驅動(Bluetooch Driver):基於IEEE 802.15.1標準的無線傳輸技術。

Ø        WiFi驅動:基於IEEE 802.11標準的驅動程序。

Ø        Binder IPC驅動:Andriod的一個特殊的驅動程序,具有獨立的設備節點,提供進程間通信的功能。

Ø        Power Management(電源管理):比如電池電量等。

 

 

 

1.1.1 Android應用程序框架

ü        android.app

提供高層的程序模型和基本的運行環境。

ü        android.content

包含對各種設備上的數據進行訪問和發佈。

ü        android.database

通過內容提供者瀏覽和操作數據庫

ü        android.graphics

底層的圖形庫,包含畫布、顏色過濾、點、矩形,可以將它們直接繪製到屏幕上。

ü        android.location

定位和相關服務的類

ü        android.media

提供一些類管理多種音頻、視頻的媒體接口。

ü        android.net

提供幫助網絡訪問的類,超過通常的java.net.*接口

ü        android.os

提供了系統服務、消息傳輸和IPC機制。

ü        android.opengl

提供OpenGL的工具。

ü        android.provider

提供訪問Android內容提供者的類。

ü        android.telephony

提供與撥打電話相關的API交互。

ü        android.view

提供基礎的用戶界面接口框架。

ü        android.util

涉及工具性的方法,例如時間日期的操作。

ü        android.webkit

默認瀏覽器操作接口。

ü        android.widget

包含各種UI元素(大部分是可見的)在應用程序的佈局中使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章