Android 平臺(tái)架構(gòu)

????????Android 是一種基于 Linux 的開放源代碼軟件棧,如下圖:


系統(tǒng)應(yīng)用層

????????Android 系統(tǒng)包含一系列核心應(yīng)用,比如電子郵件、短信、日歷、互聯(lián)網(wǎng)瀏覽和聯(lián)系人等。我們開發(fā)的應(yīng)用一般也位于該層。 系統(tǒng)包含的應(yīng)用與用戶開發(fā)應(yīng)用一樣,沒有特殊狀態(tài)。因此第三方應(yīng)用可成為用戶的默認(rèn)網(wǎng)絡(luò)瀏覽器、短信 Messenger 甚至默認(rèn)鍵盤(但有一些例外,例如系統(tǒng)的“設(shè)置”應(yīng)用,此外,第三方系統(tǒng)開發(fā)商可能會(huì)對(duì)系統(tǒng)應(yīng)用做出額外限制)。
????????系統(tǒng)應(yīng)用可用作用戶的應(yīng)用,以及提供開發(fā)者可從其自己的應(yīng)用訪問的主要功能。例如,如果您的應(yīng)用要發(fā)短信,您無需自己構(gòu)建該功能,可以改為調(diào)用已安裝的短信應(yīng)用向您指定的接收者發(fā)送消息。

Java API框架層

????????這個(gè)部分是使用 Java 語言編寫的 API 。這些 API 形成創(chuàng)建 Android 應(yīng)用所需的構(gòu)建塊,它們可簡化核心模塊化系統(tǒng)組件和服務(wù)的重復(fù)使用。我們也是通過使用這些API來開發(fā)應(yīng)用,從上圖看,它包含:

  • Content Providers:可讓應(yīng)用訪問其他應(yīng)用(例如“聯(lián)系人”應(yīng)用)中的數(shù)據(jù)或者共享其自己的數(shù)據(jù)
  • View System:,可用以構(gòu)建應(yīng)用的 UI,包括列表、網(wǎng)格、文本框、按鈕甚至可嵌入的網(wǎng)絡(luò)瀏覽器
  • Managers:各種managers,如ActivityManager,LocationManager,PackageManager等一些核心模塊化系統(tǒng)組件和服務(wù),點(diǎn)擊此處查看所有API。

C/C++原生庫

????????Android包含被不同組件使用的C/C++庫,一般而言,Android應(yīng)用開發(fā)者不能直接調(diào)用,需要通過Java API框架層提供的API來簡介調(diào)用它。例如,通過 Android 框架的 Java OpenGL API訪問OpenGL。
????????如果需要開發(fā) C 或 C++ 代碼的應(yīng)用,就需要用 Android NDK直接從原生代碼訪問某些原生平臺(tái)庫。
????????一般包括以下內(nèi)容:

  • C 標(biāo)準(zhǔn)庫 (libc/libm) :專門為嵌入式Linux設(shè)備調(diào)整過的標(biāo)準(zhǔn)C系統(tǒng)庫。
  • C++:支持多種 C++ 運(yùn)行時(shí)庫。
  • webakit:瀏覽器引擎。
  • OpenMAX AL:Android 原生多媒體處理基于 Khronos Group OpenMAX AL 1.0.1 API。
  • OpenGL ES: OpenGL 三維圖形API的子集,針對(duì)手機(jī)、PDA和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)。

Android運(yùn)行時(shí)

????????Android運(yùn)行時(shí)由兩部分組成:Android核心庫集和ART。核心庫集提供了Java語言核心庫所能使用的絕大部分功能,而ART負(fù)責(zé)運(yùn)行Android應(yīng)用程序。
????????Android5.0的運(yùn)行時(shí)由Dalvik虛擬機(jī)和Android核心庫集組成,在Dalvik下,應(yīng)用每次運(yùn)行都需要通過即時(shí)編譯器(JIT)將字節(jié)碼轉(zhuǎn)換為機(jī)器碼,即每次都要編譯加運(yùn)行,這雖然會(huì)使安裝過程比較快,但是會(huì)拖慢應(yīng)用以后每次啟動(dòng)的效率。而在ART 環(huán)境中,應(yīng)用在第一次安裝的時(shí)候,字節(jié)碼就會(huì)預(yù)編譯(AOT)成機(jī)器碼,這樣的話,雖然設(shè)備和應(yīng)用的首次啟動(dòng)(安裝慢了)會(huì)變慢,但是以后每次啟動(dòng)執(zhí)行的時(shí)候,都可以直接運(yùn)行,因此運(yùn)行效率會(huì)提高。
????????ART占用空間比Dalvik大(字節(jié)碼變?yōu)闄C(jī)器碼之后,可能會(huì)增加10%-20%),這也是著名的“空間換時(shí)間大法"。

硬件抽象層 (HAL)

????????硬件抽象層 (HAL)提供標(biāo)準(zhǔn)界面,向更高級(jí)別的 Java API 框架顯示設(shè)備硬件功能。HAL 包含多個(gè)庫模塊,其中每個(gè)模塊都為特定類型的硬件組件實(shí)現(xiàn)一個(gè)界面,例如相機(jī)或藍(lán)牙模塊。當(dāng)框架 API 要求訪問設(shè)備硬件時(shí),Android 系統(tǒng)將為該硬件組件加載庫模塊。

Linux內(nèi)核

????????Android 平臺(tái)的基礎(chǔ)是 Linux 內(nèi)核。例如,Android Runtime (ART)依靠 Linux 內(nèi)核來執(zhí)行底層功能,例如線程和低層內(nèi)存管理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 3,229評(píng)論 0 3
  • 本篇文章為Android源碼學(xué)習(xí)的第一章,主要講述Android平臺(tái)架構(gòu)的分層,以及如何下載Android源碼。 ...
    codeteenager閱讀 400評(píng)論 0 0
  • Android 是一種基于 Linux 的開放源代碼軟件棧,為廣泛的設(shè)備和機(jī)型而創(chuàng)建。下圖所示為 Android ...
    Spl_none閱讀 170評(píng)論 0 0
  • Android 是一種基于 Linux 的開放源代碼軟件棧,為廣泛的設(shè)備和機(jī)型而創(chuàng)建。下圖所示為 Android ...
    zoustin閱讀 509評(píng)論 0 0
  • 【Android 平臺(tái)架構(gòu)】 Android 是一種基于 Linux 的開放源代碼軟件棧,為廣泛的設(shè)備和機(jī)型而創(chuàng)建...
    Rtia閱讀 1,226評(píng)論 0 1

友情鏈接更多精彩內(nèi)容