具体描述
《深入剖析Android系统》以Android Jelly Bean(4.1)的代码为蓝本,对Android的部分关键代码进行了注释分析,并辅以大量插图,讲述了Android大部分子系统中的模块和类的静态结构,让读者对Android系统的内部静态结构有着“类”粒度这一层级上的认识和了解。同时,也对关键类和函数的代码调用流程、运行时刻所位于的进程和线程上下文等动态运行场景进行了分析讲述,让读者深刻理解Android系统内部是如何运行的。《深入剖析Android系统》直接对Source Insight进行截图,保留了代码的原始行号、英文注释等信息并进行了高亮显示,方便读者阅读;代码中同时添加了作者所做的中文注释说明。
作者简介
杨长刚,2005年春毕业于西南交通大学计算机应用技术专业,获硕士学位;后进入手机行业从事Linux手机软件开发工作。目前在一家欧美企业从事Android方面的技术工作。作者官方博客:http://www.redwolf-blog.com/
目录信息
1.1 智能指针概述 1
1.2 引用计数基类RefBase 2
1.3 轻量级引用计数LightRefBase 3
1.4 强指针 3
1.4.1 强指针变量的初始化与生命周期 3
1.4.2 赋值操作与引用计数变化 5
1.5 弱指针 5
第2章 消息队列与线程处理 7
2.1 消息队列处理模型的设计 7
2.2 消息队列与线程处理的Java实现 9
2.2.1 Thread/Runnable 9
2.2.2 Message 10
2.2.3 MessageQueue概述 11
2.2.4 Handler 11
2.2.5 Looper 12
2.2.6 再论Handler 15
2.2.7 对同步消息的支持 16
2.3 native层的Looper与消息队列处理 19
2.3.1 Looper中的睡眠等待与唤醒机制 19
2.3.2 Looper对文件描述符的监控与处理 22
2.3.3 Looper中的消息队列处理机制 25
2.3.4 Looper与线程执行上下文 27
第3章 Binder IPC及其应用 29
3.1 Binder IPC 29
3.1.1 Binder IPC与系统服务 29
3.1.2 Binder类结构与调用关系 31
3.1.3 模板函数interface_cast的背后 33
3.1.4 例子AudioPolicyService 37
3.2 Java层对Binder的封装 40
3.2.1 例子IMediaPlaybackService 42
3.2.2 例子PhoneStateListener 47
3.3 大内存块的跨进程共享 52
3.3.1 概述 52
3.3.2 调用接口 53
3.3.3 设备空间的映射 55
3.3.4 Server侧的处理 57
第4章 HAL硬件抽象层 59
4.1 HAL概述 59
4.2 硬件模块库的通用写法 60
4.3 硬件模块库的装载与解析 63
4.4 例子Lights 65
4.5 例子Camera 68
4.6 例子Power和Vibrator 69
第5章 Android的启动过程 71
5.1 Android初始化语言及解析 71
5.1.1 Action 71
5.1.2 触发器trigger 72
5.1.3 命令Command 72
5.1.4 服务Service 74
5.1.5 .rc文件的解析 76
5.2 BootChart 82
5.3 ueventd守护进程 82
5.4 init进程的启动过程 87
5.5 init.rc文件中的服务进程 93
5.6 system_server进程 95
5.6.1 app_process程序 95
5.6.2 system_server进程 96
第6章 输入系统 99
6.1 输入系统概述 99
6.2 读线程 101
6.2.1 EventHub 101
6.2.2 InputReader 106
6.2.3 InputDevice 108
6.2.4 InputMapper 108
6.2.5 QueuedInputListener 111
6.3 分发线程 112
6.3.1 InputDispatcher 112
6.3.2 InputChannel 116
6.4 输入系统的开启 118
第7章 MassStorage 121
7.1 MassStorage概述 121
7.2 MountService 122
7.3 库libsysutils.so 123
7.3.1 SocketListener 123
7.3.2 FrameworkListener 126
7.3.3 NetlinkListener 127
7.4 守护进程vold 128
7.4.1 NetlinkManager 128
7.4.2 CommandListener 131
7.4.3 vold的main函数 135
第8章 Sensor 137
8.1 Sensor概述 137
8.2 SDK API概述 138
8.3 Sensor管理器 139
8.3.1 Sensor采样数据的获取与处理 141
8.3.2 SensorEventQueue 146
8.4 SensorService 147
8.4.1 逻辑传感器 149
8.4.2 物理传感器 150
8.4.3 Sensor HAL 150
第9章 RIL 153
9.1 RIL概述 153
9.2 rild守护进程 154
9.3 事件处理与分发线程 158
9.3.1 分发线程中的事件处理 158
9.3.2 RIL请求的接收与处理 161
9.3.3 RIL响应的回送 165
9.4 radiooptions工具程序 169
9.5 RILJ 169
9.5.1 RILJ概述 169
9.5.2 RILRequest的发送过程 171
9.5.3 Response的处理过程 174
第10章 com.android.phone进程 178
10.1 层次状态机StateMachine 178
10.2 GSMPhone 179
10.3 GsmCallTracker 184
10.3.1 GsmDataConnectionTracker 186
10.3.2 GsmServiceStateTracker 188
10.3.3 DefaultPhoneNotifier 188
10.3.4 其他 189
10.4 进程com.android.phone 190
第11章 Graphic 196
11.1 Graphic概述 196
11.2 Java层简介 197
11.2.1 SurfaceSession 198
11.2.2 Surface 198
11.2.3 SurfaceView 199
11.2.4 TextureView 200
11.3 JNI层简介 200
11.4 SKIA库简介 201
11.5 库libgui.so 202
11.5.1 概述 202
11.5.2 ComposerService 204
11.5.3 共享控制块surface_flinger_cblk_t 204
11.5.4 ISurfaceComposer 205
11.5.5 ScreenshotClient 207
11.5.6 SurfaceComposerClient 207
11.5.7 Surface 210
11.5.8 SurfaceControl 211
11.5.9 绘图操作的前后过程 213
11.5.10 SurfaceTexture Client 215
11.6 SurfaceFlinger进程 222
11.6.1 图层 223
11.6.2 DisplayHardware简介 228
11.6.3 HWComposer简介 228
11.6.4 VSync 229
11.7 库libui.so简介 247
11.7.1 GraphicBuffer 247
11.7.2 FramebufferNativeWindow 248
11.8 RenderScript简介 249
第12章 OpenGL ES软件层次栈 250
12.1 Android中的OpenGL ES简介 250
12.2 Android中OpenGL软件层次栈 251
12.3 包裹库与hook钩子 253
12.3.1 libGLESv1_CM.so包裹库 253
12.3.2 libGLESv2包裹库 257
12.3.3 libEGL包裹库 257
12.3.4 结构体egl_t和gl_hooks_t钩子 258
12.4 OpenGL实现库的加载和解析 260
12.4.1 加载和解析的发起 260
12.4.2 库装载器Loader 261
12.5 libGLES_android库和ETC1简介 265
第13章 Multimedia 267
13.1 Multimedia概述 267
13.2 API类简述 268
13.3 多媒体播放(playback) 270
13.3.1 播放流程 273
13.3.2 来自server侧的消息事件通知 277
13.4 多媒体录制(Recording) 279
13.5 元数据(MetaData)获取 281
13.6 Camera 284
13.6.1 Camera概述 284
13.6.2 CameraHardwareInterface与HAL层 287
13.7 Camera事件通知机制 289
第14章 Audio 293
14.1 Audio概述 293
14.2 Audio播放AudioTrack 295
14.2.1 共享控制块audio_track_cblk_t 296
14.2.2 数据的写入 298
14.2.3 事件的回送及处理 299
14.3 Auido录音Recording 301
14.3.1 录音的开始过程 303
14.3.2 录音的停止过程 306
14.4 AudioFlinger 307
14.4.1 AudioFlinger概述 307
14.4.2 Track相关类概述 308
14.4.3 AudioFlinger中的线程 311
14.5 音效AudioEffect 319
14.5.1 EffectHandle 320
14.5.2 音效引擎的封装EffectModule 320
14.5.3 音效链EffectChain 321
14.5.4 音效处理引擎接口effect_interface_s 322
14.5.5 音效引擎库audio_effect_library_s 323
14.5.6 音效引擎工厂EffectFactory 324
14.6 音频策略服务AudioPolicyService 326
第15章 Stagefright 331
15.1 Stagefright概述 331
15.2 节点子类 332
15.3 StagefrightPlayer 334
15.4 视频帧的渲染输出AwesomeRenderer 343
15.4.1 Renderer的创建 344
15.4.2 AwesomeLocalRenderer 345
15.4.3 AwesomeNativeWindowRenderer 347
15.5 AudioPlayer 347
15.6 A/V同步简介 350
15.7 StagefrightRecorder 351
第16章 OMXCodec 356
16.1 OpenMAX概述 356
16.1.1 组件(Component)与端口(Port) 357
16.1.2 组件的初始化 358
16.1.3 数据处理 359
16.1.4 组件命令OMX_Command 360
16.2 OMXCodec类 362
16.2.1 组件的创建 362
16.2.2 缓冲区的分配 364
16.2.3 数据处理流程 370
16.3 IOMX 374
16.4 OMX插件 376
16.4.1 平台厂家插件 377
16.4.2 软件OMX插件SoftOMXPlugin 379
16.5 组件消息的上报 383
第17章 GPS 386
17.1 GPS 简述 386
17.2 SDK API概述 386
17.3 LocationManagerService 388
17.4 GpsLocationProvider 390
17.4.1 初始化代码分析 391
17.4.2 消息处理与回调结构体 392
17.4.3 例子:位置信息的上报 394
17.5 HAL层简介 396
17.5.1 GPS的位置信息 396
17.5.2 GPS卫星信息 397
17.5.3 GPS回调函数 397
第18章 NFC 399
18.1 NFC概述 399
18.2 SDK API概述 400
18.2.1 NfcAdapter 401
18.2.2 NdefMessage 401
18.2.3 NFC Tag 402
18.2.4 NFC-extras 403
18.3 进程com.android.nfc 403
18.3.1 P2pEventManager 403
18.3.2 P2pLinkManager 405
18.3.3 Bluetooth Handover 408
18.3.4 SNEP 409
18.3.5 NDEF Push 413
18.3.6 其他类简介 414
18.4 JNI层 415
第19章 USB 418
19.1 SDK API概述 418
19.2 UsbService 420
19.2.1 UsbDeviceManager 421
19.2.2 UsbHostManager 422
19.3 uevent 424
第20章 Bluetooth和Wi-Fi简析 429
20.1 Bluetooth 429
20.1.1 Bluetooth概述 429
20.1.2 SDK API概述 430
20.1.3 Bluetooth服务 432
20.1.4 JNI层 433
20.2 Wi-Fi 436
20.2.1 Wi-Fi概述 436
20.2.2 SDK API概述 436
20.2.3 JNI和HAL层 439
20.2.4 WPA_supplicant 440
第21章 Debuggerd 441
21.1 预备知识 441
21.1.1 ptrace调用 441
21.1.2 waitpid 442
21.2 debuggerd守护进程 442
后记 450
· · · · · · (收起)
读后感
面对Android的海量代码,我们的工程师同事们刚开始总不知如何下手。有了本书,它将引导大家进入Android的内部代码世界。 ——诚迈科技(南京)有限公司 设备软件事业部经理 储刘火 本书汇聚作者多年的Android研发经验, 在作者的引导下, 您会逐渐理清Android的内部...
面对Android的海量代码,我们的工程师同事们刚开始总不知如何下手。有了本书,它将引导大家进入Android的内部代码世界。 ——诚迈科技(南京)有限公司 设备软件事业部经理 储刘火 本书汇聚作者多年的Android研发经验, 在作者的引导下, 您会逐渐理清Android的内部...
面对Android的海量代码,我们的工程师同事们刚开始总不知如何下手。有了本书,它将引导大家进入Android的内部代码世界。 ——诚迈科技(南京)有限公司 设备软件事业部经理 储刘火 本书汇聚作者多年的Android研发经验, 在作者的引导下, 您会逐渐理清Android的内部...
面对Android的海量代码,我们的工程师同事们刚开始总不知如何下手。有了本书,它将引导大家进入Android的内部代码世界。 ——诚迈科技(南京)有限公司 设备软件事业部经理 储刘火 本书汇聚作者多年的Android研发经验, 在作者的引导下, 您会逐渐理清Android的内部...
面对Android的海量代码,我们的工程师同事们刚开始总不知如何下手。有了本书,它将引导大家进入Android的内部代码世界。 ——诚迈科技(南京)有限公司 设备软件事业部经理 储刘火 本书汇聚作者多年的Android研发经验, 在作者的引导下, 您会逐渐理清Android的内部...
用户评价
如果你对操作系统内核的调度器设计充满好奇,那么这本书绝对是你的不二之选。它没有停留在Linux CFS(完全公平调度器)的基本框架介绍上,而是深挖了其背后的红黑树数据结构如何高效地管理任务优先级和虚拟运行时(vruntime)。作者对实时操作系统(RTOS)的调度策略,比如固定优先级抢占和时间片轮转,进行了非常深入的横向对比,特别是针对嵌入式系统中资源受限的特殊场景,给出了详尽的优化建议。有一段关于上下文切换开销的分析,让我印象深刻:它通过实际的内核追踪数据,量化了寄存器保存、TLB刷新等操作对系统延迟的累积影响,这种实证性的研究方法极大地增强了说服力。对于想要参与内核开发或者进行底层性能优化的技术人员来说,这本书就像是一份保姆级的调试指南,让你明白为什么某些调度决策会导致系统卡顿,以及如何从代码层面去干预和改进。
我最近一直在研究分布式计算的理论基础,而这本关于高级网络协议栈的书,简直是为我量身定做的。它没有陷入对TCP/IP协议族表面功能的简单罗列,而是着重探讨了在高并发、高延迟网络环境下,拥塞控制算法(如CUBIC、BBR)的数学模型和实际效果对比。作者对BBR算法的推导过程极为详尽,从带宽估计到往返时间(RTT)的精确测量,每一步的公式和背后的设计哲学都阐述得非常清晰。更令人惊喜的是,书中还穿插了大量关于网络虚拟化和SDN(软件定义网络)的最新进展,特别是DPDK在用户空间数据包处理上的性能优势,这本书将其与传统的内核态处理进行了细致的性能剖析和瓶颈分析。阅读过程中,我不断地用笔在空白处进行计算和绘图,试图跟上作者的逻辑链条。这是一本需要反复咀嚼才能真正品出味道的书,它强迫你去思考,在海量数据包传输的背后,那些毫秒甚至微秒级的决策是如何决定整个系统的命运的。
这本关于计算机体系结构的书,实在是令人拍案叫绝。作者以一种近乎“考古学家”的严谨态度,将现代处理器的内部构造剖析得淋漓尽致。从流水线设计中的分支预测机制,到缓存一致性协议在多核系统中的复杂博弈,每一个技术细节都被图文并茂地展现出来。特别是对乱序执行单元(OoOE)的深入解读,不再是教科书上那种蜻蜓点水的描述,而是真正走进了那些寄存器和调度器的核心逻辑。我记得有一章专门讲了指令级并行(ILP)的挖掘过程,书中用了一个非常巧妙的比喻,把CPU比作一个高速运转的工厂,不同的工序如何被精心安排以达到吞吐量的最大化,这个比喻瞬间打通了我之前理解上的所有壁垒。对于任何想从“使用”层面跃升到“设计”层面的工程师来说,这本书无疑是提供了一把通往底层原理的万能钥匙,它不仅仅是知识的堆砌,更是思维方式的重塑。读完后,我对性能调优的理解达到了一个新的高度,原来性能瓶颈往往藏在那些最不经意的数据流转和内存访问延迟之中。
我是一名热衷于图形学渲染的程序员,对于这本关于几何算法和光线追踪的书籍,我只能用“震撼”来形容。它没有过分强调OpenGL或DirectX的API调用,而是将重点完全放在了如何高效地构建和查询空间数据结构上。特别是对于BVH(包围盒层次结构)的构建算法,书中不仅介绍了AABB的计算,还详细对比了SAH(表面积启发式)在平衡树深度和节点交叉成本上的优化策略,并且附带了伪代码,使得读者可以立即着手实现。此外,书中关于光线与复杂曲面的交点计算,也从经典的莫勒-特龙(Möller-Trumbore)算法,延伸到了更高级的隐式曲面求交技术。这种由浅入深、层层递进的结构,让读者能够扎实地掌握渲染管线背后的数学和几何本质。这本书不仅是知识的传授,更是一种对视觉逼真度极限的探索精神的传递,读完后感觉自己看待每一个渲染帧的方式都变得不一样了。
这本书在数据库的事务隔离级别和并发控制方面,简直达到了教科书的高度,但又充满了实战的智慧。它不仅仅讲解了悲观锁和乐观锁的原理,更是详细对比了MVCC(多版本并发控制)在PostgreSQL和MySQL InnoDB中的具体实现差异。作者对快照隔离(Snapshot Isolation)在“写入偏差”(Write Skew)问题上的局限性进行了深刻的剖析,并进一步引出了更强隔离级别如可串行化(Serializable)的性能权衡。最精彩的部分在于,书中用一系列精心设计的SQL片段和并发执行序列,直观地展示了不同隔离级别下数据不一致现象的产生过程,这比单纯的理论描述有效得多。读完之后,我对如何根据业务场景选择最优的事务隔离级别有了非常清晰的判断标准,不再是盲目地追求最高隔离度。这本书完美地平衡了理论的严谨性和工程实践的指导性,让复杂的问题变得可以被量化和控制。
有难度
有难度
有难度
有难度
有难度