Android 系統源碼代碼情景分析




一、本書簡介

    《Android系統源代碼情景分析》是2012年10月出版的圖書,作者是羅昇陽。

    在內容上,本書結合使用情景,全面、深入、細緻地分析了Android系統的源代碼,涉及到Linux內核層、硬件抽象層(HAL)、運行時庫層(Runtime)、應用程序框架層(ApplicationFramework)以及應用程序層(Application)。

    在組織上,本書將上述內容劃分爲初識Android系統、Android專用驅動系統和Android應用程序框架三大篇。初識Android系統篇介紹了參考書籍、基礎知識以及實驗環境搭建;Android專用驅動系統篇介紹了Logger日誌驅動程序、Binder進程間通信驅動程序以及Ashmem匿名共享內存驅動程序;Android應用程序框架篇從組件、進程、消息以及安裝四個維度對Android應用程序的框架進行了深入的剖析。

    通過上述內容及其組織,本書能使讀者既能從整體上把握Android系統的層次結構,又能從細節上掌握每一個層次的要點。

 

 

二、本書內容

    全書分爲初識Android系統篇、Android專用驅動系統篇和Android應用程序框架篇三個部分。

    初識Android系統篇包含三個章節的內容,主要介紹Android系統的基礎知識。第1章介紹與Android系統有關的參考書籍,以及Android源代碼工程環境的搭建方法;第2章介紹Android系統的硬件抽象層;第3章介紹Android系統的智能指針。讀者可能會覺得奇怪,爲什麼一開始就介紹Android系統的硬件抽象層呢?因爲涉及硬件,它似乎是一個深奧的知識點。其實不然,Android系統的硬件抽象層無論是從實現上,還是從使用上,它的層次都是非常清晰的,而且從下到上涵蓋了整個Android系統,包括Android系統在用戶空間和內核空間的實現。內核空間主要涉及硬件驅動程序的編寫方法,而用戶空間涉及運行時庫層、應用程序框架層及應用程序層。因此,儘早學習Android系統的硬件抽象層,有助於我們從整體上去認識Android系統,以便後面可以更好地分析它的源代碼。在分析Android系統源代碼的過程中,經常會碰到智能指針,第3章我們就重點分析Android系統智能指針的實現原理,也是爲了後面可以更好地分析Android系統源代碼。

    Android專用驅動系統篇包含三個章節的內容。我們知道,Android系統是基於Linux內核來開發的,但是由於移動設備的CPU和內存配置都要比PC低,因此,Android系統並不是完全在Linux內核上開發的,而是在Linux內核裏面添加了一些專用的驅動模塊來使它更適合於移動設備。這些專用的驅動模塊同時也形成了Android系統的堅實基礎,尤其是Logger日誌驅動程序、Binder進程間通信驅動程序,以及Ashmem匿名共享內存驅動程序,它們在Android系統中被廣泛地使用。在此篇中,我們分別在第4章、第5章和第6章分析Logger日誌系統、Binder進程間通信系統和Ashmem共享內存系統的實現原理,爲後面深入分析Android應用程序的框架打下良好的基礎。

    Android應用程序框架篇包含十個章節的內容。我們知道,在移動平臺中,Android系統、iOS系統和Windows Phone系統正在形成三足鼎立之勢,誰的應用程序更豐富、質量更高、用戶體驗更好,誰就能取得最終的勝利。因此,每個平臺都在盡最大努力吸引第三方開發者來爲其開發應用程序。這就要求平臺必須提供良好的應用程序架構,以便第三方開發者可以將更多的精力集中在應用程序的業務邏輯上,從而開發出數量更多、質量更高和用戶體驗更好的應用程序。在此篇中,我們將從組件、進程、消息和安裝四個維度來分析Android應用程序的實現框架。第7章到第10章分析Android應用程序四大組件Activity、Service、Broadcast Receiver和Content Provider的實現原理;第11章和第12章分析Android應用程序進程的啓動過程;第13章到第15章分析Android應用程序的消息處理機制;第16章分析Android應用程序的安裝和顯示過程。學習了這些知識之後,我們就可以掌握Android系統的精髓了。

 

 

三、本書特點

    本書從初學者的角度出發,結合具體的使用情景,在縱向和橫向上對Android系統的源代碼進行了全面、深入、細緻的分析。在縱向上,採用從下到上的方式,分析的源代碼涉及了Android系統的內核層(Linux Kernel)、硬件抽象層(HAL)、運行時庫層(Runtime)、應用程序框架層(Application Framework)以及應用程序層(Application),這有利於讀者從整體上掌握Android系統的架構。在橫向上,從Android應用程序的組件、進程、消息以及安裝四個角度出發,全面地剖析了Android系統的應用程序框架層,這有利於讀者深入地理解Android應用程序的架構以及運行原理。

 

四、本書目錄

第1篇初識Android系統

第1章 準備知識................................................................2

1.1 Linux內核參考書籍...................................... ............... 2

1.2 Android應用程序參考書籍.......................... ............... 3

1.3 下載、編譯和運行Android源代碼........................... 3

1.3.1 下載Android源代碼........................................... 4

1.3.2 編譯Android源代碼........................................... 4

1.3.3 運行Android模擬器........................................... 5

1.4 下載、編譯和運行Android內核源代碼............................................................ 6

1.4.1 下載Android內核源代碼................................... 6

1.4.2 編譯Android內核源代碼................................... 7

1.4.3 運行Android模擬器........................................... 8

1.5 開發第一個Android應用程序................................... 8

1.6 單獨編譯和打包Android應用程序模塊.......................................................... 11

1.6.1 導入單獨編譯模塊的mmm命令............................................................... 11

1.6.2 單獨編譯Android應用程序模塊............................................................... 12

1.6.3 重新打包Android系統鏡像文件............................................................... 12

第2章 硬件抽象層.......................................................13

2.1 開發Android硬件驅動程序..................................... 14

2.1.1 實現內核驅動程序模塊..................................14

2.1.2 修改內核Kconfig文件...................................... 21

2.1.3 修改內核Makefile文件..................................... 22

2.1.4 編譯內核驅動程序模塊..................................22

2.1.5 驗證內核驅動程序模塊..................................23

2.2 開發C可執行程序驗證Android硬件驅動程序...............................................24

2.3 開發Android硬件抽象層模塊................................. 26

2.3.1 硬件抽象層模塊編寫規範...............................26

2.3.2 編寫硬件抽象層模塊接口...............................29

2.3.3 硬件抽象層模塊的加載過程...........................33

2.3.4 處理硬件設備訪問權限問題...........................36

2.4 開發Android硬件訪問服務..................................... 38

2.4.1 定義硬件訪問服務接口..................................38

2.4.2 實現硬件訪問服務..........................................39

2.4.3 實現硬件訪問服務的JNI方法.......................... 40

2.4.4 啓動硬件訪問服務..........................................43

2.5 開發Android應用程序來使用硬件訪問服務.................................................. 44

第3章 智能指針...............................................................49

3.1 輕量級指針.............................................................50

3.1.1 實現原理分析................................................50

3.1.2 應用實例分析................................................53

3.2 強指針和弱指針.....................................................54

3.2.1 強指針的實現原理分析..................................55

3.2.2 弱指針的實現原理分析..................................61

3.2.3 應用實例分析................................................67

第2篇Android專用驅動系統

第4章 Logger日誌系統............................................. 74

4.1 Logger日誌格式....................................................... 75

4.2 Logger日誌驅動程序.............................................. 76

4.2.1 基礎數據結構................................................77

4.2.2 日誌設備的初始化過程..................................78

4.2.3 日誌設備文件的打開過程...............................83

4.2.4 日誌記錄的讀取過程......................................84

4.2.5 日誌記錄的寫入過程......................................88

4.3 運行時庫層日誌庫.................................................93

4.4 C/C++日誌寫入接口............................................. 100

4.5 Java日誌寫入接口................................................ 104

4.6 Logcat工具分析..................................................... 110

4.6.1 基礎數據結構..............................................111

4.6.2 初始化過程..................................................115

4.6.3 日誌記錄的讀取過程....................................127

4.6.4 日誌記錄的輸出過程....................................132

第5章 Binder進程間通信系統............................... 144

5.1 Binder驅動程序..................................................... 145

5.1.1 基礎數據結構..............................................146

5.1.2 Binder設備的初始化過程.............................. 164

5.1.3 Binder設備文件的打開過程.......................... 165

5.1.4 Binder設備文件的內存映射過程............................................................ 166

5.1.5 內核緩衝區管理...........................................173

5.2 Binder進程間通信庫............................................. 183

5.3 Binder進程間通信應用實例................................. 188

5.4 Binder對象引用計數技術..................................... 196

5.4.1 Binder本地對象的生命週期.......................... 197

5.4.2 Binder實體對象的生命週期.......................... 201

5.4.3 Binder引用對象的生命週期.......................... 204

5.4.4 Binder代理對象的生命週期.......................... 209

5.5 Binder對象死亡通知機制..................................... 212

5.5.1 註冊死亡接收通知........................................213

5.5.2 發送死亡接收通知........................................216

5.5.3 註銷死亡接收通知........................................221

5.6 Service Manager的啓動過程.................................. 224

5.6.1 打開和映射Binder設備文件.......................... 226

5.6.2 註冊爲Binder上下文管理者.......................... 227

5.6.3 循環等待Client進程請求............................... 231

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

5.8 Service組件的啓動過程........................................ 244

5.8.1 註冊Service組件............................................ 245

5.8.2 啓動Binder線程池......................................... 289

5.9 Service代理對象的獲取過程................................ 291

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

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

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

5.10.3 Java服務的啓動過程.................................... 313

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

5.10.5 Java服務的調用過程.................................... 323

第6章 Ashmem匿名共享內存系統.............................................................. 327

6.1 Ashmem驅動程序................................................. 328

6.1.1 基礎數據結構..............................................328

6.1.2 匿名共享內存設備的初始化過程...........................................................330

6.1.3 匿名共享內存設備文件的打開過程.......................................................332

6.1.4 匿名共享內存設備文件的內存映射過程................................................334

6.1.5 匿名共享內存塊的鎖定和解鎖過程.......................................................336

6.1.6 匿名共享內存塊的回收過程..................................................................344

6.2 運行時庫cutils的匿名共享內存訪問接口.................................................... 345

6.3 匿名共享內存的C++訪問接口............................. 349

6.3.1 MemoryHeapBase.........................................349

6.3.2 MemoryBase.................................................359

6.3.3 應用實例.....................................................364

6.4 匿名共享內存的Java訪問接口............................. 370

6.4.1 MemoryFile..................................................370

6.4.2 應用實例.....................................................375

6.5 匿名共享內存的共享原理....................................386

第3篇Android應用程序框架

第7章 Activity組件的啓動過程............................. 392

7.1 Activity組件應用實例............................................ 392

7.2 根Activity組件的啓動過程.................................... 398

7.3 子Activity組件在進程內的啓動過程............................................................ 432

7.4 子Activity組件在新進程中的啓動過程........................................................ 440

第8章 Service組件的啓動過程............................ 443

8.1 Service組件應用實例............................................. 443

8.2 Service組件在新進程中的啓動過程............................................................. 451

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

第9章 Android系統廣播機制................................. 486

9.1 廣播機制應用實例...............................................487

9.2 廣播接收者的註冊過程........................................493

9.3 廣播的發送過程...................................................501

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

10.1 Content Provider組件應用實例........................... 525

10.1.1 ArticlesProvider...........................................525

10.1.2 Article.........................................................535

10.2 Content Provider組件的啓動過程................................................................ 550

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

10.3.1 數據共享模型.............................................573

10.3.2 數據傳輸過程.............................................576

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

10.4.1 註冊內容觀察者..........................................597

10.4.2 發送數據更新通知......................................603

第11章 Zygote和System進程的啓動過程.................................................611

11.1 Zygote進程的啓動腳本........................................ 611

11.2 Zygote進程的啓動過程........................................ 614

11.3 System進程的啓動過程....................................... 622

第12章 Android應用程序進程的啓動過程................................................. 630

12.1 應用程序進程的創建過程..................................630

12.2 Binder線程池的啓動過程................................... 639

12.3 消息循環的創建過程..........................................641

第13章 Android應用程序的消息處理機制................................................. 645

13.1 創建線程消息隊列.............................................645

13.2 線程消息循環過程.............................................650

13.3 線程消息發送過程.............................................655

13.4 線程消息處理過程.............................................660

第14章 Android應用程序的鍵盤消息處理機制....................................... 667

14.1 鍵盤消息處理模型.............................................667

14.2 InputManager的啓動過程.................................... 670

14.2.1 創建InputManager......................................670

14.2.2 啓動InputManager......................................673

14.2.3 啓動InputDispatcher....................................675

14.2.4 啓動InputReader........................................677

14.3 InputChannel的註冊過程..................................... 688

14.3.1 創建InputChannel.......................................689

14.3.2 註冊Server端InputChannel........................... 697

14.3.3 註冊系統當前激活的應用程序窗口.....................................................701

14.3.4 註冊Client端InputChannel........................... 706

14.4 鍵盤消息的分發過程..........................................709

14.4.1 InputReader獲得鍵盤事件........................... 710

14.4.2 InputDispatcher分發鍵盤事件............................................................... 717

14.4.3 系統當前激活的應用程序窗口獲得鍵盤消息.......................................727

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

14.5 InputChannel的註銷過程..................................... 746

14.5.1 銷燬應用程序窗口......................................747

14.5.2 註銷Client端InputChannel........................... 756

14.5.3 註銷Server端InputChannel........................... 758

第15章 Android應用程序線程的消息循環模型....................................... 764

15.1 應用程序主線程消息循環模型..........................765

15.2 與界面無關的應用程序子線程消息循環模型..........................................766

15.3 與界面相關的應用程序子線程消息循環模型..........................................769

第16章 Android應用程序的安裝和顯示過程............................................ 778

16.1 應用程序的安裝過程.........................................778

16.2 應用程序的顯示過程..........................................814

 

 

 

五、書籍下載

地址:http://download.csdn.net/download/u012721519/10236637

 


Good luck!

Write by Jimmy.li





發佈了74 篇原創文章 · 獲贊 76 · 訪問量 71萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章