Android技术内幕(系统卷)
上QQ阅读APP看书,第一时间看更新

1.4 Android源码结构

在对源码进行系统学习之前,首先来清点一下可供我们使用的资源,即分析源码的结构及其可用工具,了解Android为我们提供了哪些功能,以及我们需要关注的内容。本节分三个部分,首先分析Android源码的结构,为后期系统的学习打下基础;然后对Android SDK框架进行整体介绍,让我们做到心中有数;最后整理可供我们在开发过程中使用的各种工具,以提高后期的开发效率。

Android 的源码本身就很庞大,因此我们有必要理清其结构。为了让大家能够理解得更透彻,我们仍然根据前言中所展示的Android系统构架图,对源码的分布结构进行剖析。

1.Linux内核层

我们知道,这一层主要包括了Android的Linux内核和驱动程序,因为Android本身就是基于Linux 2.6内核的。以下是Android的各版本与Linux内核版本之间的对应关系。

❑ Android 1.0——> Linux 2.6.25

❑ Android 1.5——> Linux 2.6.27

❑ Android 1.6——> Linux 2.6.29

❑ Android 2.0——> Linux 2.6.29

❑ Android 2.1——> Linux 2.6.29

❑ Android 2.2——> Linux 2.6.32

❑ Android 2.3——> Linux 2.6.35

Android的内核结构与Linux 2.6的内核结构基本一致,只是增加了部分Android专用的驱动,这也是我们后面会重点讲解的内容。以下为Linux内核层所对应的源码的分布情况。

bionic                  bionic C库
kernel                  Android Linux内核(其中包括一些Android专用驱动)
system                 文件系统库、应用及组件等
hardware                主要包括硬件适配层HAL

当然,除了上面列出的,还有一些比较核心的,比如frameworks包括了Android的核心框架和配置策略等,后面我们会对这些内容进行详细的介绍。下面继续看系统运行库。

2.系统运行库层

系统运行库主要包括原生库、扩展库、Dalvik 虚拟机、Android 核心库几个部分。其中,原生库主要分布在bionic/libc和hardware/libhardware中(这里还包括大部分硬件抽象层的实现,本书第7章将会详细介绍);扩展库内容比较多,大多数都来源于开源项目,比如Webkit浏览器引擎、skia图形库、SQLite、OpenCore(多媒体框架)、qemu(系统模拟环境)等;Dalvik 虚拟机主要在dalvik目录下,它的主要作用包括对象生命周期管理、堆/栈管理、线程管理、安全和异常管理;Android核心库主要提供一些基本的Java类接口,包括数据结构、I/O工具和网络模块等。

3.应用程序框架层

应用程序框架层主要为开发人员开发 Android 应用程序开发提供一系列的接口和服务,同时,负责对应用程序生命周期和资源等进行管理。主要分布在 frameworks/base 中的 Java部分。

4.应用层

应用层主要包括随同Android 一起发布的一些通话时所必需的应用程序,包括Home(主屏)、联系人、短信等。大家可以参考 Android 的系统构架图来进行对比,我们开发的应用程序也将处于该层,在Android源码中位于packages/apps目录下。packages/providers是内容提供器,packages/inputmethods是输入法相关的内容,packages/wallpapers是Android系统墙纸设置相关的内容。