關於Android基本架構(轉載)

本文轉載自http://www.cnblogs.com/lijunamneg/archive/2013/01/18/2866953.html html

 

 

Android其本質就是在標準的Linux系統上增長了Java虛擬機Dalvik,並在Dalvik虛擬機上搭建了一個JAVA的application framework,全部的應用程序都是基於JAVA的application framework之上。
Android主要應用於ARM平臺,但不只限於ARM,經過編譯控制,在X8六、MAC等體系結構的機器上一樣能夠運行。java

 

 

android分爲四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。
藍色的表明java程序,黃色的代碼爲運行JAVA程序而實現的虛擬機,綠色部分爲C/C++語言編寫的程序庫,紅色的代碼內核(linux內核+driver)。在Application Framework之下,由C/C++的程序庫組成,經過JNI完成從JAVA到C的調用。linux

1) 應用程序
全部的應用程序都是使用JAVA語言編寫的,每個應用程序由一個或者多個活動組成,活動必須以Activity類爲超類,活動相似於操做系統上的進程,可是活動比操做系統的進程要更爲靈活,與進程相似的是,活動在多種狀態之間進行切換。
利用JAVA的跨平臺性質,基於Android框架開發的應用程序能夠不用編譯運行於任何一臺安裝有android系統的平臺,這點正是Android的精髓所在。android

2) 應用程序框架
應用程序的架構設計簡化了組件的重用;任何一個應用程序均可以發佈它的功能塊而且任何其它的應用程序均可以使用其所發佈的功能塊(不過得遵循框架的安全性限制)。幫助程序員快速的開發程序,而且該應用程序重用機制也使用戶能夠方便的替換程序組件。
隱藏在每一個應用後面的是一系列的服務和系統, 其中包括;
 a.豐富而又可擴展的視圖(Views),能夠用來構建應用程序, 它包括列表(lists),網格(grids),文本框(text boxes),按鈕(buttons), 甚至可嵌入的web瀏覽器。
 b.內容提供器(Content Providers)使得應用程序能夠訪問另外一個應用程序的數據(如聯繫人數據庫), 或者共享它們本身的數據。
 c.資源管理器(Resource Manager)提供非代碼資源的訪問,如本地字符串,圖形,和佈局文件(layout files)。
 d.通知管理器(Notification Manager)使得應用程序能夠在狀態欄中顯示自定義的提示信息。
 e.活動管理器(Activity Manager)用來管理應用程序生命週期並提供經常使用的導航回退功能。程序員

3) 系統運行庫
 a)程序庫
    Android包含一些C/C++庫,這些庫能被Android系統中不一樣的組件使用。它們經過Android應用程序框架爲開發者提供服務。
    如下是一些核心庫:
    主要包括基本的C庫、以及多媒體庫以支持各類多媒體格式、位圖和矢量字體、2D和3D圖形引擎、瀏覽器、數據庫支持。
 1.Bionic系統C庫。
 2.媒體庫,基於PacketVideo OpenCORE。
 3.Surface Manager 顧名思義,用於管理Surface。
 4.Webkit,LibWebCore 瀏覽器,基於Webkit引擎。
 5.SGL 底層的2D圖形引擎
 6.3D libraries 基於OpenGL ES 1.0 APIs實現
 7.FreeType 位圖(bitmap)和矢量(vector)字體顯示。
 8.SQLite 一個對於全部應用程序可用,功能強勁的輕型關係型數據庫引擎。
 
   另外這裏還有一個硬件抽象層。其實Android並不是全部的設備驅動都放在linux內核裏面,有一部分實如今用戶空間,
   這麼作的主要緣由是能夠避開Linux所遵循的GPL協議,通常狀況下若是要將Android移植到其餘硬件去運行,
   只須要實現這部分代碼便可。包括:顯示器驅動,聲音,相機,GPS,GSM等等。
 
  b)Android 運行庫(Adroid Runtime)
  Android 包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數功能。
  每個 Android應用程序都在它本身的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。
  Dalvik被設計成一個設備能夠同時高效地運行多個虛擬系統。    
  Dalvik虛擬機執行(.dex)的Dalvik可執行文件,該格式文件針對小內存使用作了優化。
  同時虛擬機是基於寄存器的,全部的類都經由JAVA編譯器編譯,而後經過SDK中的 "dx" 工具轉化成.dex格式由虛擬機執行。
  Dalvik虛擬機依賴於linux內核的一些功能,好比線程機制和底層內存管理機制。
  
4) Linux 內核(LINUX Kernal)
Android 的核心繫統服務依賴於 Linux 2.6 內核 ,如安全性,內存管理,進程管理, 網絡協議棧和驅動模型。 
Linux 內核也同時做爲硬件和軟件棧之間的抽象層。其外還對其作了部分修改,主要涉及兩部分修改:
   a)Binder   
  (IPC):提供有效的進程間通訊,雖然linux內核自己已經提供了這些功能,但Android系統不少服務都須要用到該功能,爲了某種緣由
  其實現了本身的一套。
   b)電源管理:爲手持設備節省能耗。web

 

最後在談談Android所採用的語言,其應用開發採用java語言,咱們所說的java通常包含三個部分:
a) java語言:即其語法,其寫代碼的程式
b) java虛擬機:爲了實現一次編譯處處能夠運行的原則,java在編譯鏈接之後並無產生目標機器語言,而是採用了Java bytecode
    這種Java共用指令,這時就須要一個虛擬機來執行改指令。
c) 庫:跟咱們經常使用的C語言同樣提供一些經常使用的庫
後二者結合就是Java Runtime Environment。數據庫

相關文章
相關標籤/搜索