Android體系結構

1.Linux Kernel---Linux內核

Android的核心繫統服務依賴於Linux內核,如安全性內存管理,進程管理,網絡協議棧和驅動模型。Linux內核也同時作爲硬件和軟件棧之間的抽象層。Linux內核層爲各種硬件提供了驅動程序,如顯示驅動、相機驅動、藍牙驅動、電池管理等等。

2.Libraries庫

Android包含一些C/C++庫,這些庫能被Android系統中不同的組件使用。它們通過Android應用程序框架爲開發者提供服務。以下是一些核心庫:

(1)外觀管理器(SurfaceManager):對顯示子系統的管理,並且爲多個應用程序提供了2D和3D圖層的無縫融合。

(2)媒體庫(Media Framework):基於PacketVideoopencore,該庫支持多種常用的音頻、視頻格式回放和錄製,同時支持靜態圖像文件。編碼格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。

(3)SQLite:一個對於所有應用程序可用,功能強勁的輕型關係型數據庫引擎。

(4)OpenGL|ES:基於OpenGL ES API的實現。該庫使用了硬件3D加速或高度優化的3D軟件光柵。

(5)FreeType:位圖(bitmap)和矢量(vector)字體顯示。

(6)WebKit:Webkit是一個開源的瀏覽器排版和渲染引擎,包含WebCore和JavascriptCore。Android平臺的WebKit上層由Java語言封裝,並且作爲API提供給Android應用開發者,而底層使用WebKit核心庫(WebCore)進行網頁排版。WebKit模塊分爲兩個部分: Java層和C層(webkit庫)。Java層和C層通過JNI相互調用

(7)SGL:底層的2D圖形引擎

(8)SSL(證書驗證):

(9)系統C庫(libc):一個從BSD繼承來的標準C系統函數庫,它是專門爲基於embeddedlinux的設備定製的。

3.Android Runtime
Android包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數功能,每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。 

Dalvik虛擬機:

Dalvik是Google公司自己設計的用於Android平臺的虛擬機,它可以簡單地完成進程隔離和線程管理,並且提高內存的使用效率。每一個Android應用程序在底層都會對應一個獨立的Dalvik虛擬機實例。

Dalvik 虛擬機是基於寄存器結構(寄存器是CPU上的一塊緩存,寄存器的存取速度比內存中存取的速度快很多,這樣就可以根據硬件最大限度地優化設備)。Dalvik 虛擬機運行的其專有的.dex文件,Android程序會在編譯成.class字節碼文件後,通過工具將所有的.class文件轉換成一個.dex文件,然後Dalvik虛擬機會從其中讀取指令和數據,最後的.odex文件是爲了在運行過程中進一步提高性能而對.dex文件進行的進一步優化,加快軟件的加載速度和開啓速度。

Java 虛擬機:

Java虛擬機是基於棧的結構(棧是一個連續的內存空間,取出和存入的速度比較慢)。Java虛擬機運行的是.class字節碼文件,Java程序中的Java類會被編譯成一個或多個字節碼文件(.class)然後打包到.jar文件,之後Java虛擬機會從相應的.class和.jar文件中獲取相應的字節碼。

Android運行時,其中包括了ART虛擬機(Android 5.0之前是Dalvik虛擬機,ART模式與Dalvik模式最大的不同在於,在啓用ART模式後,系統在安裝應用的時候會進行一次預編譯,在安裝應用程序時會先將代碼轉換爲機器語言存儲在本地,這樣在運行程序時就不會每次都進行一次編譯了,執行效率也大大提升。如果您的應用在 ART 上運行效果很好,那麼它應該也可在 Dalvik 上運行,但反過來不一定。),每個Java程序都運行在ART虛擬機上,該虛擬機專門針對移動設備進行了定製,每個應用都有其自己的 Android Runtime (ART) 實例。此外,Android運行時還包含一套核心運行時庫,可提供 Java API 框架使用的 Java 編程語言大部分功能,包括一些 Java 8 語言功能。
4.Application Framework---應用程序框架

開發人員也可以完全訪問核心應用程序所使用的API框架。該應用程序的架構設計簡化了組件的重用;任何一個應用程序都可以發佈它的功能塊並且任何其它的應用程序都可以使用其所發佈的功能塊(不過得遵循框架的安全性限制)。同樣,該應用程序重用機制也使用戶可以方便的替換程序組件。隱藏在每個應用後面的是一系列的服務和系統,其中包括; 
(1)活動管理器(ActivityManager):用來管理應用程序生命週期並提供常用的導航回退功能。

(2)窗口管理器(WindowManager):WindowManager繼承自ViewManager。WindowManager主要用來管理窗口的一些狀態、屬性、view增加、刪除、更新、窗口順序、消息收集和處理等。

(3)內容提供器(ContentProviders):使得應用程序可以訪問另一個應用程序的數據(如聯繫人數據庫),或者共享它們自己的數據

(4)視圖系統(ViewSystem),可以用來構建應用程序,它包括列表(lists),網格(grids),文本框(textBoxes),按鈕(buttons),甚至可嵌入的web瀏覽器。

(5)通知管理器(NotificationManager):使得應用程序可以在狀態欄中顯示自定義的提示信息。

(6)電話管理類(TelephonyManager):用於管理手機通話狀態,獲取電話信息(設備信息、sim卡信息以及 網絡信息),偵聽電話狀態(呼叫狀態服務狀態、信號強度狀態等)以及可以調用電話撥號器撥打電話

(7)資源管理器(ResourceManager):提供非代碼資源的訪問,如本地字符串,圖形,和佈局文件(layoutfiles)。

(8)定位管理器(LocationManager):獲取經緯度等地理信息

5.Applications---應用程序

應用層是一個核心應用程序的集合,所有安裝在手機上的應用程序都屬於這一層,例如短信,瀏覽器,通訊錄等,或者下載的微信、QQ、支付寶等

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