官术网_书友最值得收藏!

1.3 系統(tǒng)結(jié)構(gòu)和代碼結(jié)構(gòu)

對Android系統(tǒng)結(jié)構(gòu)的了解,可以從其軟件系統(tǒng)架構(gòu)和開源工程的源代碼結(jié)構(gòu)兩個方面進(jìn)行了解。

1.3.1 軟件系統(tǒng)結(jié)構(gòu)

1.Android的軟件層次

按照自下而上的結(jié)構(gòu),Android的軟件系統(tǒng)分成4個層次。

● 第1層次:操作系統(tǒng)層(Linux kernel)。Android系統(tǒng)基于Linux操作系統(tǒng),第1層次為Linux內(nèi)核和相關(guān)驅(qū)動。不同硬件平臺使用不同的內(nèi)核。

● 第2層次:庫(Libraries)和運(yùn)行環(huán)境(Android Runtime)。包括各個本地的C語言和C++庫,可能來自開源工程或者Android的原創(chuàng)。運(yùn)行環(huán)境包括C++語言實(shí)現(xiàn)的虛擬機(jī)(Dalvik Virtual Machine)和Java核心類(Core Libraries)。

● 第3層次:應(yīng)用程序框架(Application Framework)。Android原創(chuàng)Java框架層,由幾個Java庫組成。

● 第4層次:應(yīng)用程序(Applications)。由Java代碼、資源文件、工程描述文件生成的各個單獨(dú)的應(yīng)用程序包。

Android的軟件結(jié)構(gòu)如圖1-2所示。

從宏觀上說,Android的第1層次由C語言實(shí)現(xiàn),第2層次由C和/C++實(shí)現(xiàn),第3、4層次主要由Java代碼實(shí)現(xiàn)。

● Android的操作系統(tǒng)也就是嵌入式Linux的內(nèi)核和相關(guān)驅(qū)動程序,使用C語言編寫,從操作系統(tǒng)的角度運(yùn)行于內(nèi)核空間。

● 庫(又稱為本地框架)和Java虛擬機(jī)實(shí)際上是本地層的程序,使用C語言和C++編寫,從操作系統(tǒng)的角度運(yùn)行于用戶空間。

● 應(yīng)用程序框架(又稱為Java框架)和應(yīng)用程序使用Java語言編寫,從操作系統(tǒng)的角度運(yùn)行于用戶空間。

圖1-2 Android系統(tǒng)的層次結(jié)構(gòu)

Android幾個層次之間的主要關(guān)系如下所示。

● 第1層次和第2層次之間,從Linux操作系統(tǒng)的角度來看,是內(nèi)核空間與用戶空間的分界線,第1層次運(yùn)行于內(nèi)核空間,第2、3、4層次運(yùn)行于用戶空間。

● 第2層次和第3層次之間,是本地代碼層和Java代碼層的接口。

● 第3 層次和第4 層次之間,是Android框架層和應(yīng)用程序兩層Java程序的接口,Android的系統(tǒng)API屬于其中的一部分。

2.框架層的主干

在Android四個層次的系統(tǒng)架構(gòu)中,第2層本地框架層和Android運(yùn)行環(huán)境,第3層Java框架層,均屬于框架層的概念中。

框架層部分是Android開源工程中占據(jù)內(nèi)容比重較大的。在Android龐大的框架層中,存在著一個主干部分和若干非主干部分。主干部分是Android系統(tǒng)的核心,主干部分的不同層次具有緊密的聯(lián)系,非主干部分屬于各種相對獨(dú)立的功能模塊。

Android的主干部分主要包括以下方面。

● C/C++基礎(chǔ)庫:提供標(biāo)準(zhǔn)的C語言和C++的編程支持。

● C語言的工具庫:提供Android的特定的純C語言的工具支持。

● init可執(zhí)行程序及其執(zhí)行的腳本init.rc:作為用戶空間第1個進(jìn)程。

● C++的工具庫:提供Android的C++特殊編程支持。

● Binder庫和servicemanager可執(zhí)行程序:提供主要IPC機(jī)制支持。

● 幾個本地可執(zhí)行程序:作為守護(hù)進(jìn)程服務(wù)于Android。

● Dalvik虛擬機(jī):負(fù)責(zé)執(zhí)行字節(jié)碼。

● Java核心庫:提供標(biāo)準(zhǔn)Java語言的支持。

● Java框架庫:提供Android的各個Java類庫。

● Java框架資源包:提供Android Java框架層的資源。

● Java服務(wù)庫:提供Android Java框架層的系統(tǒng)服務(wù)。

以上的各個方面,基本在軟件層次中是自下而上的排列方式。其中連接本地框架層和Java框架層的是JNI(Java本地調(diào)用)機(jī)制。

1.3.2 源代碼結(jié)構(gòu)

1.工程的分類

按照Google的Android網(wǎng)站的描述,Android全部代碼的工程分為3個部分。

● 核心工程(Core Project):建立Android系統(tǒng)的基礎(chǔ),在源代碼根目錄的幾個主要的目錄中,Linux內(nèi)核也屬于Android的核心工程。

● 擴(kuò)展工程(External Project):使用其他開源項(xiàng)目實(shí)現(xiàn)的各個功能,在源代碼的external目錄中。

● 包(Package):提供Android的應(yīng)用程序包,包括綜合應(yīng)用程序、內(nèi)容提供者、輸入法、墻紙系統(tǒng)等,在源代碼的package目錄中。

2.根目錄的結(jié)構(gòu)

Android源代碼的根目錄的內(nèi)容如表1-1所示。

表1-1 Android源代碼的根目錄結(jié)構(gòu)

Android的源代碼是一個龐大的目錄,包括了Java、C和C++等語言的代碼,支持腳本,開發(fā)的二進(jìn)制工具等多方面的內(nèi)容。Android源代碼中核心的框架部分的幾個重要目錄如下所示。

● system/core/:一個基本Linux系統(tǒng)用戶空間的內(nèi)容。

● frameworks/base/include/:本地框架層的頭文件。

● frameworks/base/libs/:本地框架層的源文件。

● frameworks/base/core/java:Java框架庫中主體的Java部分。

● frameworks/base/core/res:Java框架資源包。

● frameworks/base/core/jni:Java框架庫中主體的JNI部分。

● frameworks/base/services/java:Java服務(wù)庫的Java部分。

● frameworks/base/services/jni:Java服務(wù)庫的JNI部分。

● dalvik和libcore:作為Android運(yùn)行環(huán)境虛擬機(jī)和Java核心庫。

以上幾個部分也是Android開源工程中原創(chuàng)性較強(qiáng)的幾個部分,也是整個Android系統(tǒng)的核心和精華。

3.擴(kuò)展工程中的內(nèi)容

Android的擴(kuò)展工程,也就是external目錄中包含了眾多工程。它們大都來自第三方,而非Android開源工程的原創(chuàng)。

external目錄中的內(nèi)容大部分負(fù)責(zé)引擎(engine)的職責(zé),運(yùn)行于Android提供的較低層,處于被調(diào)用的地位,其中幾個主要的部分如下所示。

● Skia:圖形引擎。

● SQLite:數(shù)據(jù)庫系統(tǒng)。

● FreeType:字體引擎。

● Webkit:瀏覽器引擎。

● 多媒體引擎。

external目錄中的擴(kuò)展工程如表1-2所示。

表1-2 Android的擴(kuò)展工程

續(xù)表

續(xù)表

external中有些工程是沒有包含在默認(rèn)的開源工程當(dāng)中的,也是默認(rèn)的repo sync不能獲得這些源代碼,但是可以通過git clone得到。

主站蜘蛛池模板: 瓮安县| 寿阳县| 呼和浩特市| 荆门市| 蓝山县| 乌兰察布市| 镇平县| 济宁市| 襄城县| 新巴尔虎左旗| 白山市| 应用必备| 淳安县| 晋州市| 张家界市| 漳浦县| 宽甸| 江川县| 临颍县| 水城县| 富民县| 南木林县| 遵义市| 莆田市| 冀州市| 鹿邑县| 民勤县| 温宿县| 青阳县| 崇州市| 车险| 睢宁县| 开江县| 晋城| 黑龙江省| 屏东县| 二连浩特市| 乌拉特前旗| 榆社县| 呼图壁县| 辽宁省|