圖書簡介
Android是一款服務於智慧型手機和平板電腦等設備的作業系統,截止作者撰寫此書時為止,Android在智慧型手機作業系統市場中已經占有75%的份額。為了讓廣大讀者充分了解這款神奇的作業系統的架構原理,本書循序漸進地分析了Android系統核心源碼的基本知識。
《Android源碼分析實錄》共分為15章,主要內容包括走進Android世界、硬體抽象層詳解、分析JNI(Java本地接口)層、Android記憶體系統分析、Andmid虛擬機系統詳解、IPC通信機制詳解、Zygote進程/System進程和應用程式進程、分析Activitv組件、Content Provider數據存儲、Broadcast(廣播)系統詳解、多媒體系統詳解、電源管理系統詳解、輸入系統驅動套用、藍牙系統詳解、網路系統詳解等。
目錄
第1章走進Android世界 1
1.1Android系統的優勢 2
1.1.1開源 2
1.1.2強大的開發團隊的支持 2
1.1.3開發人員的支持 2
1.2Android系統架構介紹 3
1.2.1底層作業系統層(Linux核心層) 4
1.2.2庫(Libraries)和運行環境(Runtime) 4
1.2.3應用程式框架(ApplicationFramework) 5
1.2.4頂層應用程式(Application) 5
1.3核心組件 5
1.3.1Activity的界面表現 5
1.3.2Intent和IntentFilters界面切換 6
1.3.3Service服務 6
1.3.4用BroadcastIntentReceiver廣播 7
1.3.5用ContentProvider存儲 7
1.4進程和執行緒 7
1.4.1什麼是進程 7
1.4.2什麼是執行緒 8
1.5獲取Android4.3源碼 8
1.5.1在Linux系統中獲取Android源碼 8
1.5.2在Windows平台上獲取Android源碼 9
1.6Android源碼結構分析 14
1.6.1Android源碼的目錄結構 15
1.6.2應用程式 16
1.6.3應用程式框架 18
1.6.4系統服務 19
1.6.5系統程式庫 21
1.6.6系統運行庫 24
1.6.7硬體抽象層 25
1.7編譯Android源碼 26
1.7.1搭建編譯環境 27
1.7.2開始編譯 27
1.7.3在模擬器中運行 29
1.7.4編譯源碼生成SDK 30
第2章硬體抽象層詳解 35
2.1什麼是HAL層 36
2.1.1為什麼把對硬體的支持劃分為兩層來實現 36
2.1.2HAL層的位置結構 36
2.2分析HALModule架構 38
2.2.1hw_module_t 39
2.2.2hw_module_methods_t 40
2.2.3hw_device_t 40
2.3分析檔案hardware.c 41
2.3.1函式hw_get_module 41
2.3.2數組variant_keys 41
2.3.3載入相應的庫 42
2.3.4打開相應庫並獲得hw_module_t結構體 43
2.4分析硬體抽象層的載入過程 44
2.5分析硬體訪問服務 48
2.5.1定義硬體訪問服務接口 48
2.5.2實現硬體訪問服務 49
2.6分析mokoid工程 50
2.6.1直接調用Service方法實現 51
2.6.2通過Manager調用Service實現 56
2.7分析HAL層的具體實現(以Sensor系統為例) 59
2.7.1感測器系統的基礎知識 59
2.7.2HAL層的Sensor代碼 60
2.7.3Sensor編程的流程 61
第3章分析JNI(Java本地接口)層 63
3.1JNI基礎 64
3.1.1JNI的層次結構 64
3.1.2JNI的本質 64
3.1.3與JNI相關的檔案 65
3.2分析Java層 66
3.2.1載入JNI庫 66
3.2.2實現掃描工作 68
3.2.3讀取並保存信息 69
3.2.4刪除不是SD卡中的檔案信息 72
3.2.5直接轉向JNI 72
3.2.6掃描函式scanFile 73
3.2.7異常處理 73
3.3分析MediaScanner的JNI層 74
3.3.1將Native對象的指針保存到Java對象 75
3.3.2創建Native層的MediaScanner對象 75
3.4分析MediaScanner的Native層 76
3.4.1註冊JNI函式 76
3.4.2完成註冊工作 78
3.4.3動態註冊 80
3.4.4處理路徑參數 82
3.4.5掃描檔案 83
3.4.6添加TAG信息 83
3.4.7JNIEnv接口 85
3.4.8JNI中的環境變數 86
3.5JNI實例分析(基於Camera系統) 87
3.5.1Java層預覽接口 87
3.5.2註冊預覽的JNI函式 89
3.5.3C/C++層的預覽函式 92
第4章Android記憶體系統分析 95
4.1Android的進程通信機制 96
4.1.1Android的進程間通信(IPC)機制Binder 96
4.1.2ServiceManager是Binder機制的上下文管理者 97
4.2分析Ashmem驅動程式 98
4.2.1基礎數據結構 98
4.2.2初始化處理 99
4.2.3打開匿名共享記憶體設備檔案 101
4.2.4記憶體映射 104
4.2.5讀寫操作 105
4.2.6鎖定和解鎖 107
4.2.7回收記憶體塊 113
4.3分析C++訪問接口層 115
4.3.1接口MemoryHeapBase 115
4.3.2接口MemoryBase 125
4.4分析Java訪問接口層 128
4.5記憶體最佳化機制 132
4.5.1sp和wp簡析 132
4.5.2詳解智慧型指針 134
4.5.3輕量級指針 136
4.5.4強指針 139
4.5.5弱指針 153
第5章Android虛擬機系統詳解 159
5.1Android虛擬機基礎 160
5.1.1Android虛擬機源碼目錄 160
5.1.2Dalvik的架構 161
5.1.3Dalvik虛擬機的主要特徵 163
5.1.4Dalvik的進程管理 163
5.1.5Android的初始化流程 163
5.2分析Dalvik的運作流程 164
5.2.1Dalvik虛擬機相關的可執行程式 164
5.2.2初始化Dalvik虛擬機 167
5.2.3啟動Zygote 186
5.2.4啟動SystemServer進程 190
5.2.5載入class類檔案 193
5.3DalvikVM的記憶體系統 197
5.3.1如何分配記憶體 197
5.3.2分析記憶體管理機制的源碼 199
5.4分析DalvikVM的啟動過程 211
5.4.1創建一個DalvikVM實例 211
5.4.2指定控制選項 212
5.4.3創建並初始化DalvikVM實例 220
5.4.4創建JNIEnvExt對象 223
5.4.5設定當前進程 229
5.4.6註冊Android核心類的JNI方法 229
5.4.7使用執行緒創建javaCreateThreadEtc鉤子 233
5.5創建DalvikVM進程 233
5.5.1分析底層啟動過程 234
5.5.2創建DalvikVM進程 234
5.5.3初始化運行的DalvikVM 238
第6章IPC通信機制詳解 241
6.1Binder機制概述 242
6.2分析Binder驅動程式 243
6.2.1分析數據結構 243
6.2.2分析設備初始化 255
6.2.3打開Binder設備檔案 257
6.2.4記憶體映射 258
6.2.5釋放物理頁面 264
6.2.6分配核心緩衝區 264
6.2.7釋放核心緩衝區 267
6.2.8查詢核心緩衝區 269
6.3Binder封裝庫 270
6.3.1Binder庫的實現層次 270
6.3.2類BBinder 271
6.3.3類BpRefBase 274
6.3.4類IPCThreadState 275
6.4初始化Java層Binder框架 279
第7章Zygote進程、System進程和應用程式進程 283
7.1Zygote(孕育)進程詳解 284
7.1.1Zygote基礎 284
7.1.2分析Zygote的啟動過程 285
7.2System進程詳解 303
7.2.1啟動System進程前的準備工作 303
7.2.2分析SystemServer 304
7.2.3分析EntropyService 308
7.2.4分析DropBoxManagerService 310
7.2.5分析DiskStatsService 318
7.2.6分析DeviceStorageManagerService 323
7.2.7分析SamplingProfilerService 326
7.3應用程式進程詳解 336
7.3.1創建應用程式 336
7.3.2啟動執行緒池 347
7.3.3創建信息循環 348
第8章分析Activity組件 351
8.1Activity基礎 352
8.1.1Activity的狀態 352
8.1.2Activity的主要函式 353
8.2啟動Activity 355
8.2.1Launcher啟動應用程式 356
8.2.2返回ActivityManagerService的遠程接口 358
8.2.3解析intent的內容 359
8.2.4分析檢查機制 363
8.2.5執行Activity組件的操作 378
8.2.6將Launcher推入Paused狀態 386
8.2.7處理訊息 388
8.2.8報告暫停 389
8.2.9建立雙向連線 394
8.2.10啟動新的Activity 400
8.2.11傳送通知信息 403
第9章ContentProvider數據存儲 405
9.1ContentProvider基礎 406
9.1.1ContentProvider在應用程式中的架構 406
9.1.2ContentProvider的常用接口 407
9.2啟動ContentProvider 408
9.2.1獲得對象接口 408
9.2.2存在校驗 410
9.2.3啟動Android應用程式 416
9.2.4根據進程啟動ContentProvider 416
9.2.5處理訊息 422
9.2.6具體啟動 423
9.3ContentProvider數據共享 427
9.3.1獲取接口 427
9.3.2創建CursorWindow對象 430
9.3.3數據傳遞 433
9.3.4處理進程通信的請求 436
9.3.5數據操作 442
第10章Broadcast(廣播)系統詳解 447
10.1Broadcast基礎 448
10.2傳送廣播信息 448
10.2.1intent描述指示 449
10.2.2傳遞廣播信息 449
10.2.3封裝傳遞 450
10.2.4處理髮送請求 451
10.2.5查找廣播接收者 451
10.2.6處理廣播信息 455
10.2.7檢查許可權 464
10.2.8處理的進程通信請求 466
10.3分析BroadcastReceiver 469
10.3.1MainActivity的調用 470
10.3.2註冊廣播接收者 470
10.3.3獲取接口對象 471
10.3.4處理進程間的通信請求 474
第11章多媒體系統詳解 479
11.1Android多媒體系統介紹 480
11.2OpenMAX框架詳解 481
11.2.1分析OpenMAX框架構成 482
11.2.2實現OpenMAXIL層接口 486
11.3分析OpenCore框架 495
11.3.1OpenCore的層次結構 495
11.3.2OpenCore的代碼結構 496
11.3.3OpenCore的編譯結構 497
11.3.4作業系統兼容庫 501
11.3.5實現OpenCore中的OpenMAX部分 503
11.3.6OpenCore擴展詳解 517
11.4Stagefright框架詳解 523
11.4.1Stagefright代碼結構 523
11.4.2Stagefright實現OpenMAX接口 524
11.4.3分析VideoBuffer的傳輸流程 528
第12章電源管理系統詳解 533
12.1AndroidPowerManagement基礎 534
12.2分析Framework層 535
12.2.1檔案PowerManager.java 535
12.2.2檔案PowerManagerService.java 536
12.3分析JNI層 560
12.3.1檔案android_os_Power.cpp 560
12.3.2檔案power.c 561
12.4分析Kernel(核心)層 562
12.4.1檔案power.c 562
12.4.2檔案earlysuspend.c 565
12.4.3檔案wakelock.c 566
12.4.4檔案resume.c 568
12.4.5檔案suspend.c 568
12.4.6檔案main.c 570
12.4.7proc檔案 570
12.5wakelock和early_suspend 571
12.5.1wakelock的原理 571
12.5.2early_suspend的原理 572
12.5.3Android休眠 572
12.5.4Android喚醒 575
第13章輸入系統驅動套用 577
13.1輸入系統介紹 578
13.2分析Input(輸入)系統驅動 580
13.2.1分析頭檔案 580
13.2.2分析核心檔案input.c 584
13.2.3分析event機制 600
13.3分析硬體抽象層 603
13.3.1分析檔案KeycodeLabels.h 603
13.3.2分析檔案KeyCharacterMap.h 608
13.3.3分析Kl格式的檔案 609
13.3.4分析kcm格式檔案 610
13.3.5分析檔案EventHub.cpp 611
13.4分析驅動的具體實現 615
13.4.1分析內置模擬器中的輸入驅動實現 615
13.4.2MSM高通處理器中的輸入驅動實現 616
13.4.3OMAP高通處理器中的輸入驅動實現 625
第14章藍牙系統詳解 627
14.1Android系統中的藍牙模組 628
14.2分析藍牙模組的源碼 630
14.2.1初始化藍牙晶片 630
14.2.2藍牙服務 630
14.2.3管理藍牙電源 631
14.3與藍牙相關的類 632
14.3.1BluetoothSocket類 632
14.3.2BluetoothServerSocket類 633
14.3.3BluetoothAdapter類 634
14.3.4BluetoothClass.Service類 641
14.3.5BluetoothClass.Device類 641
14.4低功耗藍牙協定棧詳解 642
14.4.1低功耗藍牙協定棧基礎 642
14.4.2低功耗藍牙API詳解 643
14.5Android中的BlueDroid 644
14.5.1Android系統中BlueDroid的架構 644
14.5.2ApplicationFramework層分析 645
14.5.3分析BluetoothSystemService層 653
14.5.4分析JNI層 654
14.5.5分析HAL層 659
14.6Android藍牙模組的運作流程 659
14.6.1打開藍牙設備 659
14.6.2搜尋藍牙 665
14.6.3傳輸OPP檔案 671
第15章網路系統詳解 679
15.1使用WebKit瀏覽網頁 680
15.1.1WebKit的Java層框架 681
15.1.2C/C++層框架 685
15.1.3分析WebKit的操作過程 688
15.1.4WebView詳解 692
15.1.5WebViewCore詳解 693
15.2Wi-Fi系統套用 700
15.2.1Wi-Fi概述 700
15.2.2Wi-Fi系統的層次結構 701
15.2.3與Linux的差異 703
15.2.4分析本地部分的源碼 703
15.2.5分析JNI部分的源碼 706
15.2.6分析JavaFramework部分的源碼 708
15.2.7分析Setting中的設定部分的源碼 721