第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
· · · · · · (
收起)