編輯推薦
新版本Android 5.0
全麵講解瞭Android 5源程序的核心技術,包括Java Native Interface係統,HAL係統,IPC通信機製,Binder對象和Java接口,init進程和Zygote進程,System進程和應用程序進程,Activity組件,應用程序管理服務,Content Provider、Broadcast係統,電源管理係統,電話係統,短信係統、傳感器係統、SEAndroid係統和ART係統等核心知識。
內容簡介
本書共分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應用開發人員學習,也可以作為相關培訓學校和大專院校相關專業師生的教學用書。
作者簡介
李駿,清華大學電子信息工程專業學士。較早進入Android開發領域。有多年的Android開發經驗,熟練使用Java和C/C++進行軟件開發。熟悉Android層次結構和Linux驅動層的結構及其上的開發,有著豐富的Android底層和驅動層的優化、移植經驗,擅長利用JNI技術開發 Android上的應用程序。曾帶領團隊利用NDK技術成功開發過具有庫侖計電池芯片的電池管理軟件,以及在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 編譯源代碼生成SDK 27
第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 分析MediaScanner 32
3.2.1 分析Java層 32
3.2.2 分析JNI層 37
3.2.3 分析Native(本地)層 38
3.3 分析Camera係統的JNI 44
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_t 52
4.2.2 結構hw_module_methods_t
的定義 52
4.2.3 hw_device_t結構 53
4.3 分析文件hardware.c 53
4.3.1 尋找動態鏈接庫的地址 53
4.3.2 數組variant_keys 54
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 類BBinder 94
5.3.2 類BpRefBase 96
5.3.3 類IPCThreadState 97
5.4 初始化Java層Binder框架 99
5.5 分析MediaServer的通信機製 101
5.5.1 MediaServer的入口函數 101
5.5.2 ProcessState 102
5.5.3 defaultServiceManager 103
5.5.4 注冊MediaPlayerService 108
5.5.5 分析StartThread Pool和
join Thread Pool 117
第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 Manager 134
6.5.2 分析ActivityManagerService
的Java層 138
第7章 分析ServiceManager和
MessageQueue 151
7.1 分析ServiceManager 151
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 將信息注冊到
ServiceManager 162
7.1.7 分析MediaPlayerService
和Client 164
7.2 獲得Service Manager接口 169
7.3 分析MessageQueue 171
7.3.1 創建MessageQueue 171
7.3.2 提取消息 171
7.3.3 分析函數nativePollOnce 174
第8章 init進程和Zygote進程 182
8.1 分析init進程 182
8.1.1 分析入口函數 182
8.1.2 分析配置文件 185
8.1.3 分析Service 190
8.1.4 解析on字段的內容 195
8.1.5 init控製Service 197
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 分析SystemServer 225
9.1.3 分析EntropyService 227
9.1.4 分析DropBoxManager
Service 229
9.1.5 分析DiskStatsService 234
9.1.6 分析DeviceStorageManager
Service(監測係統內存存儲
空間的狀態) 237
9.1.7 分析SamplingProfiler
Service 239
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 啓動新的Activity 289
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應用程序
Launcher 323
11.6.1 設置係統進程 323
11.6.2 啓動Home應用程序 324
11.6.3 啓動com.android.launcher2. Launcher 330
11.6.4 加載應用程序 333
11.6.5 獲得Activity 336
第12章 Content Provider存儲機製 341
12.1 Content Provider基礎 341
12.1.1 Content Provider在應用
程序中的架構 341
12.1.2 Content Provider的常用
接口 342
12.2 啓動Content Provider 343
12.2.1 獲得對象接口 343
12.2.2 存在校驗 344
12.2.3 啓動Android應用程序 348
12.2.4 根據進程啓動Content
Provider 348
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 分析BroadCastReceiver 386
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.java 393
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.c 412
14.4.2 文件earlysuspend.c 414
14.4.3 文件wakelock.c 414
14.4.4 文件resume.c 416
14.4.5 文件suspend.c 416
14.4.6 文件main.c 417
14.4.7 proc文件 417
14.5 wakelock和early_suspend 418
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 函數relayoutWindow 446
15.2.3 函數relayoutWindow 447
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 內核
深入理解Android 5 源代碼 下載 mobi epub pdf txt 電子書