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