前 言

经过三年的发展,Android已经从最初的智能电话领域逐渐进入教育、医疗、军事、汽车、家居等重要领域。它一路披荆斩棘,攻城拔寨,发展势头有目共睹,已经成为移动平台领域当之无愧的王者。目前,已有众多设备开始选择使用Android系统,比如智能手机、智能电视、平板电脑、上网本、MP3、MP4、智能相机等;相信在不久的未来,还将有更多采用 Android系统的高科技产品进入我们的生活。这些设备将产生各种各样的应用需求,尤其是与 Android系统底层相关的应用,这将给开发者带来大量的机会,尤其是系统级应用开发工程师。

Android基于Linux内核,但它并不是标准的Linux。因为Google为了让Android更适合移动手持设备,对Linux内核进行了各种优化和增强,这些增强的部分也正是从事Android系统开发的嵌入式系统工程师所急需了解的内容;同时Android的源代码不仅复杂,而且代码量巨大,各模块之间联系紧密。这让大多数Android应用开发者不知从何处入手,他们都希望能够有一本系统且全面的,对 Android 内核的构架和实现原理进行分析的书,而国内目前分析Android底层实现的书籍甚少。因此,笔者对自身的实战经验进行了总结和整理,编写了本书,希望能够帮助众多Android应用开发者更快、更深入地理解Android各个部分的具体实现,从而为开发各种系统级的应用做好准备。

本书分为两卷,系统卷和应用卷。系统卷主要分析 Android 系统层的实现,包括 Android系统构架中的下面三层:Linux 内核层、硬件抽象层、系统运行库层;应用卷介绍 Android 系统构架中的上面两层,重在分析Android应用层的实现,包括应用程序框架层和应用层。具体如图1所示:

图1 Android系统构架一般而言,Android系统在构架上分为4层,分别为:应用层、应用框架层、系统运行库层和Linux内核层;为了使分析更加深入透彻,本书将系统运行库层和Linux内核层之间与硬件及其驱动相关的内容单独划分为一层——硬件抽象层。

图中Linux内核(Kernel)部分是本书系统卷第一部分的内容,主要分析Android的核心驱动程序的实现,包括驱动程序的系统构架、原理和实现。掌握这部分内容后,读者将能够修改和编写Android的各个设备驱动程序。紧接着上面则是硬件抽象层,本书第7章通过大量篇幅深入分析了Android中各个模块的硬件抽象层实现,使读者在掌握Android中已有的硬件设备接口实现的同时,能够独立编写适合自己的硬件设备驱动的抽象层接口。图中的Libraries部分即本书的第6章,分析了Android的系统库、程序库和功能库的具体实现,它能让读者在理解Android的各种功能的底层实现的同时,还能按照功能需求进行扩展和优化。最后,图中的Android运行时(Runtime)部分又分为Dalvik虚拟机和核心库两部分,分别在本书的第8章和第9章介绍,剖析了Dalvik虚拟机的构架与实现,以及Android核心库和API的运作机制,使读者能够完成Android运行库的移植和修改。

本书面向的读者

本书(系统卷)主要分析了Android系统底层的构架与实现原理,从源代码的获取和系统开发环境的搭建,到Android Kernel的核心实现,再到硬件抽象层和Android运行库等各个模块的细节实现,让读者可以从更深的层次去理解Android的系统构架,并对Android系统进行移植和二次开发。阅读本书的一个必要条件是对Linux内核有一定了解,因此本书(系统卷)非常适合以下开发人员阅读:

❑ Android系统开发/移植工程师

❑ Android驱动开发/移植工程师

❑ Android系统构架师

❑ 嵌入式系统工程师

应用卷则重在分析Android的应用层和应用程序框架层的运作机制,从基础的应用程序剖析入手,到应用程序API的实现,再到各模块的原理,让读者对Android有更深入、更全面的认识,同时结合商业案例的分析,让读者不仅能使用API开发应用,更能对API功能进行扩展,从而满足开发中的各种需求。因此,应用卷非常适合以下人员阅读:

❑ Android应用开发/移植工程师

❑ Android游戏开发/移植工程师

❑ Android构架师

如何阅读本书

在编写本书之前,笔者收到很多《Android应用开发揭秘》一书的读者发来的邮件,他们都希望有一本能深入讲解Android实现原理的书籍,因此编写了本书,旨在帮助众多开发者晋级。本书分为两册,如果是进行系统级开发,建议阅读本卷;如果是进行应用开发,建议阅读应用卷。

本书是以Android源码为基础进行分析的,因为源码内容很多,不能全部列出来,因此笔者建议在阅读本书的同时,最好能对照查看Android的源码实现(本书的所有代码清单都指明了它在源码中的路径,以方便大家查看);另外,本书中有多处标记为“注意”、“扩展学习”的内容,都是一些实战经验。最后,虽然Android的各部分联系紧密,但各个部分的讲解都较为完整,大家仍然可以根据需要调整阅读顺序。

致谢

感谢所有在本书写作过程中给予过我指导、帮助和鼓励的朋友,尤其是本书的策划编辑杨福川,他不仅对本书提出了宝贵的写作建议,而且还和他的同事曾珊对书稿进行了仔细的审阅。

感谢一直以来信任、鼓励和支持我的父母和其他亲人。

最后还要感谢我的女友,正是你的爱与支持,才使我有了今天的收获。

虽然我热切地希望与广大读者朋友分享Android系统的底层实现技术,但由于时间有限,书中难免存在疏漏与错误,诚恳地希望各位读者批评和指正。如果发现书中有任何问题,或是想与我交流关于Android开发的相关话题,欢迎通过Android.Yarin@gmail.com与我联系。希望能结识更多的朋友,大家共同进步。