android基本架構


Android其本質就是在標准的Linux系統上增加了Java虛擬機Dalvik,並在Dalvik虛擬機上搭建了一個JAVA的application framework,所有的應用程序都是基於JAVA的application framework之上。
Android主要應用於ARM平台,但不僅限於ARM,通過編譯控制,在X86、MAC等體系結構的機器上同樣可以運行。

 

    從上圖中可以看出,Android系統架構為四層結構,從上層到下層分別是應用程序層、應用程序框架層、系統運行庫層以及Linux內核層,分別介紹如下:

    1)應用程序層

         Android平台不僅僅是操作系統,也包含了許多應用程序,諸如SMS短信客戶端程序、電話撥號程序、圖片瀏覽器、Web瀏覽器等應用程序。這些應用程序都是       用Java語言編寫的,並且這些應用程序都是可以被開發人員開發的其他應用程序所替換,這點不同於其他手機操作系統固化在系統內部的系統軟件,更加靈活和個    性化。

 

    2)應用程序框架層

         應用程序框架層是我們從事Android開發的基礎,很多核心應用程序也是通過這一層來實現其核心功能的,該層簡化了組件的重用,開發人員可以直接使用其提    供的組件來進行快速的應用程序開發,也可以通過繼承而實現個性化的拓展。

         a) Activity Manager(活動管理器)

              管理各個應用程序生命周期以及通常的導航回退功能

         b) Window Manager(窗口管理器)

              管理所有的窗口程序

         c)  Content Provider(內容提供器)

 

              使得不同應用程序之間存取或者分享數據

         d) View System(視圖系統)

              構建應用程序的基本組件

         e) Notification Manager(通告管理器)

 

              使得應用程序可以在狀態欄中顯示自定義的提示信息

         f) Package Manager(包管理器) 

 

              Android系統內的程序管理

         g)Telephony Manager(電話管理器)

 

              管理所有的移動設備功能

 

 

         h)Resource Manager(資源管理器)

 

              提供應用程序使用的各種非代碼資源,如本地化字符串、圖片、布局文件、顏色文件等

         i)Location Manager(位置管理器)

 

             提供位置服務

 

 

         j)XMPP Service(XMPP服務)

 

             提供Google Talk服務 

 

  

    3)系統運行庫層

         從圖中可以看出,系統運行庫層可以分成兩部分,分別是系統庫和Android運行時,分別介紹如下:

         a)系統庫

              系統庫是應用程序框架的支撐,是連接應用程序框架層與Linux內核層的重要紐帶。其主要分為如下幾個:

              Ø  Surface Manager:

                  執行多個應用程序時候,負責管理顯示與存取操作間的互動,另外也負責2D繪圖與3D繪圖進行顯示合成。 

     Ø  Media Framework: 

                  多媒體庫,基於PacketVideo OpenCore;支持多種常用的音頻、視頻格式錄制和回放,編碼格式包括MPEG4、MP3、H.264、AAC、ARM。

 

 

              Ø  SQLite:

                  小型的關系型數據庫引擎 

              Ø  OpenGL|ES:

                  根據OpenGL ES 1.0API標准實現的3D繪圖函數庫 

              Ø  FreeType:

                  提供點陣字與向量字的描繪與顯示 

 

              Ø  WebKit:

                  一套網頁瀏覽器的軟件引擎

 

 

 

              Ø  SGL:

                  底層的2D圖形渲染引擎 

 

              Ø  SSL:

                  在Andorid上通信過程中實現握手 

              Ø  Libc:

 

             從BSD繼承來的標准C系統函數庫,專門為基於embedded linux的設備定制

 

 

 

         b)Android運行時

             Android應用程序時采用Java語言編寫,程序在Android運行時中執行,其運行時分為核心庫和Dalvik虛擬機兩部分。

 

             Ø  核心庫

                 核心庫提供了Java語言API中的大多數功能,同時也包含了Android的一些核心API,如android.os、android.net、android.media等等。

 

             Ø  Dalvik虛擬機

                 Android程序不同於J2me程序,每個Android應用程序都有一個專有的進程,並且不是多個程序運行在一個虛擬機中,而是每個Android程序都有一                個Dalivik虛擬機的實例,並在該實例中執行。Dalvik虛擬機是一種基於寄存器的Java虛擬機,而不是傳統的基於棧的虛擬機,並進行了內存資源使用的優化          以及支持多個虛擬機的特點。需要注意的是,不同於J2me,Android程序在虛擬機中執行的並非編譯后的字節碼,而是通過轉換工具dx將Java字節碼轉成dex格          式的中間碼。

  

 

 

    4)Linux內核層 

        Android是基於Linux2.6內核,其核心系統服務如安全性、內存管理、進程管理、網路協議以及驅動模型都依賴於Linux內核。

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

1) 應用程序
所有的應用程序都是使用JAVA語言編寫的,每一個應用程序由一個或者多個活動組成,活動必須以Activity類為超類,活動類似於操作系統上的進程,但是活動比操作系統的進程要更為靈活,與進程類似的是,活動在多種狀態之間進行切換。
利用JAVA的跨平台性質,基於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 運行庫
  Android 包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數功能。
  每一個 Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。
  Dalvik被設計成一個設備可以同時高效地運行多個虛擬系統。    
  Dalvik虛擬機執行(.dex)的Dalvik可執行文件,該格式文件針對小內存使用做了優化。
  同時虛擬機是基於寄存器的,所有的類都經由JAVA編譯器編譯,然后通過SDK中的 "dx" 工具轉化成.dex格式由虛擬機執行。
  Dalvik虛擬機依賴於linux內核的一些功能,比如線程機制和底層內存管理機制。
  
4) Linux 內核
Android 的核心系統服務依賴於 Linux 2.6 內核 ,如安全性,內存管理,進程管理, 網絡協議棧和驅動模型。 
Linux 內核也同時作為硬件和軟件棧之間的抽象層。其外還對其做了部分修改,主要涉及兩部分修改:
   a)Binder   
  (IPC):提供有效的進程間通信,雖然linux內核本身已經提供了這些功能,但Android系統很多服務都需要用到該功能,為了某種原因
  其實現了自己的一套。
   b)電源管理:為手持設備節省能耗。

 

最后在談談Android所采用的語言,其應用開發采用java語言,我們所說的java一般包含三個部分:
a) java語言:即其語法,其寫代碼的程式
b) java虛擬機:為了實現一次編譯到處可以運行的原則,java在編譯連接以后並沒有產生目標機器語言,而是采用了Java bytecode
    這種Java共用指令,這時就需要一個虛擬機來執行改指令。
c) 庫:跟我們常用的C語言一樣提供一些常用的庫
后兩者結合就是Java Runtime Environment。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM