本文主要介绍Android的系统构架,Android使用linux内核(Marcokernel)linux android环境搭建,然而Android的构架又与Linux系统有所不同,因而在介绍Android系统构架之前,我们先一上去了解一下Linux系统的构架。
Linux系统构架
Linux构架如右图所示:
Linux系统构架
Linux系统通常由4个组成部份:内核Kernel、shell、文件系统和应用程序。内核、shell和文件系统一起组成了基本的操作系统结构,它们让用户可以管理文件、运行程序并使用系统。
Linux开机后,内核启动,激活内核空间,具象硬件、初始化硬件参数等,运行并维护虚拟显存、调度器、信号及进程间通讯(IPC)。
内核启动后,再加载Shell和用户应用程序,用户应用程序使用CC++编撰,被编译成机器码,产生一个进程,通过系统调用(Syscall)与内核系统进行移动。进程间交流须要使用特殊的进程间通讯(IPC)机制。
Android系统构架
看完了Linux构架红旗linux6.0教程,我们再来一起瞧瞧Android系统构架。Android的系统十分复杂和庞大,底层以Linux内核为基础,下层采用带有虚拟机的JAVA层,通过JNI技术,将上下层打通。
先来看一张Google提供精典Android构架图,从上往下依次为应用层(SystemApps)、应用框架层(JavaAPIFramework)、运行层(系统Native库和Android运行时环境)、硬件具象层(HAL)、Liunx内核(MarcoKernel)。每一层都有对应的进程、系统库。
Android系统构架
该层中包含所有的Android应用程序,包括电话、相机、日历等,我们自己开发的Android应用程序也被安装在这层;大部份的应用使用JAVA开发,现今Google也开始力推kotlin进行开发
这一层主要提供建立应用程序是可能用到的各类API,Android自带的一些核心应用就是使用这种API完成的linux android环境搭建,开发者也可以通过使用API来建立自己的应用程序。
1)系统Native库
Android包含一些C/C++库,这种库能被Android系统中不同的组件使用
2)Android运行时环境
Android包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能。虚拟机也在该层启动。
每位Android应用都有一个专有的进程,这种进程每位都有一个Dalivik虚拟机实例,并在该实例中运行。
Android的硬件驱动与Linux不同,传统的Liunx内核驱动完全存在于内核空间中。并且Android在内核外部降低了一个硬件具象层(HAL-HardwareAbstractionLayer),把一部份硬件驱动放在了HAL层。
为何Android要如此做呢?
Linux内核采用了GPL合同,假如硬件厂商须要支持Linux系统,就须要依照GPL合同公开硬件驱动的源代码linux删除命令,这势必会影响到硬件厂家的核心利益。
Android的HAL层运行在用户空间,HAL是一个“空壳”,Android会依照不同的须要,加载不同的动态库。这种动态库由硬件厂家提供。硬件厂家把相关硬件功能写入动态库,内核中只开放一些基本的读写插口操作。这样一些硬件厂家的驱动功能就由内核空间联通到了用户空间。
Android的HAL层遵守Apache合同,并不要求它的配套程序,因而厂家提供的驱动库不须要进行开放,保护了硬件厂家的核心利益。
Android平台的基础是Linux内核,例如ART虚拟机最终调用底层Linux内核来执行功能。Linux内核的安全机制为Android提供相应的保障,也容许设备制造商为内核开发硬件驱动程序。
下一节将会一上去瞧瞧Android系统是怎样启动的。