深入剖析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系统将是件十分轻松的事。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微博上的网红,为什么更能红得发紫?

“网红”是最近非常热潮的互联网现象。在微博上,各种各样的网红不仅活跃了粉丝群体(微博月活跃用户增至2.61亿),也为微博增添了互动热度(微博一季度微博日均视频播放量达4.7亿次,同比增长489%,比…

TotoiseSVN-小乌龟的使用方法总结

原文转自 http://www.cnblogs.com/xilentz/archive/2010/05/06/1728945.html 收藏起来用的时候比较方便 TotoiseSVN的基本使用方法在 项目管理实践教程一、工欲善其事,必先利其器【Basic Tools】中,我已经讲解了怎样安装TortoiseSVN。在上面的讲解中已经…

WPF DataGrid 如何将被选中行带到视野中

WPF DataGrid 如何将被选中行带到视野中目录前言准备工作方法一方法二总结独立观察员 2021 年 12 月 11 日前言在 WPF 开发中,显示表格一般使用 DataGrid 控件,而且我们一般会依据用户的选中行的操作来执行一些逻辑,这种情况,选中…

一对经典的时间获取客户/服务器程序

前言 本文通过一对经典的时间获取客户/服务器程序&#xff0c;展现了Linux网络编程的大体框架&#xff0c;为以后更深入的学习打下基础。 客户服务器模式网络编程的大体框架 客户端代码 1 #include <stdio.h>2 // 下头文件包含socket(), bind()等套接字通信必须的函数。3…

博古通今的孩子是怎么养成的?答案就在这本影响了无数中国人思想的奇书里……

▲ 点击查看“三十六计走为上计”这句话&#xff0c;相信是大家从小听到大的俗语了。除此之外&#xff0c;还有“抛砖引玉”、“顺手牵羊”、“借刀杀人”、“擒贼先擒王”等都出自经典兵书《三十六计》。《三十六计》是中国古代最伟大的兵法谋略书之一&#xff0c;集智慧韬略、…

jmeter(2)录制脚本

Jmeter脚本是以JMX格式为主 Jmeter也是支持录制的&#xff0c;支持第三方录制方式和代理录制方式。 1、第三方录制主要是通过badboy来录制&#xff0c;录制后另存为jmx格式即可。 2、Jmeter也有自己的代理&#xff0c;录制脚本前&#xff0c;我们只要启动好代理&#xff0c;手动…

linux硬盘转windows7,记——第一次上手UEFI电脑,将mbr硬盘的Windows7和Linux转为gpt+uefi启动...

这是篇日记&#xff0c;前面有大量的个人情绪&#xff0c;要看方法的请直接看后面。--------------------------------------------------------------------------------------------我终于上手新电脑了虽然还是用别人的旧电脑但是总算能够用上近代一点的硬件了&#xff0c;可…

20 个 .NET 6 新增的 API

DateOnly & TimeOnly.NET 6 引入了两种期待已久的类型 - DateOnly 和 TimeOnly, 它们分别代表DateTime的日期和时间部分。DateOnly dateOnly new(2021, 9, 25);Console.WriteLine(dateOnly);TimeOnly timeOnly new(19, 0, 0);Console.WriteLine(timeOnly); DateOnly date…

中国学生的最大噩梦,都来源于这个男人

全世界只有3.14 % 的人关注了爆炸吧知识会通中西经世致用说到中国古代的“全才”&#xff0c;一般人都会脱口而出沈括、张衡、祖冲之....而在明朝&#xff0c;有这么一位少有人知的“全才”式科学家&#xff0c;他的研究领域包括天文、历法、数学、军事、农业、水利....和上述的…

BASE64 编码和解码

依赖jar: import org.apache.commons.codec.binary.Base64; BASE64和其他相似的编码算法通常用于转换二进制数据为文本数据&#xff0c;其目的是为了简化存储或传输。更具体地说&#xff0c;BASE64算法主要用于转换二进 制数据为ASCII字符串格式。Java语言提供了一个非常好的BA…

类和类之间的关系解析-1

一、泛化关系 泛化关系也称继承关系&#xff0c;指的是一个类&#xff08;称为子类、子接口&#xff09;继承另外的一个类&#xff08;称为父类、父接口&#xff09;的功能&#xff0c;并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识&#xf…

如果太阳系毁灭,这种神秘粒子就是真凶!

185年12月7日这一天&#xff0c;东汉中平二年乙丑&#xff0c;一位天文学家观测到天空出现了一颗极其明亮的星体&#xff0c;他并不知道这意味着什么。这颗突然出现于苍穹之中的星星在夜空中照耀了八个月后&#xff0c;又忽然消逝了。《后汉书天文志》中留下了这段记载&#xf…

Centos7 安装gitlab 8.7.5

简介&#xff1a;GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的web服务。1. Web框架使用Ruby on Rails。2. 基于MIT代码发布协议。3. 需要gitolite协同工作。安装要求&#xff1a;ruby 1.9.3MySQLgitgitoliteredis如果…

男人会为女人改变多少

男人会为女人改变多少 女人都想改造男人   从前有人说&#xff0c;女人征服男人&#xff0c;然后通过男人征服世界&#xff1b;而现在是女人改造男人&#xff0c;然后男人按照女人的意愿改造世界。女人喜欢男人&#xff0c;这八成是错不了的&#xff0c;但女人永远不满意男人…

磨刀不误砍柴工—Exceptionless搭配log4net记录日志

Exceptionless专注于.net平台提供实时错误和日志报告。主要包括&#xff1a;错误通知、智能分组异常、详细错误报告堆栈跟踪、支持离线、UI查看重要错误和确定优先级、仪表板上的统计信息和趋势、对异常标记为已修复&#xff0c;监视回归、将事件标记为关键等。主要是用于展示、…

豆瓣9.6分!再一次被BBC的纪录片震惊!

英国广播公司BBC的纪录片素来就是高质量的代名词&#xff0c;推出的《地球无限》(Planet Earth)、《地球的力量》(Earth The Power of the Planet)、《冷血生命》(Life In Cold Blood)等片不仅在英国播放时获得极高收视&#xff0c;还获得艾美奖等多个国际奖项的肯定&#xff0…

C++中事件机制的简洁实现

事件模型是被广泛使用的好东西&#xff0c;但是C标准库里没有现成的&#xff0c;其他实现又复杂或者不优雅&#xff0c;比如需要使用宏。现在VC11可以用在XP下了&#xff0c;那么就痛快的拿起C11提供的先进设施组合出一个轻便的实现吧。 为了达到简洁的目的&#xff0c;需要放弃…

Andorid之Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法总结

在调试代码的时候我们需要查看调试信息&#xff0c;那我们就需要用Android Log类。 android.util.Log常用的方法有以下5个&#xff1a;Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根据首字母对应VERBOSE&#xff0c;DEBUG,INFO, WARN&#xff0c;ERROR。 1、Log.v 的调…