bionic,整個系統的基礎類庫,Android系統就是基於這個類庫開發的,
system,Android系統類別庫,基於bionic類庫開發,包含工具類庫(libcutils),LOG類庫(liblog),壓縮類庫(libzipfile)類。
主要功能有:
一、完成Android初始化(init)。
解析init.rc並開啟系統初始化時需要載入的程式(parser.c),初始化裝置(devices.c),開啟屬性服務(property_service.c)等。
二、開啟Android系統的一些基礎服務。
1、系統的裝置服務(vold)。比如完成SD卡掛載、卸載管理,從核心處接收事件建立裝置結點等。
三、SHELL程式及相應的toolbox。
四、ADB程式。
五、logcat系統。
可以說,bionic和system兩個檔案裡的東西完成了Android對Linux的封裝,在這兩個檔案夾的基礎上構建起了Android系統的兩大核心模組:Dalvik和Framework。Dalvik是一個基礎純C的VM,這個網上有比較詳細的說明。重點一層層地分析一下Framework。
最底層就是幾大模組:
1、utils工具庫(frameworks/base/libs/utils/目錄下)
這個類庫基於bionic編譯寫,提供了一些對bionic裡面的基礎C/C++類庫中的高層次封裝。Framework中的C++程式大量使用這裡的類庫來封裝更高層的系統功能。
2、binder庫(framewoks/base/libs/binder/目錄下)
這個與OpenBinder開源項目相似,提供了一種進程通訊機制。C++和Java層都大量使用了這種機制。它把通訊雙方分為服務提供者和使用者兩種角色。提供者內部有註冊的服務介面,使用者去尋找調用。
3、ui庫(frameworks/base/libs/ui/目錄下)
這個庫主要提供了UI繪製和視頻輸出兩類介面,整個系統的輸出架構都是以這個庫為基礎,通過它與FrameBuffer通訊。
4、surfaceflinger庫(frameworks/base/libs/surfaceflinger/目錄下)
對ui庫的更高層次的封裝,通過binder機制對Android系統中的上層模組提供輸出服務。
5、audioflinger庫(frameworks/base/libs/audioflinger/目錄下)
音訊輸出基礎類庫,上層模組通過這個庫與驅動還有打交導輸出聲音。
6、大量開源庫(external/目錄下)
這幾大模組構成了整個Framework的基礎。圍繞這幾大模組,就可以構建一個真正的作業系統的上層模組,建立應用程式運行環境了。比較典型的有:
多媒休服務,提供給音視頻播放和錄製服務。
服務管理,維護和管理系統中存在的大量服務提供者,應用程式通過binder機制通過服務管理中心的servicemanager來訪問和使用這些服務,比如電源、藍芽、Wifi等模組都以服務的形式存在於系統中供應用程式調用。
運行時環境,初始化應用程式的運行環境,並載入第一個應用程式,Launcher。
應用程式運行時環境建立完成後,系統就算正式啟動起來了。當一個應用程式被載入到系統中時,它和系統打交導最多的就是系統提供的開發API了。主要集中在frameworks/base/core/目錄下。