Android-系統架構

Merbng發表於2018-05-20

系統架構.png

應用程式(Application)

Android會同一系列核心應用程式一起釋出,該應用程式包包含email客戶端、SMS簡訊息程式、日曆、地圖、瀏覽器、聯絡人管理程式等。所有的應用程式都是使用Java語言編寫的,通常開發人員就處在這一層。

應用程式框架(Application Frameworks)

提供應用程式開發的各種API進行快速開發,也即隱藏在每個應用後面的是一系列的服務和系統,大部分使用Java編寫,所謂官方原始碼很多也就是看這裡,其中包括:

  • 豐富而又可擴充套件的檢視(Views): 可以用來構建應用程式,它包括列表(lists)、網格(grids)、文字框(text boxes)、按鈕(buttons),甚至可嵌入的web瀏覽器。
  • 內容提供器(Content Providers): 使得應用程式可以訪問另一個應用程式的資料(如聯絡人資料庫),或者共享他們自己的資料。
  • 資源管理器(Resource Manager): 提供 非程式碼資源的訪問,如本地字串、圖形、和佈局檔案(layout files)。
  • 通知管理器(Notification Manager): 使得應用程式可以在狀態列中顯示自定義的提示資訊。
  • 活動管理器(Activity Manager): 用來管理應用程式生命週期並提供常用的導航回退功能。

系統執行庫與Android執行環境(Libraris&Android Runtime)

系統執行庫

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

  • Bionic 系統C庫 一個從BSD繼承來的標準C系統函式庫(libc),它是專門為基於 embedded linux的裝置訂製的。
  • 媒體庫 基於 PacketVideo OpenCORE;該庫支援多種常用的音訊、視訊格式回放和錄製,同時支援靜態影像檔案,編碼格式包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG。
  • Surface Manager 對顯示子系統的管理,並且為多個應用程式提供了2D和3D圖層的無縫融合。
  • Webkit,LibWebCore 一個最新的web瀏覽器引擎用,支援Android瀏覽器和一個可嵌入的web檢視,鼎鼎大名的 Apple Safari背後的引擎就是Webkit
  • SGL 底層的2D圖形引擎
  • 3D libraries 基於OpenGL ES1.0 APIs實現;該庫可以使用硬體3D加速(如果可用)或者使用高度優化的3D軟加速。
  • FreeType 點陣圖(bitmap)和向量(vector)字型顯示
  • SQLite 一個對於使有應用程式可用,功能強勁的輕型關係型資料庫引擎。

Android執行環境

該核心庫提供了Java程式語言核心庫的大多數功能。每一個Android應用程式都在它自己的程式中執行,都擁有一個獨立的Dalvik虛擬機器例項。Dalvik被設計成一個裝置可用同時高效的執行多個虛擬系統,Dalvik虛擬機器執行(.dex)的Dalvik可執行檔案,該格式檔案針對小記憶體使用做了優化。同時虛擬機器是基於暫存器的,所有的類都經由Java編譯器編譯,然後通過SDK中的“dx”工具轉化成.dex格式由虛擬機器執行

HAL 硬體抽象層

其實Android並非將所有的裝置驅動都放在linux核心裡面,而是實現在userspace空間,這麼做的主要原因是GPL協議,Linux是遵循該協議來發布的,也就意味著對於linux核心的任何修改,都必須釋出其原始碼。而現在這麼做就可以避開而無需釋出其原始碼,畢竟它是用來賺錢的,而在linux核心中為這些userspace驅動不可以直接控制的硬體可以被訪問,而只需公佈這個後門程式碼即可,一般情況下如果要將Android移植到其他硬體去執行,只需要實現這部分程式碼即可,包括:顯示器驅動,聲音,相機,GPS,GSM等等。

Linux核心(Linux Kernel)

Android的核心繫統服務依賴於Linux2.6核心,如安全性、記憶體管理、程式管理,網路協議和驅動模型。Linux核心也同時作為硬體和軟體之間的抽象層,其外還對其做了部分修改,主要設計兩部分修改:

  • Binder(IPC) 提供有效的程式間通訊,雖然linux核心本身已經提供了這些功能,但Android系統很多服務都需要用到該功能,為了某種原因其實現了自己的一套。
  • 電源管理 主要為了省電,比較手機是手持裝置,低耗電才是我們的追求。

相關文章