編輯推薦
·基於AndroidSDK新版本
·全麵剖析瞭進程/綫程、內存管理、Binder機製、GUI顯示係統、多媒體管理、輸入係統等核心知識在Android中的實現原理Android安全機製虛擬內存優化性能優化
·通過大量圖片與實例來引導讀者學習,以求盡量在源碼分析外,為讀者提供更易於理解的思維路徑
·由淺入深,由總體框架再到細節實現,讓讀者盡快瞭解Android內核的設計思想
內容簡介
全書從操作係統的基礎知識入手,全麵剖析進程/綫程、內存管理、Binder機製、GUI顯示係統、多媒體管理、輸入係統、虛擬機等核心技術在Android中的實現原理。書中講述的知識點大部分來源於工程項目研發,因而具有較強的實用性,希望可以讓讀者“知其然,更知其所以然”。本書分為編譯篇、係統原理篇、應用原理篇、係統工具篇,共4篇25章,基本涵蓋瞭參與Android開發所需具備的知識,並通過大量圖片與實例來引導讀者學習,以求盡量在源碼分析外為讀者提供更易於理解的思維方式。
本書既適閤Android係統工程師,也適閤於應用開發工程師來閱讀,從而提升Android開發能力。讀者可以在本書潛移默化的學習過程中更深刻地理解Android係統,並將所學知識自然地應用到實際開發難題的解決中。
作者簡介
林學森,曾於多傢跨國企業擔任研發和管理工作,並已在國內外會議、雜誌上發錶多篇文章,獲得多個發明專利。現為某世界500強科技公司高級專傢、資深架構師。
目錄
第1篇Android編譯篇
第1章Android係統簡介2
1.1Android係統發展曆程2
1.2Android係統特點4
1.3Android係統框架8
第2章Android源碼下載及編譯11
2.1Android源碼下載指南11
2.1.1基於Repo和Git的版本管理11
2.1.2Android源碼下載流程12
2.2原生Android係統編譯指南16
2.2.1建立編譯環境16
2.2.2編譯流程19
2.3定製産品的編譯與燒錄22
2.3.1定製新産品22
2.3.2Linux內核編譯26
2.3.3燒錄/升級係統27
2.4AndroidMultilibBuild28
2.5Android係統映像文件31
2.5.1boot.img32
2.5.2ramdisk.img34
2.5.3system.img35
2.5.4VerifiedBoot35
2.6ODEX流程37
2.7OTA係統升級39
2.7.1生成升級包39
2.7.2獲取升級包40
2.7.3OTA升級—Recovery模式41
2.8Android反編譯44
2.9NDKBuild46
2.10第三方ROM的移植48
第3章Android編譯係統50
3.1Makefile入門50
3.2Android編譯係統52
3.2.1Makefile依賴樹的概念53
3.2.2Android編譯係統抽象模型53
3.2.3樹根節點droid54
3.2.4main.mk解析55
3.2.5droidcore節點59
3.2.6dist_files61
3.2.7Android.mk的編寫規則61
3.3JackToolchain64
3.4SDK的編譯過程68
3.4.1envsetup.sh68
3.4.2lunchsdk-eng70
3.4.3makesdk75
3.5Android係統GDB調試85
第2篇Android原理篇
第4章操作係統基礎90
4.1計算機體係結構(ComputerArchitecture)90
4.1.1馮?諾依曼結構90
4.1.2哈佛結構90
4.2什麼是操作係統91
4.3進程間通信的經典實現93
4.3.1共享內存(SharedMemory)94
4.3.2管道(Pipe)95
4.3.3UNIXDomainSocket97
4.3.4RPC(RemoteProcedureCalls)99
4.4同步機製的經典實現100
4.4.1信號量(Semaphore)100
4.4.2Mutex101
4.4.3管程(Monitor)101
4.4.4LinuxFutex102
4.4.5同步範例103
4.5Android中的同步機製104
4.5.1進程間同步——Mutex104
4.5.2條件判斷——Condition105
4.5.3“柵欄、障礙”——Barrier107
4.5.4加解鎖的自動化操作——Autolock108
4.5.5讀寫鎖——ReaderWriterMutex109
4.6操作係統內存管理基礎110
4.6.1虛擬內存(VirtualMemory)110
4.6.2內存保護(MemoryProtection)113
4.6.3內存分配與迴收113
4.6.4進程間通信——mmap114
4.6.5寫時拷貝技術(CopyonWrite)115
4.7Android中的LowMemoryKiller115
4.8Android匿名共享內存(AnonymousSharedMemory)118
4.8.1Ashmem設備118
4.8.2Ashmem應用實例122
4.9JNI127
4.9.1Java函數的本地實現127
4.9.2本地代碼訪問JVM130
4.10Java中的反射機製132
4.11學習Android係統的兩條綫索133
第5章Android進程/綫程和程序內存優化134
5.1Android進程和綫程134
5.2Handler,MessageQueue,Runnable與Looper140
5.3UI主綫程——ActivityThread147
5.4Thread類150
5.4.1Thread類的內部原理150
5.4.2Thread休眠和喚醒151
5.4.3Thread實例155
5.5Android應用程序如何利用CPU的多核處理能力157
5.6Android應用程序的典型啓動流程157
5.7Android程序的內存管理與優化159
5.7.1Android係統對內存使用的限製159
5.7.2Android中的內存泄露與內存監測160
第6章進程間通信—Binder166
6.1智能指針169
6.1.1智能指針的設計理念169
6.1.2強指針sp172
6.1.3弱指針wp173
6.2進程間的數據傳遞載體——Parcel179
6.3Binder驅動與協議187
6.3.1打開Binder驅動——binder_open188
6.3.2binder_mmap189
6.3.3binder_ioctl192
6.4“DNS”服務器——ServiceManager(BinderServer)193
6.4.1ServiceManager的啓動193
6.4.2ServiceManager的構建194
6.4.3獲取ServiceManager服務—設計思考199
6.4.4ServiceManagerProxy203
6.4.5IBinder和BpBinder205
6.4.6ProcessState和IPCThreadState207
6.5Binder客戶端——BinderClient237
6.6Android接口描述語言——AIDL242
6.7匿名BinderServer254
第7章Android啓動過程257
7.1第一個係統進程(init)257
7.1.1init.rc語法257
7.1.2init.rc實例分析260
7.2係統關鍵服務的啓動簡析261
7.2.1Android的“DNS服務器”——ServiceManager261
7.2.2“孕育”新的綫程和進程——Zygote261
7.2.3Android的“係統服務”——SystemServer274
7.2.4Vold和ExternalStorage存儲設備276
7.3多用戶管理282
第8章管理Activity和組件運行狀態的係統進程——ActivityManagerService(AMS)284
8.1AMS功能概述284
8.2管理當前係統中Activity狀態——ActivityStack286
8.3startActivity流程288
8.4完成同一任務的“集閤”——ActivityTask296
8.4.1“後進先齣”——LastIn,FirstOut297
8.4.2管理ActivityTask298
8.5Instrumentation機製300
第9章GUI係統—SurfaceFlinger305
9.1OpenGLES與EGL305
9.2Android的硬件接口——HAL307
9.3Android終端顯示設備的“化身”——Gralloc與Framebuffer309
9.4Android中的本地窗口313
9.4.1FramebufferNativeWindow315
9.4.2應用程序端的本地窗口——Surface321
9.5BufferQueue詳解325
9.5.1BufferQueue的內部原理325
9.5.2BufferQueue中的緩衝區分配328
9.5.3應用程序的典型繪圖流程333
9.5.4應用程序與BufferQueue的關係339
9.6SurfaceFlinger343
9.6.1“黃油計劃”——ProjectButter343
9.6.2SurfaceFlinger的啓動347
9.6.3接口的服務端——Client351
9.7VSync的産生和處理355
9.7.1VSync信號的産生和分發355
9.7.2VSync信號的處理361
9.7.3handleMessageTransaction363
9.7.4“界麵已經過時/無效,需要重新繪製”——handleMessageInvalidate367
9.7.5閤成前的準備工作——preComposition369
9.7.6可見區域——rebuildLayerStacks371
9.7.7為“Composition”搭建環境——setUpHWComposer375
9.7.8doDebugFlashRegions377
9.7.9doComposition377
第10章GUI係統之“窗口管理員”—WMS385
10.1“窗口管理員”——WMS綜述386
10.1.1WMS的啓動388
10.1.2WMS的基礎功能388
10.1.3WMS的工作方式389
10.1.4WMS,AMS與Activity間的聯係390
10.2窗口屬性392
10.2.1窗口類型與層級392
10.2.2窗口策略(WindowPolicy)396
10.2.3窗口屬性(LayoutParams)398
10.3窗口的添加過程400
10.3.1係統窗口的添加過程400
10.3.2Activity窗口的添加過程409
10.3.3窗口添加實例412
10.4Surface管理416
10.4.1Surface申請流程(relayout)416
10.4.2Surface的跨進程傳遞420
10.4.3Surface的業務操作422
10.5performLayoutAndPlaceSurfacesLockedInner423
10.6窗口大小的計算過程424
10.7啓動窗口的添加與銷毀433
10.7.1啓動窗口的添加433
10.7.2啓動窗口的銷毀437
10.8窗口動畫438
10.8.1窗口動畫類型439
10.8.2動畫流程跟蹤——WindowStateAnimator440
10.8.3AppWindowAnimator444
10.8.4動畫的執行過程446
第11章讓你的界麵炫彩起來的GUI係統—View體係452
第12章“問渠哪得清如許,為有源頭活水來”—InputManagerService與輸入事件514
12.1事件的分類514
12.2事件的投遞流程517
12.2.1InputManagerService518
12.2.2InputReaderThread519
12.2.3InputDispatcherThread519
12.2.4ViewRootImpl對事件的派發523
12.3事件注入524
第13章應用不再同質化—音頻係統526
13.1音頻基礎527
13.2音頻框架532
13.3音頻係統的核心——Audio-Flinger538
13.4策略的製定者——Audio-PolicyService553
13.5音頻流的迴放——AudioTrack560
13.6音頻數據流572
13.7音量控製584
13.8音頻係統的上層建築588
13.9Android支持的媒體格式600
13.10ID3信息簡述602
13.11Android多媒體文件管理606
第3篇應用原理篇
第14章Intent的匹配規則616
第15章APK應用程序的資源適配628
第16章Android字符編碼格式650
第17章Android和OpenGLES660
第18章“係統的UI”——SystemUI685
第19章Android常用的工具
第20章Android應用程序的編譯和打包707
第21章Android虛擬機725
21.1Android虛擬機基礎知識725
21.1.1Java虛擬機核心概念725
21.1.2LLVM編譯器框架734
21.1.3Android中的經典垃圾迴收算法736
21.1.4Art和Dalvik之爭738
21.1.5Art虛擬機整體框架741
21.1.6Android應用程序與虛擬機742
21.1.7ProcedureCallStandardforArmArchitecture(過程調用標準)744
21.1.8C++11標準中的新特性746
21.2Android虛擬機核心文件格式—Dex字節碼749
21.3Android虛擬機核心文件格式—可執行文件的基石ELF756
21.3.1ELF文件格式756
21.3.2Linux平颱下ELF文件的加載和動態鏈接過程764
21.3.3AndroidLinker和動態鏈接庫771
21.3.4SignalHandler和FaultManager782
21.4Android虛擬機核心文件格式——“主宰者”OAT786
21.4.1OAT文件格式解析786
21.4.2OAT的兩個編譯時機793
21.5Android虛擬機的典型啓動流程806
21.6堆管理器和堆空間釋義815
21.7Android虛擬機中的綫程管理823
21.7.1Java綫程的創建過程823
21.7.2綫程的掛起過程827
21.8Art虛擬機中的代碼執行方式綜述829
21.9Art虛擬機的“中樞係統”——執行引擎之Interpreter836
21.10Art虛擬機的“中樞係統”——執行引擎之JIT839
21.10.1JIT重齣江湖的契機839
21.10.2AndroidN版本中JIT的設計目標及策略840
21.10.3ProfileGuidedCompilation(追蹤技術)842
21.10.4AOTCompilationDaemon843
21.11Art虛擬機的“中樞係統”——執行引擎之本地代碼844
21.12Androidx86版本兼容ARM二進製代碼——NativeBridge864
21.13Android應用程序調試原理解析871
21.13.1Java代碼調試與JDWP協議872
21.13.2Native代碼調試879
21.13.3利用GDB調試AndroidArt虛擬機885
第22章Android安全機製透析887
22.1AndroidSecurity綜述887
22.2SELinux889
22.2.1DAC889
22.2.2MAC890
22.2.3基於MAC的SELinux890
22.3Android係統安全保護的三重利劍892
22.3.1第一劍:Permission機製893
22.3.2加強劍:DAC(UGO)保護896
22.3.3終極劍:SEAndroid898
22.4SEAndroid剖析899
22.4.1SEAndroid的頂層模型899
22.4.2SEAndroid相關的核心源碼900
22.4.3SEAndroid標簽和規則901
22.4.4如何在Android係統中自定義SEAndroid903
22.4.5TE文件的語法規則905
22.4.6SEAndroid中的核心主體—init進程907
22.4.7SEAndroid中的客體912
22.5Android設備Root簡析913
22.6APK的加固保護分析916
第4篇Android係統工具
第23章IDE和Gradle922
23.1Gradle的核心要點922
23.1.1Groovy與Gradle923
23.1.2Gradle的生命周期926
23.2Gradle的Console語法927
23.3GradleWrapper和Cache929
23.4AndroidStudio和Gradle931
23.4.1Gradle插件基礎知識931
23.4.2AndroidStudio中的Gradle編譯腳本932
第24章軟件版本管理937
24.1版本管理簡述937
24.2Git的安裝937
24.2.1Linux環境下安裝Git938
24.2.2Windows環境下安裝Git939
24.3Git的使用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.4Git原理簡析9
深入理解Android內核設計思想 第2版(上下冊) 下載 mobi epub pdf txt 電子書