Android系统架构

532 阅读4分钟

Android的系统体系结构分为四层,自顶向下分别是:

  • Applications (应用程序)
  • Application Framework (应用程序框架)
  • Libraris(系统运行库)与 Android Runtime (Android运行环境 )
  • Linux Kernel (Linux内核)


1. Applications (应用程序)

用户就是通过这些程序来操控Android设备,这些应用程序在设备上都是一个小图标为代表,用户通过单击图标来执行程序。Android系统一般内置有Email、短信收发程序、浏览器、联系人等功能的应用程序。通常开发人员就处在这一层。

2. Application Framework (应用程序框架)

Application Framework 其实就是Android 的API (Application Programming Interface, 应用程序编程接口),提供应用程序开发的各种API进行快速开发,也即隐藏在每个应用后面的是一系列的服务和系统,大部分使用Java编写,其中包括:

  • View System (视图系统) : 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。
  • Activity Manager (活动管理器) : 管理Activity的生命周期,并提供浏览回溯堆栈,让用户可以通过按下退回键,返回上一页内容。
  • Content Providers (内容提供器) : 可以让各个应用程序分享彼此的数据。
  • Resource Manager (资源管理器) : 提供非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。
  • Notification Manager (通知管理器) : 在状态栏显示指定信息,以便通知或提醒用户。

3. Android Runtime (Android运行环境)

Android Runtime 可分成 Android Core Libraries (Android 核心函数库) 与 Dalvik Virtual Machine ( Dalvik VM, Dalvik 虚拟机 )。

  • Android Core Libraries: Android核心函数库所提供的功能,大部分与Oracle的Java核心函数库相同。
  • Dalvik Virtual Machine: 每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译成class 文件,然后通过SDK中的 "dx" 工具转化成.dex格式由虚拟机执行。

4. Libraris(函数库)

Android有一个内部函数库,此函数库主要以C/C++编写而成。Android应用程序开发人员并非直接使用此函数库,而是通过更上层的应用程序框架(Application Framework)来使用此函数库,所以有人成此类函数库为原生函数库(Native Libraries)。

  • Bionic系统 C 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。
  • Media Framework ( 媒体函数库 ) - 该库让Android具有播放与录制音频与视频文件的能力,该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。
  • Surface Manager ( 外观管理函数库 ) - 管理图形界面的操作与2D,3D图层的显示。
  • Webkit,LibWebCore - Android内置的浏览器,其引擎就是Webkit,与Chrome,Safari浏览器的引擎相同。
  • SGL - 专门处理Android的2D图形。
  • 3D libraries - 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速。
  • FreeType -位图(bitmap)和矢量(vector)字体显示。
  • SQLite - 一个功能强劲的轻型关系型数据库引擎。
  • OpenGL ES - 适合嵌入式系统使用的3D图形函数库。
  • 还有部分上面没有显示出来的就是硬件抽象层。其实Android并非讲所有的设备驱动都放在linux内核里面,而是实现在userspace空间,这么做的主要原因是GPL协议,Linux是遵循该 协议来发布的,也就意味着对 linux内核的任何修

5. Linux Kernel (Linux内核)

Android以Linux作为整个操作系统的核心,Linux为Android提供了主要的系统服务,如安全性管理,内存管理,进程管理,网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。其外还对其做了部分修改,主要涉及两部分修改:

  • OpenGL ES - 主要是为了省电,毕竟是手持设备嘛,低耗电才是我们的追求
  • Binder (IPC) -提供有效的进程间通信,虽然linux内核本身已经提供了这些功能,但Android系统很多服务都需要用到该功能,为了某种原因其实现了自己的一套。