Android Anatomy

Android三窥

首先,分别从Android的层次结构、服务模型和源代码这三个不同的角度一窥Android系统。

Android Layer Cake

下图是Android系统的层次模型,其左半部分可以看作一个如同Ubuntu的一般的Linux发行版本,而右半部分则是Android系统的特定组成部分。

Android Layer Cake

该模型将Android分为四个主要层次,每一层都基于其下一层,从下至上依次是:硬件层、Linux内核层、系统库层以及应用和系统服务层。目前,大多数的Android开发者主要的工作集中于上图的“Android Applications”区域,他们将时间用于学习和利用Android系统提供的环境。而本文的主要内容是关于如何自定义Android系统本身以使其适用于新的硬件。

硬件层

硬件层即物理设备,它处于当前模型的最底层。

Linux内核层

内核是创造进程及所有应用运行的内存环境的软件。Android的内核是一种Linux内核的变体,它是Android系统的首要移植层。将Android移植到一个新设备上的过程包括将一个Android的Linux内核变体运行在目标设备上,然后将Android的其它部分放置其上。另外,在Android中,Java源代码并不是被编译为JVM的指令,而是被编译为Dalvik和ART的指令。Android VM的目标是使得应用在Android设备间可移植,而不是和JVM一样,使得它们在多平台和系统间可移植。

系统库层

系统库即软件库,它通常是由第三方提供的不透明的二进制文件,用于实现用于多个应用的服务。一些会被多个应用用到的通用功能,如密码系统、影音和web浏览器较为复杂,将它们实现为可被多个应用使用的库是很合情合理的。
在Android的系统库的众多组成中,Bionic尤为值得特殊注意。可以说,Bionic相当于Android的标准C库。大部分应用并不直接请求内核的服务,而是使用C标准库请求内核服务。C标准库接口一开始是ANSI(American National Standards Institute) C 标准的一部分,后来也逐渐为ISO所接受。而现在广认可的POSIX(Portable Operating System Interface of UNIX) C 标准库则是一个对其有所增加的父集。
随着Android对于节简的追求,Bionic已经被无情地精简了很多。较之其BSD(Berkly Software Distribution)的祖先,它已经小了很多,以至于它已不能满足ANSI标准,更不用说POSIX标准了。所以,在其它平台上运行地很好的应用,可能因为Bionic不支持其所需的函数而根本不能在Android上面运行。
另外,Bionic根源于BSD。不同于大部分操作系统基于一个使用某一版本的GNU C标注库(glibc),Android的Bionic源于BSD UNIX的libc。这样做的原因很多,其中一个原因就是libc得到了BSD的许可,这样它便不会如同glibc一样受到加于其上的LGPL(GNU Lesser General Public License)的约束。

应用和系统服务层

应用使用由更底层提供的环境向用户提供服务。一些特殊的,持续运行的应用被称为系统服务,有时候也被称为守护进程(daemons),它们执行周期性的任务,管理系统状态。

The Android Service Model

The Source