Android系統框架結構

Android系統到底是什麼樣子的?app爲什麼能夠在Android系統中運行,怎樣運行的。

下圖是官方標準的Android系統架構圖:

(藍色:java程序,java代碼編寫;黃色:運行JAVA程序而實現的虛擬機;綠色:C/C++語言編寫的程序庫;紅色:linux內核+driver)

由上圖我們知道Android系統分爲四層:

1、Applications(應用程序層):就是我們的app層,各種app。

2、Framework(應用程序架構層):提供開發Android應用程序所需的一系列類庫,使開發人員可以進行快速的應用程序開發。Activity、Service、Notification等等都是framework提供給我們的。

應用程序框架層類庫名稱                                                       功能
活動管理器(Activity Mananger) 管理各個應用程序生命週期並提供常用的導航回退功能,爲所有程序的窗口提供交互的接口
窗口管理器(Window Manager) 對所有開啓的窗口程序進行管理
內容提供器(Content Provider) 提供一個應用程序訪問另一個應用程序數據的功能,或者實現應用程序之間的數據共享
視圖系統(View System) 創建應用程序的基本組件,包括列表(lists),網格(grids),文本框(text boxes),按鈕(buttons),還有可嵌入的web瀏覽器。
通知管理器(Notification Manager) 使應用程序可以在狀態欄中顯示自定義的客戶提示信息
包管理器(Package Manager) 對應用程序進行管理,提供的功能諸如安裝應用程序,卸載應用程序,查詢相關權限信息等。
資源管理器(Resource Manager) 提供各種非代碼資源供應用程序使用,如本地化字符串,圖片,音頻等
位置管理器(Location Manager) 提供位置服務
電話管理器(Telephony Manager) 管理所有的移動設備功能
XMPP服務 是Google在線即時交流軟件中一個通用的進程,提供後臺推送服務

我們可以稱Framework層才真正是Java語言實現的層,在這層裏定義的API都是用Java語言編寫。但是又因爲它包含了JNI的方法,JNI用C/C++編寫接口,根據函數表查詢調用核心庫層裏的底層方法,最終訪問到Linux內核。那麼Framework層的作用就有2個。

1.用Java語言編寫一些規範化的模塊封裝成框架,供APP層開發者調用開發出具有特殊業務的手機應用。

2.用Java Native Interface調用core lib層的本地方法,JNI的庫是在Dalvik虛擬機啓動時加載進去的,Dalvik會直接去尋址這個JNI方法,然後去調用。

3、Libraries(系統運行時庫層):從系統結構圖,這層有兩個部分。

3.1、Librares:核心庫提供了Java5 se API的多數功能,並提供Android的核心API,如android.os,android.net,android.media等。C/C++庫的集合,供Android系統的各個組件使用。這些功能通過Android的應用程序框架(application framework)暴露給開發者。各類庫說明如下:

系統類庫名稱 說明
Surface Manager 執行多個應用程序時,管理子系統的顯示,另外也對2D和3D圖形提供支持
Media Framework            基於PacketVideoOpenCore的多媒體庫,支持多種常用的音頻和視頻格式的錄製和回放,所支持的編碼格式包括MPEG4,MP3,H264,AAC,ARM
SQLite                                               本地小型關係數據庫,Android提供了一些新的SQLite數據庫API,以替代傳統的耗費資源的JDBC API
OpenGL|ES                                        基於OpenGL ES 1.0API標準實現的3D跨平臺圖形庫
FreeType 用於顯示位圖和矢量字體
WebKit Web瀏覽器的軟件引擎
SGL 底層的2D圖形引擎
Libc(bionic l  ibc)          繼承自BSD的C函數庫bionic libc,更適合基於嵌入式Linux的移動設備
SSL                      安全套接層,是爲網絡通信提供安全及數據完整性的一種安全協議

3.2、Android runtime(Core Librares + Dalvik虛擬機):

Dalvik虛擬機:Dalvik虛擬機是基於apache的java虛擬機(JVM),並被改進以適應低內存,低處理器速度的移動設備環境。Dalvik虛擬機依賴於Linux內核,實現進程隔離與線程調試管理,安全和異常管理,垃圾回收等重要功能。(這裏提到java虛擬機,簡單敘述一下與Dalvik虛擬機區別:a、java虛擬機運行的是.class,Dalvik虛擬機運行的是.dex;b、java虛擬機基於棧架構。程序在運行時虛擬機需要頻繁的從棧上讀取或寫入數據。Dalvik虛擬機基於寄存器架構,數據的訪問通過寄存器間直接傳遞,這樣的訪問方式比基於棧方式快的多)

關於Dalvik虛擬機這是比較低版本4.4以下的了,從android4.4開始就出現了ART(android runtime),用來代替Dalvik的新型運行環境。當然在4.4的正式環境中用的還是Dalvik,真正開始用ART取代Dalvik是從android5.0開始的。在啓用ART模式後,系統在安裝應用的時候會進行一次預編譯,在安裝應用程序時會先將代碼轉換爲機器語言存儲在本地,這樣在運行程序時就不會每次都進行一次編譯了,執行效率也大大提升(這裏不進行詳細討論)。

這裏還有個重點,在上一層(Framework層:java代碼)與這一層(系統運行時庫層:C\C++代碼)他們又是怎麼能調用的呢?這裏就涉及到了一個JNI:

JNI:Java本地接口(Java Native Interface),它是一個協議。用來溝通Java代碼和外部的本地C/C++代碼, 通過該協議 Java代碼可以調用外部的本地代碼, 外部的C/C++ 代碼可以調用Java代碼。

涉及到JNI的開發,又要說NDK了。

NDK:Google開發的一套開發和編譯工具集, 主要用於Android的JNI開發,是一個用於開發JNI的工具。

這裏涉及到的JNI與DNK不進行詳細,只是簡單敘述一下感念。

4、Linux Kernel(linux內核層):提供核心系統服務,例如:安全、內存管理、進程管理、網絡堆棧、驅動模型。作爲一個應用層開發者,這一層可以不太深入研究。

本文參考 《Android開發之旅:android架構》(http://www.cnblogs.com/skynet/archive/2010/04/15/1712924.html).......,方便自己學習:

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