深入剖析Android系统

出版社:杨长刚 电子工业出版社 (2013-01出版)
出版日期:2013-1
ISBN:9787121193743
作者:杨长刚
页数:449页

章节摘录

版权页:   插图:  

前言

为了让读者可以对Android系统进行“有血有肉”的感知,而不是停留在抽象的原理和概念之上,本书对Android的代码进行了分析,进而“提炼”出Android的全貌。又因为Android有着海量代码,故只分析了Android系统的一些主要模块和类,不对各个细节进行全面分析,这样可以在有限的篇幅中让读者了解Android的内部结构和运行机制,同时避免让读者陷入海量代码的云雾中而不得要领。由于Android系统升级较快,有些代码变动很大。对设计上有重大改变的一些模块,笔者也兼顾提及了Android的2.x版本和4.0版本中的设计,甚至个别模块在未来的版本中的可能的演进方向。现将本书各章内容介绍如下:第1章介绍了智能指针。在Android的native层的C++代码中,存在着大量形如sp和wp模板的运用,它们都是智能指针模板。通过本章,读者将掌握native层的类的对象的生命周期。第2章介绍了Android中消息队列和线程处理机制。这涉及native层的Looper和Java层的Looper、Handler及Message等,让读者更好地理解Android中的代码执行流程场景和所在的线程上下文。第3章详细介绍了Android中最重要的一种机制Binder IPC及其应用。在Android中,一个简单的功能或上层API的一个简单调用,往往需要跨越多个进程。一个子系统的功能也往往由各个进程中的模块来完成,这就要用到Android的核心机制Binder IPC。Binder IPC不仅位于native代码中,也大量存在于Java层的代码中,因此以Java层的播放服务(IMediaPlaybackService)和电话状态监听器(PhoneStateListener)为例,详细分析了多个进程之间的相互调用,尤其是后一个例子,双向跨越了多个进程。另外,为了避免大内存数据传输,借助于Binder IPC机制,Android实现了大内存块的跨进程共享。第4章介绍了HAL硬件抽象层,让读者了解到Android的框架系统如何利用其下面的抽象硬件。第5章介绍了Android的启动过程。内容涉及Android初始化语言,Linux系统的第一个进程init的启动过程,以及init进程如何解析用Android初始化语言编写的.rc脚本文件。最后简要介绍了Android系统中的服务所驻留的宿主进程system_server的启动过程。第6章介绍了Android输入系统,让读者对输入系统的执行过程有一定的了解。第7章介绍了Android系统中的大容量存储(MassStorage)系统,让读者熟悉Android存储设备的管理机制。第8章介绍了Android中的传感器(Sensor)系统,让读者对传感器有所了解。第9章介绍了RIL,包括C语言实现的RIL和与其通信的RILJ(Java类RIL)。通过阅读本章,读者将了解Java层上传消息和下送命令的机制,它是Java层的电话功能通道。第10章介绍了Android系统中的phone进程。首先简单介绍了层次状态机,有助于读者了解层次状态机的工作机制,以便于分析使用层次状态机的代码,如PS域的数据连接、Wi-Fi和蓝牙的连接状态等。接着,对Android电话功能的实现进行了介绍。第11章对Android中的Graphic系统进行了分析,其中包括SurfaceFlinger中新引入的VSync机制。第12章介绍了Android中的OpenGL ES软件层次栈,让读者了解OpenGL ES的层次调用关系,以及如何通过钩子(hook)将库中的API关联起来。第13章介绍了Android的多媒体系统,主要介绍了播放和录制的过程。通过阅读本章,读者将了解Java的SDK API层如何调用native层的Service服务,以及Service如何向应用程序发送消息通知。最后,介绍了Android中的Camera。让读者了解硬件抽象层的Camera如何向Java层发送采样数据。第14章介绍了Audio系统的播放和录音过程,让读者了解Android中的应用程序进程和AudioFlinger之间的数据传输关系。最后,介绍了AudioFlinger的工作机理、音效和音频策略服务。通过阅读本章,读者将熟悉Android中的音频系统的工作过程。第15章介绍了Android的多媒体框架Stagefright,并提及Android版本演进过程中的不同设计理念下的视频帧的渲染输出原理。通过阅读本章,读者将进一步熟悉多媒体系统的处理过程。第16章介绍了OMXCodec。这将有助于读者了解Stagefright如何使用OMXCodec进行编解码,以及OMXCodec如何使用平台厂家实现的OMX插件。第17章介绍了Android的GPS系统,让读者了解GPS部分的工作机制。第18章介绍了Android中的NFC实现,让读者了解Android中的NFC的工作机制。第19章介绍了Android对USB外设的处理过程。第20章简要介绍了Android中的蓝牙和Wi-Fi的系统架构。第21章介绍了用于生成tombstone调试文件的Debuggerd守护进程。通过阅读本章,读者将获悉Android如何记录C/C++代码崩溃时的场景信息,以让开发者获取足够多的调试信息。为了表示对他人劳动成果的尊重和方便读者进行延伸阅读,本书在页脚注释中给出了笔者参阅的文章、文档和书籍的网络链接和说明。对于侧重点不同的文章或书籍,笔者也给读者做了阅读推荐。由于笔者时间、精力和能力所限,书中涉及的内容定会存在错误之处,还请相关专家及读者批评批正,不胜感激。在阅读本书前,读者需要具备C、C++、Java等编程语言和Android的基础知识。读者最好对Linux系统、Linux命令行和Shell脚本等有基本了解。若读者对设计模式、Linux系统编程(推荐伽玛等的《设计模式——可复用面向对象软件的基础》,史蒂文斯和拉戈的《UNIX环境高级编程》)有所了解,再拥有书中相关子系统的背景知识,那么阅读本书和理解Android系统将是件十分轻松的事。

名人推荐

面对Android的海量代码,我们的工程师同事们刚开始总不知如何下手。有了本书,它将引导大家进入Android的内部代码世界。——诚迈科技(南京)有限公司 设备软件事业部经理 储刘火本书汇聚作者多年的Android研发经验, 在作者的引导下, 您会逐渐理清Android的内部运行方式,作者在关键部分的注解,为您阅读源代码扫清障碍。——联发博动(北京)有限公司 高级工程师 潘鹏在Android与iOS分庭抗礼的移动互联时代,开放的Android几乎成为一种公众语言,掌握它可以使我们与Google、与厂商平等对话,发出自己的声音,让我们在互联终端设备领域驰骋无羁。——Nvidia 客户经理 申力茜这是一本让你能贯穿Android手机系统的书,它涵盖了从中间框架到上层应用的大部分内容,是一本完全适合参与Android开发的软件工程师参考阅读的书。作者以他在Android系统上坚实的背景知识和工作经验,为我们讲述了一个复杂系统的运行过程,引领我们快速进入Android的内部世界。——Broadcom 高级应用工程师 王文龙我是一个Android应用开发者,疯狂地热爱Android底层,我希望更深地了解Android SDK API背后的东西,以便我能更透彻地理解Android的官方文档,我还希望利用Android中某些最新特性去开发更酷功能更强的程序。这本书将给我很大的帮助。——58同城 Android高级开发工程师 章发明从事Android相关工作多年,读这本书仍然对我有许多启迪,尤其是其内部结构和运行机制,我十分高兴能读到这本书!——联想公司 高级系统工程师 朱庆友

内容概要

杨长刚,2005年春毕业于西南交通大学计算机应用技术专业,获硕士学位;后进入手机行业从事Linux手机软件开发工作。目前在一家欧美企业从事Android方面的技术工作。作者官方博客:http://www.redwolf-blog.com/

书籍目录

第1章  智能指针
1
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系统》基于Google发布的Jelly Bean原始代码,讲述Android系统的内部静态结构关系和内部运行机制,为你呈现原汁原味的Android代码分析大餐!

作者简介

《深入剖析Android系统》以Android Jelly Bean(4.1)的代码为蓝本,对Android的部分关键代码进行了注释分析,并辅以大量插图,讲述了Android大部分子系统中的模块和类的静态结构,让读者对Android系统的内部静态结构有着“类”粒度这一层级上的认识和了解。同时,也对关键类和函数的代码调用流程、运行时刻所位于的进程和线程上下文等动态运行场景进行了分析讲述,让读者深刻理解Android系统内部是如何运行的。《深入剖析Android系统》直接对Source Insight进行截图,保留了代码的原始行号、英文注释等信息并进行了高亮显示,方便读者阅读;代码中同时添加了作者所做的中文注释说明。


 深入剖析Android系统下载 更多精彩书评



发布书评

 
 


精彩书评 (总计1条)

  •     面对Android的海量代码,我们的工程师同事们刚开始总不知如何下手。有了本书,它将引导大家进入Android的内部代码世界。——诚迈科技(南京)有限公司 设备软件事业部经理 储刘火本书汇聚作者多年的Android研发经验, 在作者的引导下, 您会逐渐理清Android的内部运行方式,作者在关键部分的注解,为您阅读源代码扫清障碍。——联发博动(北京)有限公司 高级工程师 潘鹏在Android与iOS分庭抗礼的移动互联时代,开放的Android几乎成为一种公众语言,掌握它可以使我们与Google、与厂商平等对话,发出自己的声音,让我们在互联终端设备领域驰骋无羁。——Nvidia 客户经理 申力茜这是一本让你能贯穿Android手机系统的书,它涵盖了从中间框架到上层应用的大部分内容,是一本完全适合参与Android开发的软件工程师参考阅读的书。作者以他在Android系统上坚实的背景知识和工作经验,为我们讲述了一个复杂系统的运行过程,引领我们快速进入Android的内部世界。——Broadcom 高级应用工程师 王文龙我是一个Android应用开发者,疯狂地热爱Android底层,我希望更深地了解Android SDK API背后的东西,以便我能更透彻地理解Android的官方文档,我还希望利用Android中某些最新特性去开发更酷功能更强的程序。这本书将给我很大的帮助。——58同城 Android高级开发工程师 章发明从事Android相关工作多年,读这本书仍然对我有许多启迪,尤其是其内部结构和运行机制,我十分高兴能读到这本书! ——联想公司 高级系统工程师 朱庆友

精彩短评 (总计4条)

  •     书还没有仔细看,但里面的程序排版实在太差了(使用的是点阵字体,或者是屏幕的硬拷贝)
  •     这本书只有标出4.1新鲜了点,其实书里就是贴4.1的代码,写的太肤浅,没深度。
  •     全书一般以上都是 源代码,太狠了剖析的不够深入
  •     有难度
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024