2.2 Android源代码结构
在进一步阅读和理解Android源代码之前,你还需要先停下来,从整体上了解Android源代码的目录结构。正所谓“磨刀不误砍柴工”,否则一旦一头扎进纷繁的细节中,就成了盲人摸象,只见树木不见森林了。
整个Android项目的目录结构,自然地依照各个层次和功能分割开了。如图2-1所示,在Android的根目录下,有frameworks、packages、system等一级子目录。依次了解这些目录中的内容和特征,便可以把握整个Android源代码的结构特点。
2.2.1 框架层源代码目录frameworks
在frameworks目录下,集中放置了Android框架层[1]的代码。其中大部分功能模块是通过Java语言进行编写的,而对执行效率有很高要求的模块则是通过C/C++来实现的。对于Android应用开发者而言,这可能是你最需要阅读和学习的部分。它包含了SDK中的各个功能模块以及Android中各部分核心机理的实现,也是本书主要介绍的内容。
frameworks有三个重要的子目录,分别是base、opt、polices。
❑在base目录中,放置了框架层的基本内容,包含用到的Java文件、相关资源文件和jni类库的实现。其中最为核心的是base中的core目录,在其中放置了大部分的框架层实现。
图 2-1 Android源代码目录结构图
❑opt目录为option(可选)的意思,放置了框架层一些附加功能的模块。从概念上来看,Google为Android提供的一些功能模块,比如Google地图模块、Google定位服务模块,都位于该目录下。只不过,其中大部分模块的实现,都没有开源。
❑在polices目录中放置的是和具体设备类别相关的实现。Android希望能够在不同的设备上运行,由于设备使用特征的差异(并不是硬件特征),会需要一些不同的实现。比如在手机上,Android呈现出来的窗口结构,是最顶上的状态栏和紧接它的标题栏,以及主要视图区域和弹出菜单项部分。但如果在移动互联网设备(Mobile Internet Device, MID)上运行Android,由于可视区域更大,如果再采取和手机上一致的窗口策略,就类似于“大脚穿小鞋”了。因此,不同特征设备有着不同的策略,这些实现会依照其设备名称,分子目录放在polices目录中。
[1]Android从上至下,可以分成应用层、框架层、核心类库和运行时、操作系统和硬件抽象层等,详情参见第1章的介绍。