编辑推荐
基于Android SDK zui新版本 全面剖析了进程/线程、内存管理、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原理简析945
- 24.4.1分布式版本系统的特点946
- 24.4.2安全散列算法—SHA-1947
- 24.4.34个重要对象948
- 24.4.4三个区域953
- 24.4.5分支的概念与实例954
- 第25章系统调试辅助工具958
- 25.1万能模拟器——Emulator958
- 25.1.1QEMU958
- 25.1.2Android工程中的QEMU963
- 25.1.3模拟器控制台(EmulatorConsole)966
- 25.1.4实例:为Android模拟器添加串口功能969
- 25.2此Android非彼Android970
- 25.3快速建立与模拟器或真机的通信渠道——ADB972
- 25.3.1ADB的使用方法972
- 25.3.2ADB的组成元素975
- 25.3.3ADB源代码解析976
- 25.3.4ADBProtocol981
- 25.4SDKLayoutlib984
- 25.5TraceView和Dmtracedump985
- 25.6Systrace987
- 25.7代码覆盖率统计992
- 25.8模拟GPS位置995