《深入理解Android內核設計思想》


《深入理解Android內核設計思想》

基本信息

作者: 林學森   

出版社:人民郵電出版社

ISBN:9787115348418

上架時間:2014-4-25

出版日期:2014 年5月

開本:16開

頁碼:687

版次:1-1

所屬分類:計算機 > 軟件與程序設計 > 移動開發 > Android

更多關於》》》《深入理解Android內核設計思想》

 

 

編輯推薦 

    基於Android SDK最新版本

  全面細致地剖析了進程/線程模型、內存管理、Binder機制、GUI顯示系統、多媒體管理、輸入系統等核心模塊在Android操作系統中的設計思想

  通過大量圖片與實例引導讀者學習,以求盡量在源碼分析外,為讀者提供更易於理解的思維路徑

  由淺入深,由總體框架再到細節實現,讓讀者在學習中潛移默化地徹底理解Android內核的實現原理

 

內容簡介

    書籍

    計算機書籍

《深入理解android內核設計思想》適用於android 4.3以上的版本。全書從操作系統的基礎知識入手,全面剖析進程/線程、內存管理、binder機制、gui顯示系統、多媒體管理、輸入系統等核心技術在android中的實現原理。書中講述的知識點大部分來源於工程項目研發,因而具有較強的實用性,希望可以讓讀者“知其然,更知其所以然”。全書分為編譯篇、系統原理篇、應用原理篇、系統工具篇共4篇22章,基本涵蓋了參與android開發所需具備的知識,並通過大量圖片與實例來引導讀者學習,以求盡量在源代碼分析外為讀者提供更易於理解的思維方式。

《深入理解android內核設計思想》既適合android系統工程師,也適合於應用開發工程師來閱讀提升android開發能力。讀者可以在《深入理解android內核設計思想》潛移默化的學習過程中更深刻地理解android系統,並將所學知識自然地應用到實際開發難題的解決中。

 

目錄

《深入理解android內核設計思想》

第1篇 android編譯篇

第1章 android系統簡介 2

1.1 android系統發展歷程 2

1.2 android系統特點 4

1.3 android系統框架 8

第2章 android源碼下載及編譯 10

2.1 android源碼下載指南 10

2.1.1 基於repo和git的版本管理 10

2.1.2 android源碼下載流程 11

2.2 原生態系統編譯指南 12

2.2.1 建立編譯環境 13

2.2.2 編譯流程 15

2.3 定制產品的編譯與燒錄 17

2.3.1 定制新產品 17

2.3.2 linux內核編譯 21

2.3.3 燒錄 22

2.4 android系統映像文件 23

2.4.1 boot.img 23

2.4.2 ramdisk.img 25

2.4.3 system.img 26

2.5 ota系統升級 26

2.5.1 生成升級包 27

2.5.2 獲取升級包 28

2.5.3 ota升級-recoverymode 29

2.6 android反編譯 31

第3章 android編譯系統 34

3.1 makefile入門 34

3.2 android編譯系統 35

3.2.1 makefile依賴樹的概念 36

3.2.2 樹根節點droid 36

3.2.3 main.mk解析 38

3.2.4 droidcore節點 39

3.2.5 dist_files 41

3.2.6 android.mk的編寫規則 42

第2篇 android原理篇

第4章 操作系統基礎 48

4.1 計算機體系結構(computer architecture) 48

4.1.1 馮·諾依曼結構 48

4.1.2 哈佛結構 48

4.2 什么是操作系統 49

4.3 進程間通信的經典實現 51

4.3.1 共享內存(shared memory) 52

4.3.2 管道(pipe) 54

4.3.3 unix domain socket 55

4.3.4 rpc(remoteprocedure calls) 58

4.4 同步機制的經典實現 58

4.4.1 信號量(semaphore) 58

4.4.2 mutex 59

4.4.3 管程(monitor) 59

4.4.4 同步范例 60

4.5 android中的同步機制 61

4.5.1 進程間同步——mutex 61

4.5.2 條件判斷——condition 62

4.5.3 “柵欄、障礙”——barrier 64

4.5.4 加解鎖的自動化操作——autolock 66

4.6 操作系統內存管理基礎 66

4.6.1 虛擬內存(virtual memory) 66

4.6.2 內存保護(memory protection) 69

4.6.3 內存分配與回收 69

4.6.4 進程間通信——mmap 70

4.7 android中的low memory killer 71

4.8 android匿名共享內存(anonymous shared memory) 74

4.8.1 ashmem設備 74

4.8.2 ashmem應用實例 78

4.9 jni 83

4.9.1 java函數的本地實現 83

4.9.2 本地代碼訪問jvm 86

4.10 學習android系統的兩條線索 88

第5章 android進程/線程管理 89

5.1 android進程和線程 89

5.2 handler, messagequeue,runnable與looper 95

5.3 ui主線程——activitythread 102

5.4 thread類 105

5.4.1 thread類的內部原理 105

5.4.2 thread休眠和喚醒 106

5.4.3 thread實例 110

5.5 android應用程序的典型啟動流程 112

第6章 進程間通信——binder 114

6.1 智能指針 117

6.1.1 智能指針的設計理念 117

6.1.2 強指針sp 120

6.1.3 弱指針wp 121

6.2 進程間的數據傳遞載體——parcel 128

6.3 binder驅動與協議 135

6.3.1 打開binder驅動——binder_open 136

6.3.2 binder_mmap 137

6.3.3 binder_ioctl 140

6.4 “dns”服務器——servicemanager(binder server) 141

6.4.1 servicemanager的啟動 141

6.4.2 servicemanager的構建 142

6.4.3 獲取servicemanager服務——設計思考 147

6.4.4 servicemanagerproxy 151

6.4.5 ibinder和bpbinder 153

6.4.6 processstate和ipcthreadstate 155

6.5 binder客戶端——binder client 185

6.6 android接口描述語言——aidl 190

6.7 匿名binder server 202

第7章 android啟動過程簡析 205

7.1 第一個系統進程(init) 205

7.1.1 init.rc語法 205

7.1.2 init.rc實例分析 208

7.2 系統關鍵服務的啟動簡析 209

7.2.1 android的“dns服務器”——servicemanager 209

7.2.2 “孕育”新的線程和進程——zygote 209

7.2.3 android的“系統服務”——systemserver 211

第8章 管理activity和組件運行狀態的系統進程——activity managerservice (ams) 213

8.1 ams功能概述 213

8.2 管理當前系統中activity狀態——activity stack 215

8.3 startactivity流程 217

8.4 完成同一任務的“集合”——activity task 224

8.4.1 “后進先出”——last in,first out 225

8.4.2 管理activity task 226

第9章 gui系統之surfaceflinger 229

9.1 opengl es與egl 229

9.2 android的硬件接口——hal 231

9.3 android終端顯示設備的“化身”——gralloc與framebuffer 233

9.4 android中的本地窗口 237

9.4.1 framebuffernativewindow 239

9.4.2 應用程序端的本地窗口——surface 245

9.5 bufferqueue詳解 249

9.5.1 bufferqueue的內部原理 249

9.5.2 bufferqueue中的緩沖區分配 252

9.5.3 應用程序的典型繪圖流程 258

9.5.4 應用程序與bufferqueue的關系 263

9.6 surfaceflinger 267

9.6.1 “黃油計划”——project butter 267

9.6.2 surfaceflinger的啟動 271

9.6.3 接口的服務端——client 275

9.7 vsync的產生和處理 279

9.7.1 vsync信號的產生和分發 279

9.7.2 vsync信號的處理 285

9.7.3 handlemessagetransaction 287

9.7.4 “界面已經過時/無效,需要重新繪制”——handlemessageinvalidate 291

9.7.5 合成前的准備工作——precomposition 293

9.7.6 可見區域——rebuildlayerstacks 295

9.7.7 為“composition”搭建環境——setuphwcomposer 299

9.7.8 dodebugflashregions 301

9.7.9 docomposition 302

第10章 gui系統之“窗口管理員”——wms 309

10.1 “窗口管理員”——wms綜述 310

10.1.1 wms的啟動 312

10.1.2 wms的基礎功能 312

10.1.3 wms的工作方式 313

10.1.4 wms,ams與activity間的聯系 314

10.2 窗口屬性 316

10.2.1 窗口類型與層級 316

10.2.2 窗口策略(window policy) 320

10.2.3 窗口屬性(layoutparams) 322

10.3 窗口的添加過程 324

10.3.1 系統窗口的添加過程 324

10.3.2 activity窗口的添加過程 333

10.3.3 窗口添加實例 337

10.4 surface管理 340

10.4.1 surface申請流程(relayout) 341

10.4.2 surface的跨進程傳遞 344

10.4.3 surface的業務操作 347

10.5 performlayoutandplacesurfaceslockedinner 347

10.6 窗口大小的計算過程 349

10.7 啟動窗口的添加與銷毀 358

10.7.1 啟動窗口的添加 358

10.7.2 啟動窗口的銷毀 362

10.8 窗口動畫 363

10.8.1 窗口動畫類型 364

10.8.2 動畫流程跟蹤——windowstateanimator 365

10.8.3 appwindowanimator 368

10.8.4 動畫的執行過程 370

第11章 讓你的界面炫彩起來的gui系統之view體系 377

11.1 應用程序中的view框架 377

11.2 activity中view tree的創建過程 380

11.3 在wms中注冊窗口 386

11.4 viewroot的基本工作方式 388

11.5 view tree的遍歷時機 389

11.6 view tree的遍歷流程 393

11.7 view和viewgroup屬性 402

11.7.1 view的基本屬性 402

11.7.2 viewgroup的屬性 408

11.7.3 view,viewgroup和viewparent 408

11.7.4 callback接口 408

11.8 “作畫“工具集——canvas 411

11.8.1 “繪制ui”——skia 412

11.8.2 數據中介——surface.lockcanvas 413

11.8.3 解鎖並提交結果——unlockcanvasandpost 417

11.9 draw和ondraw 417

11.10 view中的消息傳遞 423

11.10.1 view中touchevent的投遞流程 423

11.10.2 viewgoup中touchevent的投遞流程 427

11.11 view動畫 430

第12章 “問渠哪得清如許,為有源頭活水來”——inputmanagerservice與輸入事件 436

12.1 事件的分類 436

12.2 事件的投遞流程 439

12.2.1 inputmanagerservice 440

12.2.2 inputreaderthread 441

12.2.3 inputdispatcherthread 441

12.2.4 viewrootimpl對事件的派發 445

第13章 應用不再同質化——音頻系統 447

13.1 音頻基礎 448

13.1.1 聲波 448

13.1.2 音頻的錄制、存儲與回放 448

13.1.3 音頻采樣 449

13.1.4 nyquist–shannon采樣定律 451

13.1.5 聲道和立體聲 451

13.1.6 聲音定級——weber–fechner law 452

13.1.7 音頻文件格式 453

13.2 音頻框架 454

13.2.1 linux中的音頻框架 454

13.2.2 tinyalsa 456

13.2.3 android系統中的音頻框架 457

13.3 音頻系統的核心——audioflinger 459

13.3.1 audioflinger服務的啟動和運行 460

13.3.2 audioflinger對音頻設備的管理 461

13.3.3 playbackthread的循環主體 468

13.3.4 audiomixer 473

13.4 策略的制定者——audiopolicyservice 475

13.4.1 audiopolicyservice概述 475

13.4.2 audiopolicyservice的啟動過程 477

13.4.3 audiopolicyservice與音頻設備 480

13.5 音頻流的回放——audiotrack 482

13.5.1 audiotrack應用實例 482

13.5.2 audiopolicyservice的路由實現 489

13.6 音頻數據流 494

13.6.1 audiotrack中的音頻流 495

13.6.2 audiotrack和audioflinger間的數據交互 498

13.6.3 audiomixer中的音頻流 504

13.7 音量控制 506

13.8 音頻系統的上層建築 510

13.8.1 從功能入手 510

13.8.2 mediaplayer 511

13.8.3 mediarecorder 514

13.8.4 一個典型的多媒體錄制程序 517

13.8.5 mediarecorder源碼解析 518

13.8.6 mediaplayerservice簡析 520

13.9 android支持的媒體格式 523

13.9.1 音頻格式 523

13.9.2 視頻格式 523

13.9.3 圖片格式 524

13.9.4 網絡流媒體 524

13.10 id3信息簡述 525

13.11 android多媒體文件管理 528

13.11.1 mediastore 529

13.11.2 多媒體文件信息的存儲“倉庫”——mediaprovider 530

13.11.3 多媒體文件管理中的“生產者”——mediascanner 533

第3篇 應用原理篇

第14章 intent的匹配規則 538

14.1 intent屬性 538

14.2 intent的匹配規則 540

14.3 intent匹配源碼簡析 546

第15章 apk應用程序的資源適配 551

15.1 資源類型 552

15.1.1 狀態顏色資源 553

15.1.2 圖形資源 554

15.1.3 布局資源 555

15.1.4 菜單資源 556

15.1.5 字符串資源 556

15.1.6 樣式資源 557

15.1.7 其他資源 558

15.1.8 屬性資源 558

15.2 提供可選資源 561

15.3 最佳資源的匹配流程 565

15.4 屏幕適配 567

15.4.1 屏幕適配的重要參數 567

15.4.2 如何適配多屏幕 569

第16章 android字符編碼格式 572

16.1 字符編碼格式背景 572

16.2 iso/iec 8859 573

16.3 iso/iec 10646 573

16.4 unicode 574

16.5 string類型 577

16.5.1 構建string 578

16.5.2 string對多種編碼的兼容 579

第17章 android和opengl es 583

17.1 3d圖形學基礎 584

17.1.1 計算機3d圖形 584

17.1.2 圖形管線 585

17.2 android中的opengl es簡介 587

17.3 圖形渲染api—egl 588

17.3.1 egl與opengl es 588

17.3.2 egl.cfg 588

17.3.3 egl接口解析 590

17.3.4 egl實例 593

17.4 簡化opengl es開發——glsurfaceview 593

第18章 “系統的ui”——systemui 601

18.1 systemui的組成元素 601

18.2 systemui的實現 603

18.3 android壁紙資源——wallpaperservice 610

18.3.1 wallpapermanagerservice 611

18.3.2 imagewallpaper 613

第19章 android常用的工具“小插件”——widget機制 616

19.1 “功能的提供者”——appwidgetprovider 616

19.2 appwidgethost 618

第20章 android應用程序的編譯和打包 624

20.1 “另辟蹊徑”采用第三方工具——ant 624

20.2 通過命令行編譯和打包apk 625

20.3 apk編譯過程詳解 626

20.4 信息安全基礎概述 628

20.5 應用程序簽名 633

20.6 應用程序簽名源碼簡析 636

第4篇 android系統工具

第21章 軟件版本管理 642

21.1 版本管理簡述 642

21.2 git的安裝 643

21.2.1 linux環境下安裝git 643

21.2.2 windows環境下安裝git 644

21.3 git的使用 644

21.3.1 基礎配置 644

21.3.2 新建倉庫 646

21.3.3 文件狀態 647

21.3.4 忽略某些文件 649

21.3.5 提交更新 649

21.3.6 其他命令 650

21.4 git原理簡析 650

21.4.1 分布式版本系統的特點 651

21.4.2 安全散列算法——sha-1 652

21.4.3 四個重要對象 653

21.4.4 三個區域 657

21.4.5 分支的概念與實例 658

第22章 系統調試輔助工具 662

22.1 萬能模擬器——emulator 662

22.1.1 qemu 662

22.1.2 android工程中的qemu 667

22.1.3 模擬器控制台(emulator console) 670

22.1.4 實例:為android模擬器添加串口功能 672

22.2 此android非彼android 674

22.3 快速建立與模擬器或真機的通信渠道——adb 676

22.3.1 adb的使用方法 676

22.3.2 adb的組成元素 678

22.3.3 adb源代碼解析 679

22.3.4 adb protocol 684

 

本圖書信息來源:互動出版網

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM