-
>
全國計算機等級考試最新真考題庫模擬考場及詳解·二級MSOffice高級應用
-
>
決戰行測5000題(言語理解與表達)
-
>
軟件性能測試.分析與調優實踐之路
-
>
第一行代碼Android
-
>
JAVA持續交付
-
>
EXCEL最強教科書(完全版)(全彩印刷)
-
>
深度學習
深入理解Android內核設計思想 第2版(上、下冊) 版權信息
- ISBN:9787115452634
- 條形碼:9787115452634 ; 978-7-115-45263-4
- 裝幀:暫無
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
深入理解Android內核設計思想 第2版(上、下冊) 本書特色
全書從操作系統的基礎知識入手,全面剖析進程/線程、內存管理、Binder機制、GUI顯示系統、多媒體管理、輸入系統、虛擬機等核心技術在Android中的實現原理。書中講述的知識點大部分來源于工程項目研發,因而具有較強的實用性,希望可以讓讀者“知其然,更知其所以然”。本書分為編譯篇、系統原理篇、應用原理篇、系統工具篇,共4篇25章,基本涵蓋了參與Android開發所需具備的知識,并通過大量圖片與實例來引導讀者學習,以求盡量在源碼分析外為讀者提供更易于理解的思維方式。 本書既適合Android系統工程師,也適合于應用開發工程師來閱讀,從而提升Android開發能力。讀者可以在本書潛移默化的學習過程中更深刻地理解Android系統,并將所學知識自然地應用到實際開發難題的解決中。
深入理解Android內核設計思想 第2版(上、下冊) 內容簡介
基于Android SDK zui新版本 全面剖析了進程/線程、內存管理、Binder機制、GUI顯示系統、多媒體管理、輸入系統等核心知識在Android中的實現原理 Android安全機制 虛擬 內存優化 性能優化 通過大量圖片與實例來引導讀者學習,以求盡量在源碼分析外,為讀者提供更易于理解的思維路徑 由淺入深,由總體框架再到細節實現,讓讀者盡快了解Android內核的設計思想
深入理解Android內核設計思想 第2版(上、下冊) 目錄
目 錄
第1篇 Android編譯篇
第1章 Android系統簡介 2
1.1 Android系統發展歷程 2
1.2 Android系統特點 4
1.3 Android系統框架 8
第2章 Android源碼下載及編譯 11
2.1 Android源碼下載指南 11
2.1.1 基于Repo和Git的
版本管理 11
2.1.2 Android源碼下載流程 12
2.2 原生Android系統編譯指南 16
2.2.1 建立編譯環境 16
2.2.2 編譯流程 19
2.3 定制產品的編譯與燒錄 22
2.3.1 定制新產品 22
2.3.2 Linux內核編譯 26
2.3.3 燒錄/升級系統 27
2.4 Android Multilib Build 28
2.5 Android系統映像文件 31
2.5.1 boot.img 32
2.5.2 ramdisk.img 34
2.5.3 system.img 35
2.5.4 Verified Boot 35
2.6 ODEX流程 37
2.7 OTA系統升級 39
2.7.1 生成升級包 39
2.7.2 獲取升級包 40
2.7.3 OTA升級—Recovery
模式 41
2.8 Android反編譯 44
2.9 NDK Build 46
2.10 第三方ROM的移植 48
第3章 Android編譯系統 50
3.1 Makefile入門 50
3.2 Android編譯系統 52
3.2.1 Makefile依賴樹的概念 53
3.2.2 Android編譯系統抽象
模型 53
3.2.3 樹根節點droid 54
3.2.4 main.mk解析 55
3.2.5 droidcore節點 59
3.2.6 dist_files 61
3.2.7 Android.mk的編寫規則 61
3.3 Jack Toolchain 64
3.4 SDK的編譯過程 68
3.4.1 envsetup.sh 68
3.4.2 lunch sdk-eng 70
3.4.3 make sdk 75
3.5 Android系統GDB調試 85
第2篇 Android原理篇
第4章 操作系統基礎 90
4.1 計算機體系結構
(Computer Architecture) 90
4.1.1 馮 諾依曼結構 90
4.1.2 哈佛結構 90
4.2 什么是操作系統 91
4.3 進程間通信的經典實現 93
4.3.1 共享內存
(Shared Memory) 94
4.3.2 管道(Pipe) 95
4.3.3 UNIX Domain Socket 97
4.3.4 RPC(Remote Procedure Calls) 99
4.4 同步機制的經典實現 100
4.4.1 信號量(Semaphore) 100
4.4.2 Mutex 101
4.4.3 管程(Monitor) 101
4.4.4 Linux Futex 102
4.4.5 同步范例 103
4.5 Android中的同步機制 104
4.5.1 進程間同步——Mutex 104
4.5.2 條件判斷——Condition 105
4.5.3 “柵欄、障礙”
——Barrier 107
4.5.4 加解鎖的自動化操作
——Autolock 108
4.5.5 讀寫鎖——Reader
WriterMutex 109
4.6 操作系統內存管理基礎 110
4.6.1 虛擬內存
(Virtual Memory) 110
4.6.2 內存保護
(Memory Protection) 113
4.6.3 內存分配與回收 113
4.6.4 進程間通信——mmap 114
4.6.5 寫時拷貝技術
(Copy on Write) 115
4.7 Android中的Low
Memory Killer 115
4.8 Android匿名共享內存
(Anonymous Shared Memory) 118
4.8.1 Ashmem設備 118
4.8.2 Ashmem應用實例 122
4.9 JNI 127
4.9.1 Java函數的本地實現 127
4.9.2 本地代碼訪問JVM 130
4.10 Java中的反射機制 132
4.11 學習Android系統的兩條線索 133
第5章 Android進程/線程和
程序內存優化 134
5.1 Android進程和線程 134
5.2 Handler, MessageQueue,
Runnable與Looper 140
5.3 UI主線程——ActivityThread 147
5.4 Thread類 150
5.4.1 Thread類的內部原理 150
5.4.2 Thread休眠和喚醒 151
5.4.3 Thread實例 155
5.5 Android應用程序如何利用
CPU的多核處理能力 157
5.6 Android應用程序的典型啟
動流程 157
5.7 Android程序的內存管理與優化 159
5.7.1 Android系統對內存使用
的限制 159
5.7.2 Android中的內存泄露與
內存監測 160
第6章 進程間通信 — Binder 166
6.1 智能指針 169
6.1.1 智能指針的設計理念 169
6.1.2 強指針sp 172
6.1.3 弱指針wp 173
6.2 進程間的數據傳遞載體
——Parcel 179
6.3 Binder驅動與協議 187
6.3.1 打開Binder驅動
——binder_open 188
6.3.2 binder_mmap 189
6.3.3 binder_ioctl 192
6.4 “DNS”服務器——Service
Manager(Binder Server) 193
6.4.1 ServiceManager的啟動 193
6.4.2 ServiceManager的構建 194
6.4.3 獲取ServiceManager服
務—設計思考 199
6.4.4 ServiceManagerProxy 203
6.4.5 IBinder和BpBinder 205
6.4.6 ProcessState和IPCThreadState 207
6.5 Binder客戶端——Binder Client 237
6.6 Android接口描述語言——AIDL 242
6.7 匿名Binder Server 254
第7章 Android啟動過程 257
7.1 **個系統進程(init) 257
7.1.1 init.rc語法 257
7.1.2 init.rc實例分析 260
7.2 系統關鍵服務的啟動簡析 261
7.2.1 Android的“DNS服務器”
——ServiceManager 261
7.2.2 “孕育”新的線程和進程
——Zygote 261
7.2.3 Android的“系統服務”
——SystemServer 274
7.2.4 Vold和External Storage
存儲設備 276
7.3 多用戶管理 282
第8章 管理Activity和組件運行狀
態的系統進程——Activity ManagerService(AMS) 284
8.1 AMS功能概述 284
8.2 管理當前系統中Activity
狀態——Activity Stack 286
8.3 startActivity流程 288
8.4 完成同一任務的“集合”——Activity Task 296
8.4.1 “后進先出”——Last In,First Out 297
8.4.2 管理Activity Task 298
8.5 Instrumentation機制 300
第9章 GUI系統 — SurfaceFlinger 305
9.1 OpenGL ES與EGL 305
9.2 Android的硬件接口——HAL 307
9.3 Android終端顯示設備的“化身”
——Gralloc與Framebuffer 309
9.4 Android中的本地窗口 313
9.4.1 FramebufferNativeWindow 315
9.4.2 應用程序端的本地窗口——Surface 321
9.5 BufferQueue詳解 325
9.5.1 BufferQueue的內部原理 325
9.5.2 BufferQueue中的緩沖區
分配 328
9.5.3 應用程序的典型繪圖
流程 333
9.5.4 應用程序與BufferQueue
的關系 339
9.6 SurfaceFlinger 343
9.6.1 “黃油計劃”——Project Butter 343
9.6.2 SurfaceFlinger的啟動 347
9.6.3 接口的服務端——Client 351
9.7 VSync的產生和處理 355
9.7.1 VSync信號的產生和
分發 355
9.7.2 VSync信號的處理 361
9.7.3 handleMessageTransaction 363
9.7.4 “界面已經過時/無效,需要重
新繪制”——handleMessage Invalidate 367
9.7.5 合成前的準備工作
——preComposition 369
9.7.6 可見區域
——rebuildLayerStacks 371
9.7.7 為“Composition”搭建環境
——setUpHWComposer 375
9.7.8 doDebugFlashRegions 377
9.7.9 doComposition 377
第10章 GUI系統之“窗口管理員”
—WMS 385
10.1 “窗口管理員”——WMS綜述 386
10.1.1 WMS的啟動 388
10.1.2 WMS的基礎功能 388
10.1.3 WMS的工作方式 389
10.1.4 WMS,AMS與Activity
間的聯系 390
10.2 窗口屬性 392
10.2.1 窗口類型與層級 392
10.2.2 窗口策略
(Window Policy) 396
10.2.3 窗口屬性
(LayoutParams) 398
10.3 窗口的添加過程 400
10.3.1 系統窗口的添加過程 400
10.3.2 Activity窗口的添加
過程 409
10.3.3 窗口添加實例 412
10.4 Surface管理 416
10.4.1 Surface申請流程(relayout) 416
10.4.2 Surface的跨進程傳遞 420
10.4.3 Surface的業務操作 422
10.5 performLayoutAndPlace
SurfacesLockedInner 423
10.6 窗口大小的計算過程 424
10.7 啟動窗口的添加與銷毀 433
10.7.1 啟動窗口的添加 433
10.7.2 啟動窗口的銷毀 437
10.8 窗口動畫 438
10.8.1 窗口動畫類型 439
10.8.2 動畫流程跟蹤——Window
StateAnimator 440
10.8.3 AppWindowAnimator 444
10.8.4 動畫的執行過程 446
第11章 讓你的界面炫彩起來的GUI
系統 — View體系 452
11.1 應用程序中的View框架 452
11.2 Activity中View Tree的
創建過程 455
11.3 在WMS中注冊窗口 461
11.4 ViewRoot的基本工作方式 463
11.5 View Tree的遍歷時機 464
11.6 View Tree的遍歷流程 468
11.7 View和ViewGroup屬性 477
11.7.1 View的基本屬性 477
11.7.2 ViewGroup的屬性 482
11.7.3 View、ViewGroup和
ViewParent 482
11.7.4 Callback接口 482
11.8 “作畫“工具集——Canvas 484
11.8.1 “繪制UI”——Skia 485
11.8.2 數據中介——Surface.
lockCanvas 486
11.8.3 解鎖并提交結果——unlock
CanvasAndPost 490
11.9 draw和onDraw 491
11.10 View中的消息傳遞 497
11.10.1 View中TouchEvent
的投遞流程 497
11.10.2 ViewGoup中Touch-
Event的投遞流程 500
11.11 View動畫 504
11.12 UiAutomator 509
第12章 “問渠哪得清如許,為有源頭
活水來”— InputManager
Service與輸入事件 514
12.1 事件的分類 514
12.2 事件的投遞流程 517
12.2.1 InputManagerService 518
12.2.2 InputReaderThread 519
12.2.3 InputDispatcherThread 519
12.2.4 ViewRootImpl對事件
的派發 523
12.3 事件注入 524
第13章 應用不再同質化 — 音頻系統 526
13.1 音頻基礎 527
13.1.1 聲波 527
13.1.2 音頻的錄制、存儲
與回放 527
13.1.3 音頻采樣 528
13.1.4 Nyquist?CShannon采樣
定律 530
13.1.5 聲道和立體聲 530
13.1.6 聲音定級——Weber?C
Fechner law 531
13.1.7 音頻文件格式 532
13.2 音頻框架 532
13.2.1 Linux中的音頻框架 532
13.2.2 TinyAlsa 534
13.2.3 Android系統中的
音頻框架 536
13.3 音頻系統的核心——Audio-
Flinger 538
13.3.1 AudioFlinger服務的
啟動和運行 538
13.3.2 AudioFlinger對音頻
設備的管理 540
13.3.3 PlaybackThread的
循環主體 547
13.3.4 AudioMixer 551
13.4 策略的制定者——Audio-
PolicyService 553
13.4.1 AudioPolicyService
概述 554
13.4.2 AudioPolicyService
的啟動過程 556
13.4.3 AudioPolicyService
與音頻設備 558
13.5 音頻流的回放——AudioTrack 560
13.5.1 AudioTrack應用實例 560
13.5.2 AudioPolicyService
的路由實現 567
13.6 音頻數據流 572
13.6.1 AudioTrack中的音頻流 573
13.6.2 AudioTrack和AudioFlinger
間的數據交互 576
13.6.3 AudioMixer中的
音頻流 582
13.7 音量控制 584
13.8 音頻系統的上層建筑 588
13.8.1 從功能入手 588
13.8.2 MediaPlayer 589
13.8.3 MediaRecorder 592
13.8.4 一個典型的多媒體
錄制程序 595
13.8.5 MediaRecorder
源碼解析 596
13.8.6 MediaPlayerService簡析 598
13.9 Android支持的媒體格式 600
13.9.1 音頻格式 600
13.9.2 視頻格式 601
13.9.3 圖片格式 601
13.9.4 網絡流媒體 602
13.10 ID3信息簡述 602
13.11 Android多媒體文件管理 606
13.11.1 MediaStore 607
13.11.2 多媒體文件信息的
存儲“倉庫”
——MediaProvider 608
13.11.3 多媒體文件管理中
的“生產者”
—MediaScanner 611
第3篇 應用原理篇
第14章 Intent的匹配規則 616
14.1 Intent屬性 616
14.2 Intent的匹配規則 618
14.3 Intent匹配源碼簡析 624
第15章 APK應用程序的資源適配 628
15.1 資源類型 629
15.1.1 狀態顏色資源 630
15.1.2 圖形資源 631
15.1.3 布局資源 632
15.1.4 菜單資源 633
15.1.5 字符串資源 633
15.1.6 樣式資源 634
15.1.7 其他資源 635
15.1.8 屬性資源 635
15.2 提供可選資源 638
15.3 *佳資源的匹配流程 642
15.4 屏幕適配 644
15.4.1 屏幕適配的重要參數 644
15.4.2 如何適配多屏幕 646
15.4.3 橫豎屏切換的處理 648
第16章 Android字符編碼格式 650
16.1 字符編碼格式背景 650
16.2 ISO/IEC 8859 651
16.3 ISO/IEC 10646 651
16.4 Unicode 652
16.5 String類型 655
16.5.1 構建String 655
16.5.2 String對多種編碼
的兼容 656
第17章 Android和OpenGL ES 660
17.1 3D圖形學基礎 661
17.1.1 計算機3D圖形 661
17.1.2 圖形管線 662
17.2 Android中的OpenGL ES簡介 664
17.3 圖形渲染API—EGL 665
17.3.1 EGL與OpenGL ES 665
17.3.2 egl.cfg 665
17.3.3 EGL接口解析 667
17.3.4 EGL實例 670
17.4 簡化OpenGL ES開發
—GLSurfaceView 670
17.5 OpenGL分析利器
—GLTracer 677
第18章 “系統的UI”——SystemUI 685
18.1 SystemUI的組成元素 685
18.2 SystemUI的實現 687
18.3 Android壁紙資源
—WallpaperService 694
18.3.1 WallPaperManager-
Service 695
18.3.2 ImageWallpaper 697
第19章 Android常用的工具
“小插件”——Widget機制 700
19.1 “功能的提供者”——AppWidgetProvider 700
19.2 AppWidgetHost 702
第20章 Android應用程序
的編譯和打包 707
20.1 “另辟蹊徑”采用第三方工具——Ant 707
20.2 通過命令行編譯和打包APK 708
20.3 APK編譯過程詳解 709
20.4 信息安全基礎概述 711
20.5 應用程序簽名 716
20.6 應用程序簽名源碼簡析 719
20.7 APK重簽名實例 724
第21章 Android虛擬機 725
21.1 Android虛擬機基礎知識 725
21.1.1 Java虛擬機核心概念 725
21.1.2 LLVM編譯器框架 734
21.1.3 Android中的經典
垃圾回收算法 736
21.1.4 Art和Dalvik之爭 738
21.1.5 Art虛擬機整體框架 741
21.1.6 Android應用程序與
虛擬機 742
21.1.7 Procedure Call Standard
for Arm Architecture
(過程調用標準) 744
21.1.8 C 11標準中的新
特性 746
21.2 Android虛擬機核心文件格式
—Dex字節碼 749
21.3 Android虛擬機核心文件格式
—可執行文件的基石ELF 756
21.3.1 ELF文件格式 756
21.3.2 Linux平臺下ELF文件的加載和動態鏈接過程 764
21.3.3 Android Linker和
動態鏈接庫 771
21.3.4 Signal Handler和
Fault Manager 782
21.4 Android虛擬機核心文件格式
——“主宰者”OAT 786
21.4.1 OAT文件格式解析 786
21.4.2 OAT的兩個編譯時機 793
21.5 Android虛擬機的典型
啟動流程 806
21.6 堆管理器和堆空間釋義 815
21.7 Android虛擬機中的線程管理 823
21.7.1 Java線程的創建過程 823
21.7.2 線程的掛起過程 827
21.8 Art虛擬機中的代碼執行
方式綜述 829
21.9 Art虛擬機的“中樞系統”
——執行引擎之Interpreter 836
21.10 Art虛擬機的“中樞系統”——執行引擎之JIT 839
21.10.1 JIT重出江湖的契機 839
21.10.2 Android N版本中JIT
的設計目標及策略 840
21.10.3 Profile Guided Compilation
(追蹤技術) 842
21.10.4 AOT Compilation
Daemon 843
21.11 Art虛擬機的“中樞系統”
——執行引擎之本地代碼 844
21.12 Android x86版本兼容ARM二
進制代碼——Native Bridge 864
21.13 Android應用程序調試
原理解析 871
21.13.1 Java代碼調試與
JDWP協議 872
21.13.2 Native代碼調試 879
21.13.3 利用GDB調試
Android Art虛擬機 885
第22章 Android安全機制透析 887
22.1 Android Security綜述 887
22.2 SELinux 889
22.2.1 DAC 889
22.2.2 MAC 890
22.2.3 基于MAC的SELinux 890
22.3 Android系統安全保護
的三重利劍 892
22.3.1 **劍:Permission
機制 893
22.3.2 加強劍:DAC(UGO)
保護 896
22.3.3 終極劍:SEAndroid 898
22.4 SEAndroid剖析 899
22.4.1 SEAndroid的頂層模型 899
22.4.2 SEAndroid相關的核心
源碼 900
22.4.3 SEAndroid標簽和規則 901
22.4.4 如何在Android系統中
自定義SEAndroid 903
22.4.5 TE文件的語法規則 905
22.4.6 SEAndroid中的核心
主體—init進程 907
22.4.7 SEAndroid中的客體 912
22.5 Android設備Root簡析 913
22.6 APK的加固保護分析 916
第4篇 Android系統工具
第23章 IDE和Gradle 922
23.1 Gradle的核心要點 922
23.1.1 Groovy與Gradle 923
23.1.2 Gradle的生命周期 926
23.2 Gradle的Console語法 927
23.3 Gradle Wrapper和Cache 929
23.4 Android Studio和Gradle 931
23.4.1 Gradle插件基礎知識 931
23.4.2 Android Studio中的
Gradle編譯腳本 932
第24章 軟件版本管理 937
24.1 版本管理簡述 937
24.2 Git的安裝 937
24.2.1 Linux環境下安裝Git 938
24.2.2 Windows環境下
安裝Git 939
24.3 Git的使用 939
24.3.1 基礎配置 939
24.3.2 新建倉庫 940
24.3.3 文件狀態 942
24.3.4 忽略某些文件 943
24.3.5 提交更新 944
24.3.6 其他命令 944
24.4 Git原理簡析 945
24.4.1 分布式版本系統的特點 946
24.4.2 安全散列算法
—SHA-1 947
24.4.3 4個重要對象 948
24.4.4 三個區域 953
24.4.5 分支的概念與實例 954
第25章 系統調試輔助工具 958
25.1 萬能模擬器——Emulator 958
25.1.1 QEMU 958
25.1.2 Android工程中
的QEMU 963
25.1.3 模擬器控制臺
(Emulator Console) 966
25.1.4 實例:為Android
模擬器添加串口功能 969
25.2 此Android非彼Android 970
25.3 快速建立與模擬器或真機的
通信渠道——ADB 972
25.3.1 ADB的使用方法 972
25.3.2 ADB的組成元素 975
25.3.3 ADB源代碼解析 976
25.3.4 ADB Protocol 981
25.4 SDK Layoutlib 984
25.5 TraceView和Dmtracedump 985
25.6 Systrace 987
25.7 代碼覆蓋率統計 992
25.8 模擬GPS位置 995
深入理解Android內核設計思想 第2版(上、下冊) 作者簡介
林學森,作者曾于多家跨國企業擔任研發和管理工作,并已在國內外會議、雜志上發表多篇一作文章,獲得多個發明專利。現為某世界500強科技公司高級專家、資深架構師,在業界也比較有影響力。
- >
伊索寓言-世界文學名著典藏-全譯本
- >
二體千字文
- >
中國人在烏蘇里邊疆區:歷史與人類學概述
- >
名家帶你讀魯迅:故事新編
- >
煙與鏡
- >
我從未如此眷戀人間
- >
我與地壇
- >
上帝之肋:男人的真實旅程