深入剖析Android系统

深入剖析Android系统(基于Google发布的Jelly Bean原始代码,讲述Android系统的内部静态结构关系和内部运行机制,为你呈现原汁原味的Android代码分析大餐!

杨长刚

ISBN 978-7-121-19374-3

20131月出版

定价:59.00

464

16

编辑推荐

基于Google发布的Jelly Bean原始代码,讲述Android系统的内部静态结构关系和内部运行机制,为你呈现原汁原味的Android代码分析大餐!

同类书推荐:

《Android内核剖析》

《Android系统源代码情景分析》

内容提要

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

作者简介

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

媒体评论

面对Android的海量代码,我们的工程师同事们刚开始总不知如何下手。有了本书,它将引导大家进入Android的内部代码世界。

     ——诚迈科技(南京)有限公司 设备软件事业部经理  储刘火

 

    本书汇聚作者多年的Android研发经验, 在作者的引导下, 您会逐渐理清Android的内部运行方式,作者在关键部分的注解,为您阅读源代码扫清障碍。

    ——联发博动(北京)有限公司 高级工程师 潘鹏

在Android与iOS分庭抗礼的移动互联时代,开放的Android几乎成为一种公众语言,掌握它可以使我们与Google、与厂商平等对话,发出自己的声音,让我们在互联终端设备领域驰骋无羁。

——Nvidia 客户经理 申力茜

 

这是一本让你能贯穿Android手机系统的书,它涵盖了从中间框架到上层应用的大部分内容,是一本完全适合参与Android开发的软件工程师参考阅读的书。作者以他在Android系统上坚实的背景知识和工作经验,为我们讲述了一个复杂系统的运行过程,引领我们快速进入Android的内部世界。

——Broadcom  高级应用工程师 王文龙

 

我是一个Android应用开发者,疯狂地热爱Android底层,我希望更深地了解Android SDK API背后的东西,以便我能更透彻地理解Android的官方文档,我还希望利用Android中某些最新特性去开发更酷功能更强的程序。这本书将给我很大的帮助。

——58同城  Android高级开发工程师 章发明

从事Android相关工作多年,读这本书仍然对我有许多启迪,尤其是其内部结构和运行机制,我十分高兴能读到这本书! 

——联想公司   高级系统工程师   朱庆友

前言

为了让读者可以对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系统将是件十分轻松的事。

原文地址:https://www.cnblogs.com/broadview/p/2875135.html