Android從誕生到現(xiàn)在僅有短短幾年的時(shí)間,它憑借其開源開放性、優(yōu)異的用戶體驗(yàn)和極為方便的開發(fā)方式,贏得了廣大用戶和開發(fā)者的青睞,目前已經(jīng)發(fā)展成為市場(chǎng)占有率位居第一的智能手機(jī)操作系統(tǒng)。本書主要講解Android系統(tǒng)源代碼的結(jié)構(gòu)和工作機(jī)制,完全基于Android主流版本的源代碼結(jié)構(gòu)來(lái)編寫全書。本書內(nèi)容言簡(jiǎn)意賅、通俗易懂、講解詳細(xì)。本書的內(nèi)容涉及如何獲取源碼、源碼的結(jié)構(gòu)分析、init解析、應(yīng)用層結(jié)構(gòu)分析、JNI的機(jī)制分析、Android中的系統(tǒng)服務(wù)和內(nèi)存管理、硬件抽象層、Binder機(jī)制、多媒體框架、音頻系統(tǒng)、視頻系統(tǒng)和傳感器系統(tǒng)。在編寫的過(guò)程中,書中的所有概念和模塊實(shí)例完全根據(jù)原生態(tài)的源碼來(lái)編寫。本書定位于有一定基礎(chǔ)的Android程序開發(fā)人員,旨在幫助其通過(guò)細(xì)致分析Android系統(tǒng)源代碼和工作機(jī)制,透徹理解Android系統(tǒng)架構(gòu),向Android系統(tǒng)開發(fā)殿堂及高手邁進(jìn)。
同套系圖書重點(diǎn)推薦:
《Android系統(tǒng)源代碼分析》
《Android底層接口與驅(qū)動(dòng)開發(fā)技術(shù)詳解》
全面分析和講解Android系統(tǒng)源碼的結(jié)構(gòu)和工作機(jī)制
定位當(dāng)前實(shí)踐應(yīng)用,基于Android 主流版本的源碼結(jié)構(gòu)
書中所有概念和模塊實(shí)例完全根據(jù)原生態(tài)源碼來(lái)編寫
從實(shí)際需要出發(fā),作者十年開源系統(tǒng)開發(fā)經(jīng)驗(yàn)和盤托出
書中源代碼下載地址:http://www.tdpress.com/zyzx/tsscflwj
經(jīng)過(guò)幾年的發(fā)展,Android已經(jīng)從最初的智能電話領(lǐng)域逐漸進(jìn)入教育、醫(yī)療、軍事、汽車、家居等重要領(lǐng)域。截至本書截稿,Android系統(tǒng)已經(jīng)成為移動(dòng)平臺(tái)領(lǐng)域當(dāng)之無(wú)愧的王者,雄踞智能手機(jī)操作系統(tǒng)排行榜首位。目前,已有眾多設(shè)備開始選擇使用Android系統(tǒng),比如智能手機(jī)、智能電視、平板電腦、上網(wǎng)本、MP3、MP4、智能相機(jī)等。相信在不久的未來(lái),還將有更多采用Android系統(tǒng)的高科技產(chǎn)品進(jìn)入人們的生活。這些設(shè)備將產(chǎn)生各種各樣的應(yīng)用需求,尤其是與Android系統(tǒng)底層相關(guān)的應(yīng)用,這將給開發(fā)者帶來(lái)很多機(jī)會(huì),尤其是系統(tǒng)級(jí)應(yīng)用開發(fā)工程師。
從技術(shù)角度而言,Android是一種融入了全部Web應(yīng)用的平臺(tái)。隨著版本的更新,從最初的觸屏到現(xiàn)在的多點(diǎn)觸摸,從普通的聯(lián)系人到現(xiàn)在的數(shù)據(jù)同步,從簡(jiǎn)單的Google Map到現(xiàn)在的導(dǎo)航系統(tǒng),從基本的網(wǎng)頁(yè)瀏覽到現(xiàn)在的HTML 5,都說(shuō)明Android已經(jīng)逐漸穩(wěn)定,而且功能越來(lái)越強(qiáng)大。此外,Android平臺(tái)不僅支持Java、C、C++等主流的編程語(yǔ)言,還支持Ruby、Python等腳本語(yǔ)言,甚至Google專為Android的應(yīng)用開發(fā)并推出了Simple語(yǔ)言,這使得Android有著更加廣泛的開發(fā)群體。
本書內(nèi)容
本書主要分析和講解Android系統(tǒng)源碼的結(jié)構(gòu)和工作機(jī)制,完全基于Android 主流版本的源碼結(jié)構(gòu)來(lái)編寫。本書內(nèi)容言簡(jiǎn)意賅、通俗易懂、講解詳細(xì)。本書通過(guò)12個(gè)章節(jié)的篇幅,全面系統(tǒng)地講解如何獲取源碼、源碼的結(jié)構(gòu)分析、init解析、應(yīng)用層結(jié)構(gòu)分析、JNI的機(jī)制分析、Android中的系統(tǒng)服務(wù)和內(nèi)存管理、硬件抽象層、Binder機(jī)制、多媒體框架、音頻系統(tǒng)、視頻系統(tǒng)和傳感器系統(tǒng)等內(nèi)容,全面展現(xiàn)了Android系統(tǒng)架構(gòu)。
本書特色
本書內(nèi)容相當(dāng)豐富,實(shí)例內(nèi)容覆蓋全面。筆者的目標(biāo)是通過(guò)一本圖書,提供多本圖書的價(jià)值,讀者可以根據(jù)自己的需要有選擇地閱讀。在內(nèi)容的編寫上,本書具有以下特色。
。1)內(nèi)容全面
本書的內(nèi)容全面,主次清晰。在書中講解了包括Android系統(tǒng)源碼的各個(gè)方面,并且在編寫的過(guò)程中,書中的所有概念和模塊實(shí)例完全根據(jù)原生態(tài)的源碼來(lái)編寫。
。2)結(jié)構(gòu)合理
從用戶的實(shí)際需要出發(fā),科學(xué)安排知識(shí)結(jié)構(gòu),內(nèi)容由淺入深,敘述清楚。全書精心篩選了最具代表性、讀者最關(guān)心的知識(shí)點(diǎn)。
。3)易學(xué)易懂
本書條理清晰、語(yǔ)言簡(jiǎn)潔,可幫助讀者快速掌握各個(gè)知識(shí)點(diǎn)。使讀者既可以按照本書編排的章節(jié)順序進(jìn)行學(xué)習(xí),也可以根據(jù)自己的需求對(duì)某一章節(jié)進(jìn)行針對(duì)性的學(xué)習(xí)。
(4)實(shí)用性強(qiáng)
本書徹底摒棄枯燥的理論和簡(jiǎn)單的操作,注重實(shí)用性和可操作性,詳細(xì)講解了各個(gè)部分的源碼知識(shí),使用戶掌握相關(guān)的操作技能的同時(shí),還能學(xué)習(xí)到相應(yīng)的基礎(chǔ)知識(shí)。
讀者對(duì)象
本書的讀者對(duì)象包括以下人員。
從事Android系統(tǒng)開發(fā)的程序員。
研究Android原生態(tài)系統(tǒng)的開發(fā)者。
編程愛(ài)好者。
相關(guān)培訓(xùn)機(jī)構(gòu)的老師和學(xué)員。
筆者在編寫過(guò)程中,得到了中國(guó)鐵道出版社工作人員的大力支持,正是各位編輯在工作中的求實(shí)、耐心和高效率才能使本書成功出版。另外也十分感謝筆者的家人,在筆者寫作時(shí)給予了巨大的支持。同時(shí),由于筆者水平有限,書中如有紕漏和不盡如人意之處在所難免,懇請(qǐng)讀者提出意見(jiàn)或建議,以便修訂并使之更臻完善。
李俊,清華大學(xué)電子信息工程專業(yè)學(xué)士。較早進(jìn)入Android開發(fā)領(lǐng)域。有多年的Android開發(fā)經(jīng)驗(yàn),熟練使用Java和C/C++進(jìn)行軟件開發(fā)。熟悉Android層次結(jié)構(gòu)和Linux驅(qū)動(dòng)層的結(jié)構(gòu)及其上的開發(fā),有著豐富的Android底層和驅(qū)動(dòng)層的優(yōu)化、移植經(jīng)驗(yàn),擅長(zhǎng)利用JNI技術(shù)開發(fā)Android上的應(yīng)用程序。曾帶領(lǐng)團(tuán)隊(duì)利用NDK技術(shù)成功開發(fā)過(guò)具有庫(kù)侖計(jì)電池芯片的電池管理軟件,以及在Android上成功移植人臉識(shí)別程序,目前在凹凸電子擔(dān)任Android架構(gòu)師。陳小玉,碩士,南陽(yáng)理工學(xué)院計(jì)算機(jī)與信息工程學(xué)院講師,軟件設(shè)計(jì)師。主要從事Arldroid應(yīng)用及游戲開發(fā)和教學(xué)工作,熟練使用Java語(yǔ)言。具有多年的Android和IOS系統(tǒng)手機(jī)客戶端軟件設(shè)計(jì)經(jīng)驗(yàn),具備扎實(shí)的手機(jī),桌面/Web UI設(shè)計(jì)開發(fā)基礎(chǔ),熟悉Android系統(tǒng)的UI design Guideline,熟悉人機(jī)交互、機(jī)器學(xué)習(xí)和人工智能算法,擅長(zhǎng)利用智能算法改進(jìn)Android上的應(yīng)用程序。使其更具有智能性。
第1章 Android系統(tǒng)介紹
1.1 來(lái)到智能手機(jī)世界
1.1.1 何謂智能手機(jī)
1.1.2 百家爭(zhēng)鳴
1.2 Android的優(yōu)勢(shì)
1.2.1 優(yōu)點(diǎn)一-- 系出名門
1.2.2 優(yōu)點(diǎn)二-- 強(qiáng)大的開發(fā)團(tuán)隊(duì)
1.2.3 優(yōu)點(diǎn)三-- 誘人的獎(jiǎng)勵(lì)機(jī)制
1.2.4 優(yōu)點(diǎn)四-- 開源
1.3 剖析Android系統(tǒng)架構(gòu)
1.4 五大組件
1.4.1 用Activity來(lái)表現(xiàn)界面
1.4.2 用Intent和Intent Filters實(shí)現(xiàn)切換
1.4.3 Service服務(wù)
1.4.4 用Broadcast Intent Receiver發(fā)送廣播
1.4.5 用Content Provider存儲(chǔ)數(shù)據(jù)
1.5 進(jìn)程和線程
1.5.1 先看進(jìn)程
1.5.2 再看線程
1.6 獲取Android源碼
1.6.1 在Linux平臺(tái)獲取Android源碼
1.6.2 在Windows平臺(tái)獲取Android源碼
1.7 分析Android源碼結(jié)構(gòu)
1.8 編譯源碼
1.8.1 Ubuntu系統(tǒng)編譯源碼
1.8.2 常見(jiàn)錯(cuò)誤
1.8.3 運(yùn)行Android源碼
1.9 編譯Android Kernel
1.9.1 獲取Goldfish內(nèi)核代碼
1.9.2 獲取MSM內(nèi)核代碼
1.9.3 獲取OMAP內(nèi)核代碼
1.9.4 編譯Android的Linux內(nèi)核
1.10 Android模擬器(AVD)
1.10.1 在Linux環(huán)境下運(yùn)行模擬器
1.10.2 模擬器輔助工具--adb
1.10.3 在Windows中創(chuàng)建Android模擬器
1.10.4 在模擬器上運(yùn)行Android系統(tǒng)
第2章 源碼結(jié)構(gòu)和SDK解析
2.1 Android源碼的目錄結(jié)構(gòu)
2.2 目錄結(jié)構(gòu)在系統(tǒng)中的體現(xiàn)
2.2.1 應(yīng)用程序
2.2.2 應(yīng)用程序框架
2.2.3 系統(tǒng)服務(wù)
2.2.4 系統(tǒng)程序庫(kù)
2.2.5 系統(tǒng)運(yùn)行庫(kù)
2.2.6 硬件抽象層
2.3 編譯源碼生成SDK
2.4 源碼中提供的接口
2.4.1 暴露的接口和隱藏的接口
2.4.2 開發(fā)中如何調(diào)用隱藏接口
第3章 分析JNI和Media
3.1 JNI基礎(chǔ)
3.2 分析Java層的MediaScanner
3.2.1 加載JNI庫(kù)
3.2.2 實(shí)現(xiàn)掃描工作
3.2.3 讀取并保存信息
3.2.4 刪除不是SD卡中的文件信息
3.2.5 processDirectory
3.2.6 掃描函數(shù)scanFile
3.2.7 JNI中的異常處理
3.3 分析JNI層的MediaScanner
3.3.1 將Native對(duì)象的指針保存到Java對(duì)象
3.3.2 創(chuàng)建Native層的MediaScanner對(duì)象
3.4 Native層的MediaScanner
3.4.1 JNI函數(shù)的注冊(cè)
3.4.2 完成注冊(cè)工作
3.4.3 動(dòng)態(tài)注冊(cè)
3.4.4 processDirectory
3.4.5 client.scanFile
3.4.6 添加TAG信息
3.4.7 總結(jié)函數(shù)JNI_OnLoad()與函數(shù)JNI_OnUnload()的用途
3.4.8 Java與JNI基本數(shù)據(jù)類型轉(zhuǎn)換
3.4.9 JNIEnv接口
3.4.10 JNI中的環(huán)境變量
3.5 解析android.process.media
3.5.1 MediaScannerReceiver
3.5.2 MediaScannerService
3.5.3 MediaProvider
3.6 MediaScanner中的重要函數(shù)
3.6.1 seekTo
3.6.2 doProcessDirectory
3.6.3 doScanFile
3.6.4 android_media_MediaScanner_processFile
3.6.5 processFile
3.6.6 endFile
3.6.7 handleStringTag
3.6.8 fileMatchesExtension
3.7 Camera模塊JNI實(shí)例分析
3.7.1 Java層預(yù)覽接口
3.7.2 注冊(cè)預(yù)覽的JNI函數(shù)
3.7.3 C/C++層的預(yù)覽函數(shù)
第4章 分析init進(jìn)程
4.1 init基礎(chǔ)
4.2 分析入口函數(shù)
4.3 分析配置文件
4.3.1 init.rc簡(jiǎn)介
4.3.2 分析init.rc的過(guò)程
4.4 解析Service
4.4.1 zygote對(duì)應(yīng)的service action
4.4.2 init組織Service
4.4.3 解析Service用到的函數(shù)
4.5 解析on
4.5.1 zygote對(duì)應(yīng)的on action
4.5.2 init組織on
4.5.3 解析on用到的函數(shù)
4.6 init控制Service
4.6.1 啟動(dòng)zygote
4.6.2 啟動(dòng)Service
4.6.3 總結(jié)四種啟動(dòng)Service的方式
4.7 控制屬性服務(wù)
4.7.1 引入屬性
4.7.2 初始化屬性服務(wù)
4.7.3 啟動(dòng)屬性服務(wù)
4.7.4 處理設(shè)置屬性的請(qǐng)求
第5章 深入分析HAL層
5.1 初識(shí)HAL層
5.1.1 HAL層簡(jiǎn)介
5.1.2 HAL_legacy和HAL的對(duì)比
5.2 分析HAL層源碼
5.2.1 分析HAL module
5.2.2 文件hardware.h
5.2.3 文件hardware.c
5.3 分析硬件抽象層的加載過(guò)程
5.4 分析硬件訪問(wèn)服務(wù)
5.4.1 定義硬件訪問(wèn)服務(wù)接口
5.4.2 實(shí)現(xiàn)硬件訪問(wèn)服務(wù)
5.5 分析mokoid工程
5.5.1 直接調(diào)用service方法的實(shí)現(xiàn)代碼
5.5.2 通過(guò)Manager調(diào)用service的實(shí)現(xiàn)代碼
5.6 舉例說(shuō)明Sensor(傳感器)在HAL層的表現(xiàn)
5.6.1 HAL層的Sensor代碼
5.6.2 Sensor編程的流程
5.7 HAL和系統(tǒng)移植
5.7.1 移植各個(gè)Android部件的方式
5.7.2 輔助工作
第6章 分析Android的內(nèi)存機(jī)制
6.1 內(nèi)存和進(jìn)程的關(guān)系
6.1.1 進(jìn)程管理工具的紛爭(zhēng)
6.1.2 Android系統(tǒng)內(nèi)存設(shè)計(jì)
6.2 分析Android的進(jìn)程通信機(jī)制
6.2.1 Android的進(jìn)程間通信(IPC)機(jī)制Binder
6.2.2 Service Manager是Binder機(jī)制的上下文管理者
6.2.3 分析Server和Client獲得Service Manager的過(guò)程
6.3 分析Android系統(tǒng)匿名共享內(nèi)存C++調(diào)用接口
6.3.1 Java程序
6.3.2 相關(guān)程序
6.4 內(nèi)存優(yōu)化
6.4.1 sp和wp簡(jiǎn)析
6.4.2 詳解智能指針(android refbase類(sp和wp))
第7章 分析ActivityManagerService
7.1 AMS基礎(chǔ)
7.1.1 進(jìn)程數(shù)據(jù)類ProcessRecord
7.1.2 數(shù)據(jù)類HistoryRecord
7.1.3 類TaskRecord
7.1.4 AMS中的一些重要調(diào)度相關(guān)變量
7.2 Activity的調(diào)度
7.2.1 startActivity()的啟動(dòng)流程
7.2.2 stopActivityLocked()停止Activity
第8章 分析Binder和MessageQueue
8.1 分析Binder
8.1.1 Client、Server和ServiceManager
8.1.2 MediaServer
8.1.3 ServiceManager
8.1.4 分析MediaPlayerService和Client
8.2 初始化Java層Binder框架
8.2.1 Binder類的初始化
8.2.2 addService實(shí)例分析
8.3 分析MessageQueue
8.3.1 創(chuàng)建MessageQueue
8.3.2 提取消息
8.3.3 分析函數(shù)nativePollOnce
第9章 分析SystemServer
9.1 分析SystemServer
9.1.1 分析主函數(shù)main
9.1.2 分析函數(shù)init2
9.2 分析EntropyService
9.3 分析DropBoxManagerService
9.3.1 分析DBMS構(gòu)造函數(shù)
9.3.2 添加dropbox日志文件
9.3.3 DBMS和Settings數(shù)據(jù)庫(kù)
9.4 分析DiskStatsService
9.5 分析DeviceStorageManagerService
9.6 分析SamplingProfilerService
9.6.1 分析SamplingProfilerService構(gòu)造函數(shù)
9.6.2 分析SamplingProfilerIntegration
9.7 分析ClipboardService
9.7.1 復(fù)制數(shù)據(jù)到剪貼板
9.7.2 從剪貼板粘貼數(shù)據(jù)
9.7.3 CBS中的權(quán)限管理
第10章 分析WindowManagerService
10.1 WindowManagerService概述
10.2 分析計(jì)算Activity窗口大小的過(guò)程
10.2.1 概覽
10.2.2 分析Activity計(jì)算窗口大小的過(guò)程
10.3 分析WindowManagerService對(duì)窗口的組織方式
10.3.1 概述
10.3.2 分析操作源碼
第11章 分析安裝應(yīng)用程序的過(guò)程
11.1 WindowManagerService概述
11.2 分析安裝過(guò)程
11.2.1 主函數(shù)main
11.2.2 初始化函數(shù)
11.2.3 初始化服務(wù)
11.2.4 調(diào)用靜態(tài)成員函數(shù)
11.2.5 創(chuàng)建了ServerThread線程
11.2.6 啟動(dòng)服務(wù)
11.2.7 創(chuàng)建PackageManagerService服務(wù)實(shí)例
11.2.8 掃描函數(shù)scanDirLI
11.2.9 歸檔處理
11.2.10 解析application標(biāo)簽
11.2.11 保存解析后的程序信息
第12章 分析核心框架系統(tǒng)
12.1 分析音頻系統(tǒng)
12.1.1 Audio系統(tǒng)的層次介紹
12.1.2 Media庫(kù)中的Audio框架
12.1.3 本地代碼
12.1.4 JNI代碼
12.1.5 Java代碼
12.2 視頻輸出系統(tǒng)
12.2.1 Overlay系統(tǒng)的基本層次結(jié)構(gòu)
12.2.2 Overlay系統(tǒng)硬件抽象層的接口
12.2.3 實(shí)現(xiàn)硬件抽象層
12.2.4 實(shí)現(xiàn)接口
12.3 分析OpenMax多媒體框架
12.3.1 分析OpenMax IL層的接口
12.3.2 OpenMax適配層
12.4 分析多媒體插件框架
12.4.1 基本層次結(jié)構(gòu)
12.4.2 分析庫(kù)libopencorecommon.so的結(jié)構(gòu)
12.4.3 分析庫(kù)libopencoreplayer.so的結(jié)構(gòu)
12.4.4 分析庫(kù)libopencoreauthor.so的結(jié)構(gòu)
12.4.5 其他的庫(kù)
12.4.6 OpenCore OSCL
12.4.7 實(shí)現(xiàn)OpenCore中的OpenMax部分
12.5 分析Camera照相機(jī)系統(tǒng)
12.5.1 基本層次結(jié)構(gòu)
12.5.2 分析V4L2驅(qū)動(dòng)程序
12.5.3 硬件抽象層
12.5.4 實(shí)現(xiàn)Camera系統(tǒng)的硬件抽象層
12.6 分析傳感器系統(tǒng)
12.6.1 基本層次結(jié)構(gòu)
12.6.2 分析硬件抽象層
12.6.3 實(shí)現(xiàn)上層部分