Android系统可以分为五层:应用层、应用框架层、系统运行层、硬件抽像层,Linux内核层。
应用层(SystemApps)
Android系统内置的系统应用以及非系统应用都属于应用层,这一层的应用直接与用户交互,为用户提供UI页面,向用户展示应用的信息,同时用户也可以在UI页面上输入信息。
常见的系统应用:相机、联系人、电话、系统设置等;
非系统应用:微信、抖音、QQ音乐、高德地图等;
应用层的开发语言主要是Java或kotlin。
应用框架层 (Framework)
Framework层主要是为应用层提供系统接口,例如:相机应用需要打开摄像头需要调用Framework层提供的系统接口,Android系统具备的能力都通过这一层提供给上层应用。
Framework层的开发语言主要是Java。
系统运行层 (Native Library + Android Runtime)
通过上图可以看出系统运行层分为Native C/C++Library 和 Android Runtime
Native C/C++Library
主要为应用框架层提供接口,Framework层可以通过Android NDK去访问Native C/C++库;
开发语言主要是 C和C++语言
ART(Android Runtime )
Android应用的运行环境,可以理解为类似于Java虚拟机
硬件抽像层 (Hardware Abstraction Layer)
硬件抽象层(HAL)位于Framework和Linux内核之间抽象出来的,对下层Linux驱动程序进行封装,用于屏蔽底层硬件的差异,对上层Framework层提供标准统一的接口,Framework层不需要关心硬件的差异性。
例如:小米A手机使用X厂商的摄像头,B手机使用了Y厂商的摄像头,对于A和B手机的相机应用(CameraApp)来说不需要区分具体使用了哪家厂商的摄像头,CameraApp只需要调用Framework层提供的接口即可,具体的差异在HAL层来实现,A手机软件的HAL层去调用X厂商提供的驱动程序,B手机软件的HAL层去调用Y厂商提供的驱动程序即可。
Linux内核层(Linux Kernel)
Linux Kernel层主要是为Android硬件设备提供驱动程序,例如:摄像头驱动、Wifi驱动、蓝牙驱动、屏幕驱动等。