深入理解 Android 5 原始程式碼

李駿

  • 出版商: 人民郵電
  • 出版日期: 2016-01-01
  • 定價: $594
  • 售價: 8.5$505
  • 語言: 簡體中文
  • 頁數: 686
  • ISBN: 7115405956
  • ISBN-13: 9787115405951
  • 相關分類: Android
  • 已絕版

買這商品的人也買了...

相關主題

商品描述

<內容提要>

 

本書共分20章,循序漸進地分析了Android系統的基本源代碼,依次講解了Android系統介紹,獲取並編譯Android源代碼,分析Java Native Interface系統,分析HAL系統,分析IPC通信機制,分析Binder對象和Java接口,分析ServiceManager和MessageQueue,init進程和Zygote進程,System進程和應用程序進程,分析Activity組件,應用程序管理服務分析,Content Provider、Broadcast(廣播)系統,電源管理系統分析,分析WindowManagerService系統、分析電話系統,分析短信系統、Sensor傳感器系統詳解、分析SEAndroid系統和分析ART系統等核心知識。本書內容言簡意賅,講解方法通俗易懂,不僅適合有一定基礎的讀者學習,也特別有利於初學者學習。

本書適合Android初學者、Android愛好者、Android底層開發人員、Android應用開發人員學習,也可以作為相關培訓學校和大專院校相關專業師生的教學用書。

 

<目錄>

 

目錄

第1章Android系統介紹1 

1.1 Android系統成功的秘訣1 

1.1.1獲取了業界的廣泛支持1 

1.1.2研發陣容強大1 

1.1.3為開發人員“精心定製”1 

1.1.4開源2 

1.2剖析Android系統架構2 

1.2.1底層操作系統層(OS)3 

1.2.2各種庫(Libraries)和Android 

運行環境(RunTime)3 

1.2.3 Application Framework(應用

程序框架)3 

1.2.4頂層應用程序( Application)4 

1.3五大組件4 

1.3.1 Activity界面4 

1.3.2 Intent和Intent Filters切換4 

1.3.3 Service(服務)5 

1.3.4 Broadcast Receiver發送廣播5 

1.3.5用Content Provider存儲數據6 

1.4進程和線程6 

1.4.1什麼是進程6 

1.4.2什麼是線程6 

第2章獲取並編譯Android源代碼7 

2.1獲取Android源代碼7 

2.1.1在Linux系統中獲取Android 

源代碼7 

2.1.2在Windows平臺獲取Android 

源代碼8 

2.2分析Android源代碼結構10 

2.2.1總體結構11 

2.2.2應用程序部分12 

2.2.3應用程序框架部分13 

2.2.4系統服務部分13 

2.2.5系統程序庫部分15 

2.2. 6硬件抽象層部分17 

2.3 Android源代碼提供的接口18 

2.3.1暴露接口和隱藏接口18 

2.3.2調用隱藏接口23 

2.4編譯源代碼25 

2.4.1搭建編譯環境25 

2.4.2在模擬器中運行27 

2.5編譯源代碼生成SDK27 

第3章分析Java Native Interface 

系統30 

3.1 JNI基礎30 

3.1.1 JNI的功能結構30 

3.1.2 JNI的調用層次30 

3.1.3分析JNI的本質31 

3.2分析MediaScanner32 

3.2.1分析Java層32 

3.2.2分析JNI層37 

3.2.3分析Native(本地)層38 

3.3分析Camera系統的JNI44 

3.3.1 Java層預覽接口45 

3.3.2註冊預覽的JNI函數46 

3.3.3 C/C層的預覽函數48 

第4章分析HAL系統49 

4.1 HAL基礎49 

4.1.1推出HAL的背景49 

4.1.2 HAL的基本結構50 

4.2分析HAL module架構51 

4.2.1 hw_module_t52 

4.2.2結構hw_module_methods_t 

的定義52 

4.2.3 hw_device_t結構53 

4.3分析文件hardware.c53 

4.3.1尋找動態鏈接庫的地址53 

4.3.2數組variant_keys54 

4.3.3加載相應的庫54 

4.3.4獲得hw_module_t結構體54 

4.4分析硬件抽象層的加載過程55 

4.5分析硬件訪問服務58 

4.5.1定義硬件訪問服務接口58 

4.5.2具體實現59 

4.6分析Android官方實例60 

4.6.1獲取實例工程源代碼60 

4.6.2直接調用Service方法的

實現代碼61 

4.6.3通過Manager調用Service 

的實現代碼64 

4.7 HAL和系統移植66 

4.7.1移植各個Android部件

的方式66 

4.7.2設置設備權限67 

4.7.3 init.rc初始化70 

4.7.4文件系統的屬性70 

第5章分析IPC通信機制72 

5.1 Binder機制概述72 

5.2分析Binder驅動程序73 

5.2.1分析數據結構73 

5.2.2分析設備初始化82 

5.2.3打開Binder設備文件83 

5.2.4內存映射85 

5.2.5釋放物理頁面89 

5.2.6分配內核緩衝區89 

5.2.7釋放內核緩衝區91 

5.2.8查詢內核緩衝區93 

5.3 Binder封裝庫93 

5.3.1類BBinder94 

5.3.2類BpRefBase96 

5.3.3類IPCThreadState97 

5.4初始化Java層Binder框架99 

5.5分析MediaServer的通信機制101 

5.5.1 MediaServer的入口函數101 

5.5.2 ProcessState102 

5.5.3 defaultServiceManager103 

5.5.4註冊MediaPlayerService108 

5.5.5分析StartThread Pool和

join Thread Pool117 

第6章分析Binder對象和Java接口119 

6.1分析實體對象(binder_node)119 

6.2分析本地對象(BBinder)121 

6.3分析引用對象(binder_ref)129 

6.4分析代理對象(BpBinder)131 

6.5分析Java接口134 

6.5.1獲取Service Manager134 

6.5.2分析ActivityManagerService 

的Java層138 

第7章分析ServiceManager和

MessageQueue151 

7.1分析ServiceManager151 

7.1.1分析主入口函數151 

7.1.2打開Binder設備文件152 

7.1.3註冊處理154 

7.1.4創建Binder實體對象156 

7.1.5盡職的循環157 

7.1.6將信息註冊到

ServiceManager162 

7.1.7分析MediaPlayerService 

和Client164 

7.2獲得Service Manager接口169 

7.3分析MessageQueue171 

7.3.1創建MessageQueue171 

7.3.2提取消息171 

7.3.3分析函數nativePollOnce174 

第8章init進程和Zygote進程182 

8.1分析init進程182 

8.1.1分析入口函數182 

8.1.2分析配置文件185 

8.1.3分析Service190 

8.1.4解析on字段的內容195 

8.1.5 init控制Service197 

8.1.6控制屬性服務204 

8.2分析Zygote(孕育)進程210 

8.2.1 Zygote基礎211 

8.2.2分析Zygote的啟動過程211 

第9章System進程和應用程序進程224 

9.1分析System進程224 

9.1.1啟動System進程前

的準備工作224 

9.1.2分析SystemServer225 

9.1.3分析EntropyService227 

9.1.4分析DropBoxManager 

Service229 

9.1.5分析DiskStatsService234 

9.1.6分析DeviceStorageManager 

Service(監測系統內存存儲

空間的狀態)237 

9.1.7分析SamplingProfiler 

Service239 

9.2分析應用程序進程246 

9.2.1創建應用程序246 

9.2.2啟動線程池254 

9.2.3創建信息循環255 

第10章分析Activity組件258 

10.1 Activity基礎258 

10.1.1 Activity狀態258 

10.1.2剖析Activity中的

主要函數259 

10.2分析Activity的啟動源代碼260 

10.2.1 Launcher啟動應用程序261 

10.2.2返回ActivityManagerService 

的遠程接口262 

10.2.3解析intent的內容263 

10.2.4分析檢查機制265 

10.2.5執行Activity組件的操作274 

10.2.6將Launcher推入Paused 

狀態279 

10.2.7處理消息281 

10.2.8暫停完畢282 

10.2.9建立雙向連接285 

10.2.10啟動新的Activity289 

10.2.11通知機制291 

10.2.12發送消息292 

第11章應用程序管理服務—— PackageManagerService分析295 

11.1 PackageManagerService概述295 

11.2系統進程啟動296 

11.3開始運行296 

11.4掃描APK文件306 

11.5解析並安裝文件307 

11.6啟動系統默認Home應用程序

Launcher323 

11.6.1設置系統進程323 

11.6.2啟動Home應用程序324 

11.6.3啟動.android.launcher2. Launcher330 

11.6.4加載應用程序333 

11.6.5獲得Activity336 

第12章Content Provider存儲機制341 

12.1 Content Provider基礎341 

12.1.1 Content Provider在應用

程序中的架構341 

12.1.2 Content Provider的常用

接口342 

12.2啟動Content Provider343 

12.2.1獲得對象接口343 

12.2.2存在校驗344 

12.2.3啟動Android應用程序348 

12.2.4根據進程啟動Content 

Provider348 

12.2.5處理消息352 

12.2.6具體啟動354 

12.3 Content Provider數據共享356 

12.3.1獲取接口356 

12.3.2創建CursorWindow對象358 

12.3.3數據傳遞361 

12.3.4處理進程通信的請求362 

12.3.5數據操作367 

第13章分析廣播機制源代碼370 

13.1 Broadcast基礎370 

13.2發送廣播信息371 

13.2.1 intent描述指示371 

13.2.2傳遞廣播信息371 

13.2.3封裝傳遞372 

13.2.4處理髮送請求372 

13.2.5查找廣播接收者373 

13.2.6處理廣播信息375 

13.2.7檢查權限382 

13.2.8處理的進程通信請 ​​求384 

13.3分析BroadCastReceiver386 

13.3.1 MainActivity的調用386 

13.3.2註冊廣播接收者387 

13.3.3獲取接口對象388 

13.3.4處理進程間的通信請求390 

第14章分析電源管理系統392 

14.1 Power Management架構基礎392 

14.2分析Framework層392 

14.2.1文件PowerManager.java393 

14.2.2提供PowerManager功能393 

14.3 JNI層架構分析410 

14.3.1定義了兩層之間的

接口函數410 

14.3.2與Linux Kernel層

進行交互411 

14.4 Kernel(內核)層架構分析411 

14.4.1文件power.c412 

14.4.2文件earlysuspend.c414 

14.4.3文件wakelock.c414 

14.4.4文件resume. c416 

14.4.5文件suspend.c416 

14.4.6文件main.c417 

14.4.7 proc文件417 

14.5 wakelock和early_suspend418 

14.5.1 wakelock的原理418 

14.5.2 early_suspend的原理419 

14.5.3 Android休眠419 

14.5.4 Android喚醒421 

14.6 Battery電池系統架構和管理421 

14.6.1實現驅動程序422 

14.6.2實現JNI本地代碼422 

14.6.3 Java層代碼423 

14.6.4實現Uevent部分424 

14.7 JobScheduler節能調度機制428 

14.7.1 JobScheduler機制的

推出背景428 

14.7.2 JobScheduler的實現428 

14.7.3實現操作調度429 

14.7.4封裝調度任務431 

第15章分析WindowManagerService 

系統434 

15.1 WindowManagerService基礎434 

15.2計算Activity窗口的大小435 

15.2.1實現View遍歷436 

15.2 .2函數relayoutWindow446 

15.2.3函數relayoutWindow447 

15.2.4攔截消息的處理類466 

15.2.5判斷是否計算過477 

第16章分析電話系統482 

16.1 Android電話系統詳解482 

16.1.1電話系統簡介482 

16.1.2電話系統結構483 

16.1.3驅動程序介紹485 

16.1.4 RIL接口486 

16.1.5分析電話系統的實現流程488 

16.2電話系統中的音頻模塊493 

16.2.1音頻系統結構493 

16.2.2分析音頻系統的層次494 

16.3分析撥號流程501 

16.3.1撥號界面501 

16.3.2實現Phone應用504 

16.3.3 Call通話控制507 

16.3.4靜態方法調用510 

16.3.5通話管理512 

16.3.6 dial撥號514 

16.3.7狀態跟蹤515 

16.3.8 RIL消息“出/入”口516 

16.3.9顯示通話主界面517 

第17章分析短信系統518 

17.1短信系統的主界面518 

17.2發送普通短信520 

17.3發送彩信530 

17.4接收短信537 

17.4.1 Java應用層的接收流程538 

17.4.2 Framework層的處理過程540 

第18章Sensor傳感器系統詳解542 

18.1 Android傳感器系統概述542 

18.2 Java層詳解543 

18.3 Frameworks層詳解548 

18.3.1監聽傳感器的變化548 

18.3. 2註冊監聽548 

18.4 JNI層詳解556 

18.4.1實現Native(本地)函數557 

18.4.2處理客戶端數據561 

18.4.3處理服務端數據563 

18.4.4封裝HAL層的代碼572 

18.4.5處理消息隊列576 

18.5 HAL層詳解578 

第19章分析SEAndroid系統585 

19.1 SEAndroid概述585 

19.1.1內核空間587 

19.1.2用戶空間588 

19.2文件安全上下文596 

19.2.1設置打包在ROM裡面

的文件的安全上下文597 

19.2. 2設置虛擬文件系統的

安全上下文600 

19.2.3設置應用程序數據文件的

安全上下文601 

19.3進程安全上下文612 

19.3.1為獨立進程靜態地設置

安全上下文612 

19.3.2為應用程序進程設置

安全上下文615 

第20章分析ART系統621 

20.1對比Dalvik VM和ART621 

20.2啟動ART623 

20.2.1運行app_process進程624 

20.2.2準備啟動627 

20.2.3創建運行實例632 

20.2.4註冊本地JNI函數633 

20.2.5啟動守護進程634 

20.2.6解析參數635 

20.2.7初始化類、方法和域641 

20.3分析主函數main647 

20.4查找目標類648 

20.4.1函數LookupClass()648 

20.4.2函數DefineClass()650 

20.4.3函數InsertClass()653 

20.4.4函數LinkClass()653 

20.5類操作655 

20.6實現託管操作656 

20.7加載OAT文件660 

20.7.1產生OAT660 

20.7.2創建ART虛擬機661 

20.7.3解析啟動參數並創建堆663 

20.7.4生成指定目錄文件665 

20.7.5加載OAT文件666 

20.7.6解析字段668

 

<作者介紹>

 

李駿,清華大學電子信息工程專業學士。較早進入Android開發領域。有多年的Andr​​oid開發經驗,熟練使用Java和C/C 進行軟件開發。熟悉Android層次結構和Linux驅動層的結構及其上的開發,有著豐富的Andr​​oid底層和驅動層的優化、移植經驗,擅長利用JNI技術開發Android上的應用程序。曾帶領團隊利用NDK技術成功開發過具有庫侖計電池芯片的電池管理軟件,以及在Android上成功移植人臉識別程序,目前在凹凸電子擔任Android架構師。