本章主要介紹了安卓的系統架構和體系
Android源代碼查看網站:
* [Android OS](https://www.androidos.net.cn/)
* [Android XRef](http://androidxref.com )
* http://www.grepcode.com/
可以鄙人的另一篇文章[下載Android源碼以及查看源碼](http://www.hmoore.net/alex_wsc/android_source/402530)
#### **Android 系統架構**:
* **Linux層:**
Linux 層, Android 最低層最核心的部分。當我們打開手機Setting ,選擇about phone 邊項,這一選項所顯示的內核版本,就是我們所用的Linux 內核的版本。Lim以層包含了Android 系統的核心服務,包插硬件驅動、進程管理、安全系統,等等。
* **Dalvik 和 ART:**
* Dalvik好比是一輛可折疊的自行車,平時是折疊的,只有騎的時候,才需要組裝起來用。Dalvik 包含了一整套的Android 運行環境慮擬機,每個App 都會分配Dalvik 虛擬機來保證互相之間不受干擾,并保持獨立。它的特點是在運行時編譯。
* ART好比是一輛組裝好了的自行車,裝好就可以騎了。在Android 5.X 版本開始, ART 模式已經取代了Dalvik , ART采用的是安裝時就進行編譯,以后運行時就不用編譯了,
#### **Android APP組件架構:**
在應用層,Android 的App組件架構,通常就是我們所說的Android 四大組件, 指的是Activity 、BroadCastReciever、ContentProvider 和Service ,它們是組成一個Android App的最基本元素。
Android系統還提供了一個信使-Intent ,作為信息傳邊的載體。組件與組件之間通過Intent來通信、傳遞信息、交換數據,正是通過這樣一種方式,四大組件形成了各自獨立而又緊密聯系的關系,讓整個Android系統“活”了起來。
**應用運行上下文對象**
在程序中,我們可以理解為當前對象在程序中所處的一個環境,一個與系統交互的過程。
Android系統的上下文對象,即在Context中,為我們封裝這樣一個“語境”。Activity、Service、Application 都是繼承自Context。
Android 應用程序會在如下所示的幾個時間點創建應用上下文Context 。
* 創建Application
* 創建Activity
* 創建Service
當應用程序第一次啟動時, Android系統都會創建一個Application對象,同時創建Application Context,所有的組件都共同擁有這樣一個Context對象,這個應用上下文對象貫穿整個應用進程的生命周期,為應用全局提供功能和環境支峙。而創建Activity 和Service 組件時,系統也會給它們提供運行的上下文環境,即創建Aclivily實例、Service實例的Context對象。所以很多讀者在Activity中獲取Context 對象時,可以直接使用this ,而在匿名內部類中,就必須指定XXXXActivity.this才可以獲得該Activity的Context對象。當然,你也可以跑過getApplicationContext()方也來獲取整個App的Context,但是通過getApplicationContext()應也獲得的是整個應用的上下文引用,這與某個組件的上下文引用,在某些時候還是有區別的。
#### **Android系統源代碼目錄:**
**要想看完整個Android的源代碼,你要懂C、懂腳本、懂Java**,不僅軟硬兼施,而且有一顆耐得住寂寞、忍得了枯燥的心。所以,對于大多數人來說,我們只需要了解它的框架結構,出了問題知道從哪里著手解決就可以了。
**目錄結構**:
* Makefile (描述Android各個組件間的聯系并指導它們進行自動化編譯)
* bionic (bionic C庫)
* bootable (啟動引導相關代碼)
* build (系統編譯規則等基礎開發包配置)
* cts (Google兼容性測試標準)
* dalvik (Dalvik虛擬機)
* development (應用程序開發相關)
* external (android使用的一些開源模塊)
* frameworks (Framework框架核心)
* hardware (廠商硬件適配層HAL)
* out (編譯完成后的代碼輸出目錄)
* packages (應用程序包)
* prebuilt (x86和arm架構下預編譯資源)
* sdk (sdk及模擬器)
* system (底層文件系統庫、應用及組件)
* vendor (廠商定制代碼)
>[info] 注意:并不是所有的源代碼結構都是這樣。只有AOSP的Android項目才是過樣一個結構,有些芯片廠商如MTK,它們的同錄結構就與此不同。
**Makefile 機制**
Android與很多語言一樣,引入了Makefile 機制。那么Makefile到底有什么好處呢?我們先看一下對Makefile 的解釋:一個像Android這樣的大型工程,它的源文件不計其數,不同的功能、模塊,按類型分別放置在不同的目錄中,這些模塊通常會有-個叫Makefile的文件來進行管理。它定義了一系列的規則來指定模塊,哪些文件需要編譯,以及這些文件該按照怎樣的順序去編譯。甚至,它還可以配置更復雜的功能操作,比如定義編譯規則,打包規則等,因為Makefile 就像一個shell腳本,不僅可以使用自己的語法, 也能調用操作系統的命令。
可以看到, Makefile最大的好處就是自動化編譯,同時還可以做到可控制的編譯,Android通過Makefile來描述Android各個組件間的聯系并指導它們進行自動化編譯。Makefile的語法,指定了各個源代碼該如何連接并生成相應的可執行徨序。這時候大家再來看看我們前面列出的Android源代碼目錄結構,每個目錄中,還會包含更多的日錄,而它的每一個最小的功能單位的目錄下,都會有-個Makefile文件, 這樣每一級向上,通過過樣一個個Makefile文件,就把整個源代碼有條不紊地聯系在一·起了。
#### **Android系統目錄**:
* /system/app/ 存放一些系統的app
* /system/bin/ 存放的主要是Linux自帶的組件
* /system/build.prop/ 系統的屬性信息
* /system/fonts/ 系統字體存放目錄 root后可下載TTF格式字體替換原字體,達到修改系統字體的效果
* /system/framwork/ 系統核心文件、框架層
* /system/lib/ 存放幾乎所有共享庫(.so)文件
* /system/media/ 系統提示音和系統鈴聲
* /system/usr/ 保存用戶的配置文件
* /data/app/ 包含用戶的大部分數據信息、用戶安裝的app和升級的app
* /data/data/ 包含app的數據信息、文件信息、數據庫信息等,以包名的方式來區分各個應用
* /data/system/ 手機各項系統信息
* /data/misc/ 保存大部分wifi和vpn信息
本章對于開發的內容介紹的不多 就寫這么多了!