前言
Android 5.0(代号Lollipop,简称Android L)是Android系统自1.0版本以来变化最大的一个升级版,它包含了很多激动人心的改进,其中最明显的变化在于用户体验方面。“Material Design”扁平、简洁,且其色彩丰富、动感十足的设计风格,给用户带来了更新鲜的感觉。除了界面风格的重大变化外,包括搜索、应用菜单、通知中心等众多细节在Android 5.0上也有很大改进。
Android 5.0在系统性能提升方面也做了相当大的努力,首先是ART彻底代替了Dalivk虚拟机,同时开始支持64位编译,因而,用户很快就能使用运行64位CPU的手机,重要的是,系统的耗电量也通过“Porject Volte”项目有了显著的改善。
从2008年9月23日Google发布Android 1.0版本到2014年6月26日Google正式推出Android 5.0,已经6年过去了。笔者第一次接触Android系统还是2008年在Motorola工作的时候,那时Android才崭露头角,而现在Android系统已经占据了手机市场的一半多份额。由于工作关系,笔者6年来一直致力于Android Framework的开发和研究,也算是略有收获。Android是一套开源系统,官方(Google)提供的技术资料很有限,其官方网站(www.android.com)中提供的资料更多地是在介绍Android应用程序的开发。这6年间,国内也涌现了大批介绍Android的书籍,主要是介绍Android应用程序的开发,分析Android内核源码的书籍较少,为此特意编写了本书。
本书内容介绍
本书介绍了Android主要模块的架构、原理和主干实现。希望读者能通过本书,获得对Android系统进行二次开发的能力,而笔者在书中,也尽可能详细地给出代码的注释、各种属性和常量的解释,以及系统中使用的各种文件格式的介绍,希望本书能成为系统开发人员的案头工具书。
本书共分24章,基本覆盖了Android系统中重要的模块,对于每个模块,笔者尽量详细地介绍了它们的架构、原理和代码等各个方面,但是,由于篇幅限制以及本人的理解有限,如果读者发现了其中的谬误,欢迎来信赐教,本人不胜感激。关于本书的一些后续的信息,可以访问笔者的博客(http://blog.csdn.net/u013234805),答疑QQ群为216840480。
本书有3个主要特点:一是新,全书基于最新的Android 5.0的代码分析讲解(Android 5.0中很多代码细节都有改进);二是全,对Android的覆盖面比较广,Android 4.4和Android 5.0中增加的新功能,如SELinux、ART等都有详细介绍,同时整本书基于一套源码分析讲解,很多模块前后能相互印证;三是细,除了对各个模块的功能进行详细讲解说明外,对书中摘录的Android源码也做了详细注释。
本书面向的读者主要是进行系统开发的工程师,包括手机开发工程师、ROM开发工程师和各种使用Android作为开发平台的TV和可穿戴式设备(Wear)的开发工程师。当然,即使是Android应用开发工程师,如果能了解更多的Android系统知识,也会对应用开发有相当大的帮助,毕竟Android底层的开发资料比较少,一些API的解释也不尽人意,在开发应用的过程中,当遇到问题时,如果能打开源码进行查看,很多问题都能轻松解决。
本书导读
阅读系统分析类的书籍,从来不是一件轻松的事情。Android是一套非常复杂的系统,为了能减轻读者的负担,笔者在介绍每个模块时,尽量先介绍模块的使用、原理或者架构,让读者对某个模块有了初步了解后再通过剖析源码来更深入地介绍细节。
本书摘录了大量的Android源码,读者第一次阅读某个章节时,如果觉得枯燥,可以先忽略源码,只阅读笔者的分析文字,有了整体的概念之后,再从头开始理解书中的代码会更容易。
其实,真正掌握某个模块的内容,是必须要能读懂源码的,为了帮助读者达到这个目的,笔者会做尽量详细的分析解释,对于一些复杂的函数,同时会在代码中加上详细的注释。
为了减小代码占用的版面,笔者将代码中的Log语句、英文注释,以及一些进行参数检查、错误处理的代码都删除了,然后再加上注释,改动后的代码和原始代码看上去可能有区别,但是逻辑上并没有差别,而且更加容易理解。
如果纯粹使用自然语言去描述某个函数的代码逻辑,可能会非常晦涩难懂。对于软件工程师而言,通常更习惯阅读代码来理解逻辑,因此,笔者在书中尽可能保留一个函数源码的全貌。但是大段的代码也会让人觉得枯燥,因此,对于代码量大的函数,笔者一般会把代码分成小段来分析讲解,这样能保持一页中代码和文字的合适比例,减轻读者的阅读负担。
在阅读本书时,有一点要注意:在Java语言中,通常使用“方法”这个称谓,而C/C++语言中,则习惯使用“函数”。在本书中,笔者会同时使用这两种称谓,因为Android的很多模块中,Java和C++的代码中会有同名的函数,为了不混淆两者,书中讲述Java代码时,尽量使用“方法”这个称谓,讲述C/C++代码时,则使用“函数”。当然两者并没有本质区别,这是笔者特意为之,是为了更好理解。
本书共24章,基本上按照从基础到高级的顺序进行。读者阅读本书时最好能够按照本书的顺序进行,因为后面的章节可能会依赖前面的内容。
下面是本书中所有章节的简单介绍。
第1章介绍了如何建立Android系统开发的环境。包含开发环境的建立、各种软件的安装,以及系统和内核源码的下载方法。
第2章介绍了Android的Build系统。包括Build系统的组成、产品配置文件的内容、Android模块的编译方式,以及系统和应用签名的原理。
第3章介绍了Android的Bionic库。包括系统调用、内存管理的原理、管道、线程管理的方法、Futex同步机制、Log模块、Linker模块等内容。
第4章介绍了Android的Binder原理。包括Binder的使用方式、Binder服务的开发、Binder的原理、Binder驱动,以及匿名共享内存等内容。
第5章介绍了JNI。包括JNI的用法和JNI环境的创建,以及使用中的各种注意事项。
第6章介绍了Android的同步和消息机制。包括原子操作的原理、native层和Java层的同步方法及机制、Android的消息机制、Android应用进程间消息传递的机制等。
第7章介绍了Android的Init进程。包括Init进程的初始化、如何解析启动脚本文件、Android的属性系统、ueventd守护进程等内容。
第8章介绍了Android的Zygote进程。包括Zygote进程如何初始化、如何启动虚拟机、如何启动应用进程、如何加载系统类和资源等。
第9章介绍了Android的资源管理系统。包括资源的定义和使用,系统资源的匹配方式以及资源管理的实现方式。
第10章介绍了Android的SystemServer进程。包括进程的初始化过程以及用于监测System Server中服务和进程的WatchDog模块。
第11章介绍了Android的应用管理。包括PackageManagerService的整个初始化过程、应用的安装过程、系统运行时对应用的管理以及installd守护进程。
第12章介绍了Android对组件的管理。包括ActivityManagerService如何管理进程、如何管理Activity、Service、ContentProvider和BroadReceiver 4大组件。
第13章介绍了Android的多用户模式。包含UserManagerService对用户账号的管理以及PackageMangerService服务中如何创建用户等内容。
第14章介绍了Android的图形显示系统。包含Surface的创建过程、Android图像显示的原理、VSync信号的生成和分发、SurfaceFlinger中图像的输出过程等。
第15章介绍了Android的窗口系统。包括WindowManagerService如何管理窗口、如何确定窗口的大小、Z轴位置、如何播放窗口动画等。
第16章介绍了Android的输入管理系统。包括InputManagerService如何接收和发送输入消息,以及应用进程处理InputEvent的过程。
第17章介绍了Android的电源管理,包括PowerManagerService的功能、WakeLock的实现原理,以及电池管理相关的模块。
第18章介绍了Android的存储系统,包括Vold守护进程、MountService服务,以及其他存储系统的服务。
第19章介绍了Android的网络系统。包括Netd守护进程、ConnectivityService服务的主要功能,以及NetworkManagerService的作用。
第20章介绍了Android的音频系统。包括音频系统的架构、AudioPolicyService的作用、AudioFlingerService的功能,以及一次完整的播放过程的分析。
第21章介绍了Android的SELinux模块。包括SELinux的简介,以及Android中如何实现SELinux的功能。
第22章介绍了Dalvik和ART虚拟机。包括Dalvik虚拟机的创建过程、字节码的执行、内存的管理机制、垃圾回收的过程,以及ART的原理等。
第23章介绍了Android的Recovery模块。包含Recovery的运行机制、系统升级过程的详细介绍,以及升级脚本的语法规则和执行流程等。
第24章介绍了Android的调试方法。包括如何分析Android的Log、查找内存泄露的方法,以及如何进行Android的自动化测试。
作者简介
刘超,资深Android专家、系统架构师。曾任职于四通利方、Motorola、小米等多家著名公司。国内最早的Android系统开发者之一,研究Android内核多年。主持研发过天语W606、酷派W711、华为T8301等多款Android手机系统。
在编写本书的过程中,我的父母一直帮忙照看两岁多的女儿,让我能够专心写作,这里首先感谢他们为我辛苦付出。我的女儿每隔一段时间都会来打断我的工作,“提醒”我该休息了,感谢她给我带来的欢乐,支持我能将这项艰苦的工作进行下去。
最后感谢人民邮电出版社的各位领导和编辑,特别是本书的责任编辑张涛,没有你们的辛苦工作,本书的出版不会这么顺利,这里一并表示感谢!本书技术交流QQ群216840480,编辑联系邮箱:zhangtao@ptpress.com.cn。
编者