基本信息
编辑推荐
基于2.3Gingerbread 版本,深入剖析Android内核,详细分析了Android内核的内部机制,包括窗口管理系统、Activity管理系统、输入法框架、编译系统等,为Android内核定制及高级应用程序开发提供技术参考。
内容简介
作译者
柯元旦,1981年生于陕西咸阳,2003年毕业于西安电子科技大学通信工程学院;2003~2006年,创立了一家设计公司,提供便携式媒体播放器解决方案,基于TI
DSP芯片自主开发了一套操作系统,包括任务管理与调度、文件系统及GUI(图形用户接口)等:2006~2009年,就职于联想研究院,先后从事嵌入式系统设计以及互联网应用开发;2009年至今,从事Android应用程序开发和Framework内核研究,对Android内核有较深刻的理解。
目录
第1部分 基础篇
第1章 Linux基础 2
1.1 Linux文件系统概述 2
1.2 Linux启动过程 4
1.3 常用Linux 命令 6
1.4 Shell脚本备忘 9
1.4.1 获取输入 10
1.4.2 变量定义 10
1.4.3 条件判断 11
1.4.4 while []...do... done语句 12
1.4.5 for循环 13
1.4.6 函数 14
1.4.7 常用内置符号常量 15
1.5 Make脚本备忘 15
1.5.1 一个简单的Makefile文件 16
1.5.2 变量的定义与赋值 18
1.5.3 条件控制语句 18
1.5.4 宏(函数)定义 19
1.5.5 内置符号和变量 22
前言
本书之所以在前言中提出这个问题,就是为了不吓唬大家,并给大家一种信心,相信自己有能力理解本书的内容。
首先来回答第一个问题,什么才能称为内核?大家都知道,Linux内核的本质包含了线程调度、内存管理及输入/输出管理,那么请问Windows操作系统的内核是什么呢?我们常说,苹果的操作系统Mac OS X的内核是基于UNIX的,那么可以说Mac OS的内核是UNIX吗?
如果仅从线程调度、内存管理,以及输入/输出的角度来区分Windows和Mac OS系统的话,能很明显地感觉到缺少点什么,那就是图形用户接口(GUI),Android、Windows、Mac OS三者的操作方式完全不同,因此,对于图形操作系统而言,本人倾向于将GUI也划归到内核的范畴,这也就是为什么本书使用“内核”作为标题的原因。本书所谓的“内核剖析”的核心也正在于Android所设计的GUI框架的内部原理。Android操作系统是基于Linux实现的,本书并不是去剖析Linux。
下面再来回答第二个问题,即“谁”才有能力或者有机会写一本“内核剖析”的书?如果有人告诉你,一个非微软公司的技术人员写了一本Windows操作系统内核剖析的书,你信吗?反正我不信,原因是,没有阅读过Windows内核源码的人是不可能写出这样的书的,幸运的是Android的源码是开放的。可是源码开放就一定能写这样一本书吗?
在本书截稿时,我未曾见过一本真正分析Android内核的书,大多数书籍都是关于Android SDK应用开发的。在过去的工作经历中,常常遇到一些同事,由于对Android内核不了解,导致在应用程序开发时遇到一些无法解决的问题。遗憾的是,IT类优秀书籍本来就很少,中文原创的更少,Android领域的几乎没有,本人之前也写过一本《Android程序设计》,坦白地讲,当我对Android内核彻底剖析后,觉得那本书有“误人子弟”的成分。因此,我才决定要将自己对Android的理解分享给更多的读者。
那么,我有可能写出一本真正的“内核剖析”的书吗?
我2003年毕业于西安电子科技大学通信工程学院,毕业后与两名同学一起创业,当时我们的目标是做一个“心情播放器”,其本质是一个彩屏多媒体掌上设备,当初想把它做成一个能够根据人的心情自动播放音乐的设备,不谈产品,仅从技术的角度来讲,我们基于美国德州仪器(TI)公司的一款DSP处理器完成了“心情播放器”的设计,包括软件和硬件,该软件系统包括支持最多16个线程的多线程管理、内存管理、FAT16文件系统、GUI子系统,以及一套标准应用程序开发框架、桌面程序等,在这里要再次感谢同宿舍的陈静军同学,他是我到目前为止见过的写代码最优秀的人,在这个项目中,静军设计了这个操作系统的内核及GUI子系统,而我设计了硬件主板、驱动、系统开发框架等,说到这里,如果静军来写一本内核剖析的书,肯定会比我写得更好,在当初设计操作系统前,由于静军还没有加入到我们团队,我才花时间研究了嵌入式操作系统,并设计了一些简单的接口,而当静军加入后,这些工作就由他完成了,因此,从严格意义上讲,我并没有实际编写过操作系统内核代码,只不过从硬件、驱动、系统等不同层面设计了一个系统框架而已。
在这个项目中,一切只是从一颗处理器入手,没有基于任何代码,所有底层代码都是我们编写的,包括汇编和C语言程序设计,因此,在这个过程中,我彻底了解了C语言如何被编译成汇编代码,以及特定处理器如何影响上层的C程序。
当然,这个故事是以失败而告终的,后来我继续从事嵌入式产品设计,包括使用TI高性能DSP处理器、x86处理器,ARM处理器等,不过,仅过了两年时间,又去从事互联网产品的设计,并开始使用Java、C++、PHP、JavaScript、Erlang等不同语言进行软件开发,在使用各种语言时,我常常思考这些语言与底层系统的关系,并从编译原理的角度来理解每一种语言,从而能够理解不同语言的运行环境和操作系统的关系。
直到Android的诞生,我当时对Android的描述是,这是一个把嵌入式系统和互联网应用集合在一起的一个技术。幸运的是这些我都还算熟悉,因此就开始了Android的开发,最开始的时候仅仅是应用程序的开发,虽然也常常考虑Android底层的问题,但由于没有源码,所以也就没有仔细研究,后来发现,这也是一件好事,因为如果不熟悉上层的开发接口,则很难理解内核的一些概念。
后来,应用层积累得差不多了,源码也开放了,于是我就迫不及待地开始了内核之旅,所有的分析都是基于源码的阅读和测试,中间的过程的确是辛苦的,包括在Ubuntu及Mac OS上建立编译环境、思考Android中的异步调度架构、平衡工作和学习的时间等,早上坐地铁也常常看Google groups中关于Android的各种问答。不过,每当你明白一个大的架构的关键之处时,也是一件很开心的事情。
谈及以上履历的目的在于启发正在读大学的朋友,一名电子工程师一定要理论、硬件、软件及梦想同时具备,不要把自己区分为“硬件工程师”、“软件工程师”,我们可以称自己为电子工程师或者“梦想家”。另外,学习一定要循序渐进,如果你还不了解微机原理,那么就不要学习C语言,如果你还不了解数字电路,那么就不要学习微机原理,上层的软件开发需要对底层基础知识的理解,只有这样才能成为一名创造者,并设计出卓越的产品。
多么希望我们中国的大学生在不久的将来也能创造出像Google、Microsoft、Facebook这样著名的企业。
内容介绍
本书内容分为五大部分,分别如下:
第1部分,基础篇。因为Android内核研究必须基于Unix-Like的主机系统上,常见的有Ubuntu和Mac OS X,因此,该部分介绍Linux的一些基础知识,以及在Linux上管理源码的工具git。
第2部分,内核篇。Android内核的核心就是一套GUI系统。该部分主要包含视图的内部工作机制及视图管理器(Window Manager Service)和Activity管理器(Activity Manager Service)的内部工作机制。
第3部分,系统篇。内核不等于操作系统,Android是一个操作系统,因此,除了内核之外,还必须定义一套系统架构,比如应用程序的格式定义,以及应用程序如何被安装和卸载、输入法框架等,有时候这部分内容也叫做外壳(Shell)。
第4部分,编译篇。Android相关的源码据说超过1000万行,这套源码由众多的子项目组成,因此,联合编译这些子项目就是一个复杂的问题。Android源码中定义了一套编译框架,该框架可以方便地编译不同类型的子项目,比如一个动态链接库项目、Jar包项目等。了解该套编译架构后,就可以自由地在源码中添加需要的子项目,并控制系统中已有子项目的编译过程。
媒体评论
——小米科技汪文俊
《Android内核剖析》侧重于从操作系统层面分MAndroid系统,由浅入深的理论分析外加后面最有特色的Rom制作使得前面的知识有了用武之地,感谢这本书在我第一个日om制作上的指导,同样感谢这本书使我的Android知识更加全面,阅读这本书需要有较好的Java、C语言及LinuX基石出。
——学生鲍杭
需要这本书的人,往往是想自己定制Android系统,建议作者增加对于如何定制一个轻量级的系统的讲解,另外,对于系统中一些基础类库的使用方法,可以多介绍一些。
——上海传知信息科技陆昀
看过目录,内容很吸引人,正是我需要的。读了一部分感觉语言流畅,通俗易懂而且深入浅出,是一本很有价值的Android技术书,只是遗憾没有看到对于数据库SOLite的介绍。
——微软陈健
整体框架很不错,由浅入深,对一些基本原理不仅在概念上把握,更能从你工作经验出发,鞭辟入里。给读者的感觉不仅是一本原理书,更是作者的经验之谈。记得在“下载及安装Android源代码”一节,Android官方网站已经对其下载、安装做了描述,而作者对于读者可能遇到的问题单独做了详尽的总结与解答。
——学生 尚申
【插图】
