Android系統原始碼情景分析(第三版)

Android系統原始碼情景分析(第三版)

《Android系統原始碼情景分析(第三版)》 一書作者羅昇陽,電子工業出版社2017年10月出版

內容提要

在內容上,《Android系統原始碼情景分析(第三版)》結合使用情景,全面、深入、細緻地分析了Android系統的原始碼,涉及Linux核心層、硬體抽象層(HAL)、運行時庫層(Runtime)、應用程式框架層(Application Framework)及應用程式層(Application)。

在組織上,《Android系統原始碼情景分析(第三版)》將上述內容劃分為初識Android系統、Android專用驅動系統及Android應用程式框架三大篇。初識Android系統篇介紹了參考書籍、基礎知識及實驗環境搭建;Android專用驅動系統篇介紹了Logger日誌驅動程式、Binder進程間通信驅動程式及Ashmem匿名共享記憶體驅動程式;Android應用程式框架篇從組件、進程、訊息和安裝四個維度對Android應用程式的框架進行了深入的剖析。

通過上述內容及其組織,《Android系統原始碼情景分析(第三版)》使讀者既能從整體上把握Android系統的層次結構,又能從細節上掌握每一個層次的要點。

目錄

第1篇 初識Android系統

第1章 準備知識2

1.1 Linux核心參考書籍2

1.2 Android應用程式參考書籍3

1.3 下載、編譯和運行Android原始碼3

1.3.1 下載Android原始碼5

1.3.2 編譯Android原始碼6

1.3.3 運行Android模擬器7

1.4 下載、編譯和運行Android核心原始碼8

1.4.1 下載Android核心原始碼8

1.4.2 編譯Android核心原始碼8

1.4.3 運行Android模擬器9

1.5 開發第一個Android應用程式10

1.6 單獨編譯和打包Android應用程式模組12

1.6.1 導入單獨編譯模組的mmm命令12

1.6.2 單獨編譯Android應用程式模組13

1.6.3 重新打包Android系統鏡像檔案13

1.7 為真機編譯ROM14

1.7.1 下載LineageOS16

1.7.2 下載設備開原始碼16

1.7.3 下載設備私有檔案17

1.7.4 編譯ROM17

1.7.5 刷入TWRP17

1.7.6 刷入ROM19

第2章 硬體抽象層21

2.1 開發Android硬體驅動程式22

2.1.1 實現核心驅動程式模組22

2.1.2 修改核心Kconfig檔案29

2.1.3 修改核心Makefile檔案30

2.1.4 編譯核心驅動程式模組30

2.1.5 驗證核心驅動程式模組31

2.2 開發C可執行程式驗證Android硬體驅動程式32

2.3 開發Android硬體抽象層模組34

2.3.1 硬體抽象層模組編寫規範34

2.3.2 編寫硬體抽象層模組接口37

2.3.3 硬體抽象層模組的載入過程41

2.3.4 處理硬體設備訪問許可權問題44

2.4 開發Android硬體訪問服務46

2.4.1 定義硬體訪問服務接口46

2.4.2 實現硬體訪問服務47

2.4.3 實現硬體訪問服務的JNI方法48

2.4.4 啟動硬體訪問服務51

2.5 開發Android應用程式來使用硬體訪問服務52

第3章 智慧型指針57

3.1 輕量級指針58

3.1.1 實現原理分析58

3.1.2 套用實例分析61

3.2 強指針和弱指針62

3.2.1 強指針的實現原理分析63

3.2.2 弱指針的實現原理分析69

3.2.3 套用實例分析75

第2篇 Android專用驅動系統

第4章 Logger日誌系統82

4.1 Logger日誌格式83

4.2 Logger日誌驅動程式84

4.2.1 基礎數據結構85

4.2.2 日誌設備的初始化過程86

4.2.3 日誌設備檔案的打開過程91

4.2.4 日誌記錄的讀取過程92

4.2.5 日誌記錄的寫入過程96

4.3 運行時庫層日誌庫101

4.4 C/C++日誌寫入接口108

4.5 Java日誌寫入接口112

4.6 Logcat工具分析118

4.6.1 基礎數據結構119

4.6.2 初始化過程123

4.6.3 日誌記錄的讀取過程135

4.6.4 日誌記錄的輸出過程140

第5章 Binder進程間通信系統152

5.1 Binder驅動程式153

5.1.1 基礎數據結構154

5.1.2 Binder設備的初始化過程172

5.1.3 Binder設備檔案的打開過程173

5.1.4 Binder設備檔案的記憶體映射過程174

5.1.5 核心緩衝區管理181

5.2 Binder進程間通信庫191

5.3 Binder進程間通信套用實例196

5.4 Binder對象引用計數技術204

5.4.1 Binder本地對象的生命周期205

5.4.2 Binder實體對象的生命周期209

5.4.3 Binder引用對象的生命周期212

5.4.4 Binder代理對象的生命周期217

5.5 Binder對象死亡通知機制220

5.5.1 註冊死亡接收通知221

5.5.2 傳送死亡接收通知224

5.5.3 註銷死亡接收通知229

5.6 Service Manager的啟動過程232

5.6.1 打開和映射Binder設備檔案234

5.6.2 註冊為Binder上下文管理者235

5.6.3 循環等待Client進程請求239

5.7 Service Manager代理對象的獲取過程246

5.8 Service組件的啟動過程252

5.8.1 註冊Service組件253

5.8.2 啟動Binder執行緒池297

5.9 Service代理對象的獲取過程299

5.10 Binder進程間通信機制的Java接口308

5.10.1 Service Manager的Java代理對象的獲取過程308

5.10.2 Java服務接口的定義和解析318

5.10.3 Java服務的啟動過程321

5.10.4 Java服務代理對象的獲取過程328

5.10.5 Java服務的調用過程331

第6章 Ashmem匿名共享記憶體系統335

6.1 Ashmem驅動程式336

6.1.1 基礎數據結構336

6.1.2 匿名共享記憶體設備的初始化過程338

6.1.3 匿名共享記憶體設備檔案的打開過程340

6.1.4 匿名共享記憶體設備檔案的記憶體映射過程342

6.1.5 匿名共享記憶體塊的鎖定和解鎖過程344

6.1.6 匿名共享記憶體塊的回收過程352

6.2 運行時庫cutils的匿名共享記憶體訪問接口353

6.3 匿名共享記憶體的C++訪問接口357

6.3.1 MemoryHeapBase357

6.3.2 MemoryBase367

6.3.3 套用實例372

6.4 匿名共享記憶體的Java訪問接口378

6.4.1 MemoryFile378

6.4.2 套用實例383

6.5 匿名共享記憶體的共享原理394

第3篇 Android應用程式框架

第7章 Activity組件的啟動過程400

7.1 Activity組件套用實例400

7.2 根Activity組件的啟動過程406

7.3 子Activity組件在進程內的啟動過程440

7.4 子Activity組件在新進程中的啟動過程448

第8章 Service組件的啟動過程451

8.1 Service組件套用實例451

8.2 Service組件在新進程中的啟動過程459

8.3 Service組件在進程內的綁定過程471

第9章 Android系統廣播機制494

9.1 廣播機制套用實例495

9.2 廣播接收者的註冊過程501

9.3 廣播的傳送過程509

第10章 Content Provider組件的實現原理532

10.1 Content Provider組件套用實例533

10.1.1 ArticlesProvider533

10.1.2 Article543

10.2 Content Provider組件的啟動過程558

10.3 Content Provider組件的數據共享原理581

10.3.1 數據共享模型581

10.3.2 數據傳輸過程584

10.4 Content Provider組件的數據更新通知機制604

10.4.1 註冊內容觀察者605

10.4.2 傳送數據更新通知611

第11章 Zygote和System進程的啟動過程619

11.1 Zygote進程的啟動腳本619

11.2 Zygote進程的啟動過程622

11.3 System進程的啟動過程630

第12章 Android應用程式進程的啟動過程638

12.1 應用程式進程的創建過程638

12.2 Binder執行緒池的啟動過程647

12.3 訊息循環的創建過程649

第13章 Android應用程式的訊息處理機制653

13.1 創建執行緒訊息佇列653

13.2 執行緒訊息循環過程658

13.3 執行緒訊息傳送過程663

13.4 執行緒訊息處理過程668

第14章 Android應用程式的鍵盤訊息處理機制675

14.1 鍵盤訊息處理模型675

14.2 InputManager的啟動過程678

14.2.1 創建InputManager678

14.2.2 啟動InputManager681

14.2.3 啟動InputDispatcher683

14.2.4 啟動InputReader685

14.3 InputChannel的註冊過程696

14.3.1 創建InputChannel697

14.3.2 註冊Server端InputChannel705

14.3.3 註冊系統當前激活的應用程式視窗709

14.3.4 註冊Client端InputChannel714

14.4 鍵盤訊息的分發過程717

14.4.1 InputReader獲得鍵盤事件718

14.4.2 InputDispatcher分發鍵盤事件725

14.4.3 系統當前激活的應用程式視窗獲得鍵盤訊息735

14.4.4 InputDispatcher獲得鍵盤事件處理完成通知751

14.5 InputChannel的註銷過程754

14.5.1 銷毀應用程式視窗755

14.5.2 註銷Client端InputChannel764

14.5.3 註銷Server端InputChannel766

第15章 Android應用程式執行緒的訊息循環模型772

15.1 應用程式主執行緒訊息循環模型773

15.2 與界面無關的應用程式子執行緒訊息循環模型774

15.3 與界面相關的應用程式子執行緒訊息循環模型777

第16章 Android應用程式的安裝和顯示過程786

16.1 應用程式的安裝過程 786

16.2 應用程式的顯示過程822

相關詞條

熱門詞條

聯絡我們