Android的系统构架

Android是一种以Linux为基础的开放源码操作系统,主要应用于便携设备。Android一词最早出现于法国作家利尔亚当在1886年发表的科幻小说《未来夏娃》中。作者将外表像人类的机器起名为Android,这也就是Android小人名字的由来。Android股份有限公司于2003年在美国加州成立,在2005年被Google收购。2010年末数据显示,仅正式推出两年的Android系统的市场占有率已经超越称霸十年的诺基亚Symbian系统,跃居全球最受欢迎的智能手机平台之一。

Android的系统构架分为四层,从高层到底层分为应用程序层,应用程序框架层,系统运行库层和Linux核心层

Android的系统构架_第1张图片

1、Android应用层

    Android应用层由运行在Android设备上的所有应用共同构成,它不仅包括通话、短信、联系人等系统应用(随Android系统一起预装在移动设备上),还包括其他后续安装到设备中的第三方应用。第三方应用都是基于Android提供的SDK(Software Development Kit)进行开发的,并受到SDK接口的约束。而预装在设备中的系统应用,则可以调用整个框架层的接口和模块,其中的很多接口在SDK中是隐藏的,因此,系统应用具有比第三方应用更多的权利。

    Android的应用都是基于Java语言来开发的,但在很多应用(尤其是游戏)中,需要进行大规模的运算和图形处理,以及使用开源C/C++类库。通过Java来实现,可能会有执行效率过低和移植成本过高等问题。因此在Android开发中,开发者可以使用C/C++来实现底层模块,并添加JNI(Java Native Interface)接口与上层Java实现进行交互,然后利用Android提供的交叉编译工具生成类库并添加到应用中。为了让应用开发者能够绕过框架层,直接使用Android系统的特定类库,Android还提供了NDK(Native Development Kit),它由C/C++的一些接口构成,开发者可以通过它更高效地调用特定的系统功能。但开发者通常只能使用C/C++编写功能类库,而不是整个应用。这是因为,诸如界面绘制、进程调度等核心机制是部署在框架层并通过Java来实现的,应用只有按照它们规定的模式去编写特定的Java模块和配置信息,才能够被识别、加载和执行。

2、应用程序框架层

    这一层即是编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用,这样便简化了程序开发的架构设计,但是必须遵守其框架的开发原则,本层提供以下组件:

丰富而又可扩展的视图(Views):可以用来构建应用程序,它包括列表(lists)、网格(grids)、文本框(text boxes)、按钮(buttons), 甚至可嵌入的Web浏览器。

内容提供器(Content Providers):它可以让一个应用访问另一个应用的数据(如联系人数据库), 或共享它们自己的数据

资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串、图形、和布局文件(layoutfiles)。

通知管理器 (Notification Manager):应用可以在状态栏中显示自定义的提示信息。

活动管理器(Activity Manager):用来管理应用程序生命周期并提供常用的导航退回功能。

窗口管理器(Window Manager):管理所有的窗口程序。

包管理器(Package Manager):Android系统内的程序管理

3、系统运行库层

    当使用Android 应用框架时,Android系统会通过一些C/C++库来支持对我们使用的各个组件,使其能更好地为开发者服务。主要的运行库如下:

Bionic系统 C 库:C语言标准库,系统最底层的库,C库通过Linux系统来调用。

多媒体库(MediaFrameword):Android系统多媒体库,基于PacketVideo OpenCORE,该库支持多种常用的音频、视频格式的回放和录制以及一些图片,比如:MPEG4、MP3、AAC、AMR、JPG, PNG 等。

SGL:2D图形引擎库。

SSL:位于TVP/IP协议与各种应用层协议之间,为数据通讯提供支持。

OpenGL ES 1.0:3D效果的支持。

SQLite:关系数据库。

Webkit:Web浏览器引擎。

FreeType :位图(Bitmap)及矢量(Vector)。

    每个Java程序都运行在Dalvik虚拟机之上。与PC一样,每个Android应用程序都有自己的进程,Dalvik虚拟机只执行".dex"的可执行文件。当Java程序通过编译,最后还需要通过SDK中 的 "dx"工具转化成".dex"格式才能正常地在虚拟机上执行。

    Google于2007年底正式发布了Android SDK, 作为 Android系统的重要特性,Dalvik虚拟机也第一次进入了人们的视野。它对内存的高效使用,以及在低速CPU上表现出的高性能,确实令人刮目相看。Android系统可以简单地完成进程隔离和线程管理。每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。很多人认为Dalvik虚拟机是一个Java虚拟机,因为Android的编程语言恰恰就是Java语言。但是这种说法并不准确,因为Dalvik虚拟机并不是按照Java虚拟机的规范来实现的,两者并不兼容;同时还要两个明显的不同:Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式DEX(Dalvik Executable)的文件。在Java SE程序中的Java类会被编译成一个或者多个字节码文件(.class)然后打包到JAR文件,而后Java虚拟机会从相应的CLASS文件和JAR文件中获取相应的字节码;Android应用虽然也是使用Java语言进行编程,但是在编译成CLASS文件后,还会通过一个工具(dx)将应用所有的CLASS文件转换成一个DEX文件,而后Dalvik虚拟机会从其中读取指令和数据。

    Dalvik虚拟机非常适合在移动终端上使用,相对于在桌面系统和服务器系统运行的虚拟机而言,它不需要很快的CPU速度和大量的内存空间。根据Google的测算,64M的RAM已经能够让系统正常运转了。其中24M被用于底层系统的初始化和启动,另外20M被用于高层启动高层服务。当然,随着系统服务的增多和应用功能的扩展,其所消耗的内存也势必越来越大。

4、Linux核心层

    Android 的核心系统服务基于Linux2.6内核,其安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于Linux2.6内核。Linux内核同时也作为硬件和软件栈之间的抽象层。Android更多的是需要一些与移动设备相关的驱动程序,主要的驱动如下:

显示驱动(Display Driver):基于Linux的帧缓冲(FrameBuffer)驱动。

键盘驱动(KeyBoard Driver):作为输入设备的键盘驱动。

Flash内存驱动(FlashMemory Driver):基于MTD的Flash驱动程序。

照相机驱动(Camera Driver):常用的基于Linux的v4l2(Video for Linux)驱动。

音频驱动(Audio Driver):常用的基于ALSA(AdvancedLinux Sound Architecture)的高级Linux声音体系驱动。

蓝牙驱动(Bluetooth Driver):基于IEEE 802.15.1标准的无线传输技术。

WiFi驱动(Camera Drive):基于IEEE 802.11标准的驱动程序。

Binder IPC驱动:Android的一个特殊的驱动程序,具有单独的设备节点,提供进程间通讯的功能。

Power Management(能源管理):比如电池电量等。


你可能感兴趣的:(Android的系统构架)