Android采用分层架构,从上到下分别为应用程序层(apps、System apps)、应用程序框架层(Java API Framework)、系统运行库和运行环境层(Libraries+Android Runtime)和Linux核心层(HAL+Linux Kernel)

  • System apps
    可以理解为内置的系统应用,可以像调用Java APIFramework一样区调用系统应用,例如我们调用日历区添加一个日常提醒。

  • Java ApI Framewor
    android中常用的组件

  • Native c/c++ Libraries
    本地库比Java API Framework更加偏低层,这里包含OpenGl、多媒体框架等内容。

  • Android Runtime
    Android运行时环境,也就是Android虚拟机。Android5.0之前是使用Dalvik虚拟机,Dalvik虚拟机是基于JIT(Just in TIme)及时编译的引擎。Android5.0之后采用ART虚拟机,ART虚拟机是基于AOT(Ahead Of Time)作为编译引擎

  • Hardware Abstrction Layer
    硬件抽象层主要是媒体、蓝牙、传感器的库模块。

  • Linux Kernel
    Android平台的最底层,直接与硬件交互,负责硬件驱动、进程管理、内存管理、网络管理等功能。

什么是JIT和AOT?
在Android中Java代码会被转换成DEX字节码文件,DEX字节码文件是Android虚拟机可以识别的,Android虚拟机把字节码在转化为机器能识别的机器码。
Dalvik虚拟机给予JIT编译,JIT也叫及时编译器,JIT工作原理是在应用运行时,首先将一部分DEX字节码转化为机器码,在程序执行的过程中再陆续将更多代码编译并缓冲,这样做的好处是内存占用少,但CPU再应用运行期间相对消耗大。
AOT叫做提前编译器,它是在应用的安装期间就将DEX字节码转化为了机器码,并将其存储在设备上。这样做的好处是在应用运行时占用CPu资源少一些,因为已经转化成了机器码,相对内存占用上多一些。