Android 5.0內核和源代碼學習(1)——系統簡介


一、爲什麼要學習Android內核

Android應用以來,但是總感覺蒙了一層霧,爲什麼是activity的生命週期是這樣?爲什麼要分UI線程和其他線程?AndroidLinux有什麼區別?

我想要知其所以然,而不是天天學習搬磚,語言技術總是在變,程序員總要抓住其中不變的內涵。

因此,Android內核和源碼學習之路開始了,既是總結以前看過的Android知識,也是督促自己繼續深造。

廢話到此,開始!

 

二、Android的系統架構圖

每一個Android學習者總是要先看這張圖的,這張圖雖然簡單,但是每個層次的開發者總能看到不一樣的內涵

        

上圖從上往下分爲:(1)應用程序層(2)應用程序框架層(3)系統運行庫層(4)硬件抽象接口層  (5)Linux內核層。

在開發應用的Android程序員看來,應該最關注第一、二層;更資深一點的程序員眼裏應該會關注第三層(NDK開發);大牛級別的Android開發者,比如手機廠商的定製Android系統的人員,則會關注第四層。

    其實這張圖應該叫做邏輯系統架構圖,因爲從源代碼工程上沒有劃分層次的說法。

總之,正是應了一千個XXX有一千個XXX的那句話,每個級別的程序員關注的、看到的都不一樣。

                  

三、Android的應用程序框架層詳解

Android系統使用的是Linux內核,實際上Android只是在Linux內核之外加上了很多Android特有的東西:比如特定硬件的驅動、Android的類庫、一些服務、JAVA運行時等等等等。

其中第二層,應用程序框架層是從事Android開發的基礎,很多核心應用程序也是通過這一層來實現其核心功能。那麼理解這一層對於理解Android系統的設計思想是很有幫助的。如圖所示,這一層提供很多服務(不止下面介紹的),解析如下:

1 ActivityManager(活動管理器): 管理各個應用程序生命週期以及通常的導航回退功能。

2 WindowManager(窗口管理器):管理所有的窗口程序

3  ContentProvider(內容提供器):使得不同應用程序之間存取或者分享數據

4 ViewSystem(視圖系統):構建應用程序的基本組件

5 NotificationManager(通告管理器):使應用程序可以在狀態欄中顯示提示信息

6 PackageManager(包管理器) Android系統內的程序管理

7TelephonyManager(電話管理器):管理所有的移動設備通話相關功能

8ResourceManager(資源管理器):提供應用程序使用的各種非代碼資源,如本地化字符串、圖片、佈局文件、顏色文件等

9LocationManager(位置管理器):提供位置服務

10XMPPServiceXMPP服務):提供GoogleTalk服務 (可以做消息推送)

 

注:可能有人問了,爲什麼我把這些什麼什麼器叫做服務?其實從兩個方面可以解答:

a) Android系統的啓動過程中就把這些東西叫做服務;

b)從編程角度來看,你要獲得上面一個什麼什麼器都是用這樣的語句(這個是獲取窗口,其他的都類似):

WindowManager mManager=(WindowManager)getSystemService(Context.WINDOW_SERVICE); 

從語句上來看getSystemService不正是獲取服務的意思嗎?

 

  四、Android的系統運行庫層詳解

  1、系統庫

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

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

  2MediaFramework 多媒體庫,基於PacketVideoOpenCore;支持多種常用的音頻、視頻格式錄製和回放,編碼格式包括MPEG4MP3H.264AACARM

  3SQLite:存儲在本地的小型的關係型數據庫引擎 

  (4OpenGL|ES:根據OpenGL ES1.0API標準實現的3D繪圖函數庫 

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

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

  7SGL:底層的2D圖形渲染引擎 

  8SSL:在Andorid上通信過程中實現加密 

  9Libc:標準C系統函數庫(包含C語言最基本的函數庫)

2Android運行時

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

  1)核心庫:核心庫提供了Java語言API中的大多數功能,同時也包含了Android的一些核心API,android.osandroid.netandroid.media等等。

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

 

五、Android的硬件抽象層HAL

 Android的硬件抽象層,簡單來說,就是對Linux內核驅動程序的封裝,向上提供接口,屏蔽低層的實現細節。


AndroidLinux內核層

早期的Android採用了Linux 2.3內核,最新的Android 5.0基於Linux 3.1,各大手機廠商訂製的Android系統基於的Linux內核就看心情了(小米的是3.3)。

 

七、小結與下一篇

這一篇主要介紹了Android的層次結構,從宏觀上了解系統的組成架構。下一篇將講解如何獲取Android源碼,並結合源碼詳細解析Android系統的啓動過程。

 

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