Android系统架构

633 阅读2分钟

Android系统架构

Android系统架构图
从下往上是:

  1. linux内核层: 包含了Linux内核和一些驱动模块(Display、Camera、Bluetooth Driver...)应用层实际上都要调用到Linux内核层去驱动相应的动作

  2. Libraries层:提供C/C++动态库(也叫共享库/运行时加载库)、Android运行库。这一层大部分都是用C或C++写的,所以也可以简单地把它看成是Native层

  • C/C++动态库:绿色部分
  • Android运行库:核心库(蓝色部分)和Dalvik虚拟机(5.0之后,Dalvik虚拟机被ART取代)。
  • 核心库提供了Java语言核心库的大多数功能,这样开发者可以使用Java语言来编写Android应用。
  • 相较于JVM,Dalvik虚拟机是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。每个应用程序都运行在一个Dalvik虚拟机中。
  • 5.0之后,Dalvik虚拟机被ART取代。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率,而在ART环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。
  1. Application FrameWork应用框架层:这一层大部分用Java语言编写。它是Android平台上Java世界的基石

  2. Application应用层:和用户直接交互的就是这些应用程序,它们都是用Java开发的。

其他版本的架构图

架构图
结构大同小异:

  • 硬件抽象层(HAL): 硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化,为了保护硬件厂商的知识产权,它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。通俗来讲,就是将控制硬件的动作放在硬件抽象层中。

系统架构图

Java世界与Native世界的交互

Java世界与Native世界的交互

JNI层也是C/C++实现的,本质上也是Native层,这里把它抽离出来是为了更好的理解。Java世界经由JNI层通过IPC方式和Native世界交互。而Android平台上最为神秘的IPC方法就是Binder了,后续会进行介绍。

总结自:

[深入理解Android卷一全文-第一章]阅读前的准备工作

Android系统架构与系统源码目录