前言
第一部分 基礎篇
第1章 Android體係結構及源代碼閱讀環境搭建 / 2
1.1 Android發展過程 / 2
1.2 Android體係結構 / 3
1.2.1 靜態視角的體係結構 / 3
1.2.2 動態視角的體係結構 / 7
1.3 Android源碼下載和編譯 / 8
1.3.1 搭建開發環境 / 8
1.3.2 下載Android上層係統源代碼 / 9
1.3.3 下載指定模塊源碼 / 10
1.3.4 下載 Android Linux Kernel源碼 / 11
1.3.5 編譯Android上層係統源碼 / 12
1.3.6 編譯指定模塊源碼 / 12
1.4 Android源碼結構 / 14
1.5 Android源碼開發工具的配置和使用 / 15
1.5.1 配置Android SDK / 15
1.5.2 用Eclipse開發和調試源代碼 / 16
1.5.3 用Source Insight閱讀源代碼 / 19
1.6 NDK開發環境配置 / 20
1.7 本章小結 / 21
第2章 框架基礎JNI / 22
2.1 JNI在Android係統中所處的位置 / 22
2.2 JNI框架層實例分析 / 23
2.2.1 Log係統Java層分析 / 24
2.2.2 Log係統的JNI層 / 24
2.2.3 Log係統的JNI方法注冊 / 25
2.3 JNI總管:JNIEnv / 27
2.4 在Java中調用JNI實現方法 / 29
2.4.1 Java數據類型與JNI數據類型轉換 / 29
2.4.2 JNI方法命名規則 / 30
2.4.3 JNI方法簽名規則 / 31
2.5 JNI操作Java對象 / 32
2.5.1 訪問Java對象 / 32
2.5.2 操作成員變量(域)和方法 / 33
2.5.3 全局引用、弱全局引用和局部引用 / 34
2.6 JNI異常處理 / 36
2.7 JNI應用層實例分析 / 38
2.7.1 Java層分析 / 38
2.7.2 JNI層代碼和異常處理 / 39
2.8 本章小結 / 42
第二部分 啓動篇
第3章 Android啓動過程的底層實現 / 44
3.1 Android正常模式啓動流程 / 44
3.2 Kernel啓動過程 / 44
3.2.1 內核引導階段 / 45
3.2.2 內核啓動階段 / 46
3.3 init進程的執行過程 / 49
3.4 init.rc文件解析過程 / 53
3.4.1 Android初始化語言 / 53
3.4.2 init.rc的內容 / 56
3.4.3 解析配置文件 / 57
3.4.4 解析Service / 60
3.4.5 解析Action / 63
3.5 觸發並啓動Action和Service / 65
3.5.1 觸發Action / 65
3.5.2 執行Action / 66
3.5.3 啓動Service / 70
3.5.4 init對屬性服務的處理 / 71
3.6 init循環監聽處理事件 / 75
3.7 本章小結 / 77
第4章 Android 啓動過程的上層實現 / 78
4.1 第一個Dalvik虛擬機zygote / 79
4.1.1 zygote的配置 / 79
4.1.2 如何執行zygote服務程序 / 80
4.2 ZygoteInit的啓動過程 / 82
4.2.1 創建Dalvik虛擬機 / 83
4.2.2 注冊JNI方法 / 85
4.2.3 開啓Java世界 / 88
4.3 ZygoteInit開啓Java世界的五部分工作 / 89
4.3.1 注冊zygote的Socket / 89
4.3.2 預加載Class資源和Resource資源 / 89
4.3.3 啓動system_server進程 / 92
4.3.4 執行MethodAndArgsCaller的run方法 / 98
4.3.5 執行runSelectLoopMode方法 / 102
4.4 zygote處理Home啓動請求 / 104
4.5 本章小結 / 112
第三部分 Binder篇
第5章 Binder在Native框架層的實現 / 114
5.1 Binder與C/S體係結構概述 / 114
5.2 servicemanager進程的啓動過程 / 115
5.2.1 初始化Binder通信環境 / 116
5.2.2 注冊上下文管理者 / 118
5.2.3 等待接收並處理IPC通信請求 / 120
5.3 Server的啓動和Service的注冊過程 / 128
5.3.1 創建ProcessState對象 / 129
5.3.2 獲取servicemanager的代理對象 / 131
5.3.3 注冊Service / 139
5.3.4 Server進程開啓綫程池 / 145
5.4 Client端使用服務代理對象 / 146
5.5 服務代理與服務通信 / 149
5.6 本章小結 / 152
第6章 Binder在Java框架層的實現 / 153
6.1 Java係統服務的創建過程 / 153
6.1.1 創建JavaBBinderHolder對象 / 155
6.1.2 JavaBBinder的作用 / 156
6.1.3 gBinderOffsets結構體解析 / 156
6.2 Java係統服務的注冊過程 / 159
6.2.1 調用BinderInternal.getContextObject方法 / 160
6.2.2 調用ServiceManagerNative.asInterface方法 / 165
6.2.3 調用ServiceManagerProxy. addService方法注冊服務 / 167
6.3 Client端獲取服務代理 / 169
6.3.1 獲取服務的BinderProxy / 170
6.3.2 構造服務的Proxy對象 / 172
6.3.3 構造服務管理者對象 / 173
6.4 Client端調用Java係統服務的方法 / 174
6.5 統一的通信接口AIDL / 177
6.5.1 AIDL實例 / 177
6.5.2 AIDL語法 / 180
6.5.3 處理自定義數據類型的傳遞 / 181
6.6 本章小結 / 182
第四部分 消息通信篇
第7章 綫程消息通信與異步處理 / 184
7.1 什麼是Looper綫程 / 184
7.2 第一步:Looper綫程準備階段 / 185
7.2.1 創建Java層的Looper對象 / 186
7.2.2 創建Java層的MessageQueue對象 / 186
7.2.3 創建Native層的NativeMessage-Queue和Looper對象 / 187
7.2.4 NativeMessageQueue關聯到MessageQueue / 189
7.3 第二步:創建消息處理器並發送消息 / 190
7.3.1 Handler的創建和初始化 / 190
7.3.2 Message的創建和初始化 / 191
7.3.3 消息的發送過程 / 192
7.4 第三步:Looper綫程循環階段 / 198
7.4.1 記錄並獲取當前綫程身份信息 / 198
7.4.2 循環監聽消息 / 199
7.4.3 分發消息到處理器 / 205
7.4.4 迴收消息並更新消息池 / 209
7.5 異步任務類AsyncTask / 210
7.5.1 AsyncTask的實現 / 211
7.5.2 AsyncTask的執行 / 214
7.6 本章小結 / 223
第五部分 Package Manager篇
第8章 Package Manager 的機製與實現 / 226
8.1 Package Manager體係結構 / 227
8.1.1 三層體係結構 / 227
8.1.2 三層之間的關係 / 228
8.2 PackageManagerService的啓動過程 / 231
8.2.1 創建並初始化Settings對象 / 232
8.2.2 獲取係統默認配置 / 236
8.2.3 啓動PackageHandler / 237
8.2.4 創建data目錄並初始化UserManager / 239
8.2.5 解析係統permission和feature信息 / 242
8.2.6 解析packages文件 / 245
8.2.7 dexopt優化判定 / 247
8.2.8 啓動FileObserver監控APK文件的目錄 / 250
8.2.9 調用scanDirLI方法掃描並安裝APK包 / 252
8.2.10 更新packages文件 / 253
8.3 PackageManagerService啓動過程使用的核心組件 / 254
8.3.1 Java層的Installer / 255
8.3.2 Installd中的命令 / 258
8.4 本章小結 / 260
第9章 APK的安裝過程 / 261
9.1 通過scanDirLI方法安裝APK / 261
9.1.1 創建PackageParser / 262
9.1.2 解析AndroidManifest.xml文件 / 263
9.1.3 過濾PackageParser.Package類型的pkg對象 / 270
9.1.4 解析和安裝pkg / 274
9.2 使用adb命令安裝應用程序 / 282
9.2.1 通過消息機製安裝指定的APK / 283
9.2.2 調用handleStartCopy方法處理安裝操作 / 286
9.2.3 調用handleReturnCode方法處理返迴結果 / 290
9.3 本章小結 / 293
第六部分 Activity Manager篇
第10章 Activity Manager的機製與實現 / 296
10.1 Activity Manager概述 / 296
10.2 ActivityManagerService在係統啓動階段的主要工作 / 297
10.3 第一階段:啓動ActivityManagerService / 299
10.3.1 啓動AThread綫程 / 300
10.3.2 創建ActivityThread對象 / 302
10.3.3 創建ActivityStack類 / 309
10.3.4 調用startRunning方法 / 310
10.4 第二階段:調用setSystemProcess方法 / 310
10.4.1 查詢並處理ApplicationInfo / 312
10.4.2 創建並初始化ProcessRecord / 313
10.5 第三階段:調用install-SystemProviders方法 / 315
10.5.1 查詢Content Provider / 316
10.5.2 安裝Content Provider / 317
10.6 第四階段:調用systemReady方法 / 323
10.6.1 發送ACTION_PRE_BOOT_COMPLETED廣播 / 323
10.6.2 清理預啓動的非persistent進程 / 325
10.6.3 讀取Settings配置 / 326
10.6.4 運行Runnable迴調接口 / 327
10.6.5 啓動persistent應用程序和Home / 328
10.7 本章小結 / 329
第11章 應用程序Activity的啓動和調度 / 330
11.1 啓動應用程序Activity時在Client端的執行流程 / 330
11.2 啓動應用程序Activity時在Server端的執行流程 / 334
11.2.1 預啓動 / 334
11.2.2 暫停 / 348
11.2.3 啓動應用程序進程 / 356
11.2.4 加載應用程序Activity / 362
11.2.5 顯示Activity / 369
11.2.6 Activity Idle狀態的處理過程 / 379
11.2.7 停止源Activity / 382
11.3 本章小結 / 387
第12章 Activity Manager進程管理 / 388
12.1 LRU weight機製 / 388
12.2 OOM adj機製 / 391
12.2.1 更新OOM adj值 / 392
12.2.2 OOM adj的計算過程 / 403
12.3 Low Memory Killer機製 / 414
12.3.1 OOM adj等級和最小內存閾值 / 414
12.3.2 LM Killer機製的實現 / 417
12.4 本章小結 / 419
· · · · · · (
收起)