摘要:本节主要来讲解Android的系统架构

阅读本文大约需要花费10分钟。

文章首发微信公众号:IngresGe

专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢!

[Android取经之路] 的源码都基于Android-Q(10.0) 进行分析

[Android取经之路] 系列文章:

《系统启动篇》

  1. Android系统架构
  2. Android是怎么启动的
  3. Android 10.0系统启动之init进程
  4. Android10.0系统启动之Zygote进程
  5. Android 10.0 系统启动之SystemServer进程
  6. Android 10.0 系统服务之ActivityMnagerService
  7. Android10.0系统启动之Launcher(桌面)启动流程
  8. Android10.0应用进程创建过程以及Zygote的fork流程
  9. Android 10.0 PackageManagerService(一)工作原理及启动流程
  10. Android 10.0 PackageManagerService(二)权限扫描
  11. Android 10.0 PackageManagerService(三)APK扫描
  12. Android 10.0 PackageManagerService(四)APK安装流程

《日志系统篇》

  1. Android10.0 日志系统分析(一)-logd、logcat 指令说明、分类和属性
  2. Android10.0 日志系统分析(二)-logd、logcat架构分析及日志系统初始化
  3. Android10.0 日志系统分析(三)-logd、logcat读写日志源码分析
  4. Android10.0 日志系统分析(四)-selinux、kernel日志在logd中的实现​

《Binder通信原理》

  1. Android10.0 Binder通信原理(一)Binder、HwBinder、VndBinder概要
  2. Android10.0 Binder通信原理(二)-Binder入门篇
  3. Android10.0 Binder通信原理(三)-ServiceManager篇
  4. Android10.0 Binder通信原理(四)-Native-C\C++实例分析
  5. Android10.0 Binder通信原理(五)-Binder驱动分析
  6. Android10.0 Binder通信原理(六)-Binder数据如何完成定向打击
  7. Android10.0 Binder通信原理(七)-Framework binder示例
  8. Android10.0 Binder通信原理(八)-Framework层分析
  9. Android10.0 Binder通信原理(九)-AIDL Binder示例
  10. Android10.0 Binder通信原理(十)-AIDL原理分析-Proxy-Stub设计模式​​​​​​​​​​​​​​
  11. Android10.0 Binder通信原理(十一)-Binder总结

 

本文主要介绍Android的系统架构,Android使用linux内核(Marco kernel),但是Android的架构又与Linux系统有所不同,因此在介绍Android系统架构之前,我们先一起来了解一下Linux系统的架构。

 

    Linux系统架构

     Linux架构如下图所示:

Android系统架构-[Android取经之路]_第1张图片

  • Computer Resources:硬件资源
  • Kernel:内核
  • Shell:shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器
  • Programs/Utilities/Tools:库函数、工具等
  • File systems:文件系统是文件存放在磁盘等存储设备上的组织方法。Linux系统能支持多种目前流行的文件系统,如EXT2、 EXT3、 FAT、 FAT32、 VFAT和ISO9660。
  • User Application: Linux应用,标准的Linux系统一般都有一套被称为应用程序的程序集,它包括文本编辑器、编程语言、X Window、办公套件、Internet工具和数据库等

 

Linux系统一般由4个组成部分:内核Kernel、shell、文件系统和应用程序。内核、shell和文件系统一起组成了基本的操作系统结构,它们让用户可以管理文件、运行程序并使用系统。

Linux开机后,内核启动,激活内核空间,抽象硬件、初始化硬件参数等,运行并维护虚拟内存、调度器、信号及进程间通信(IPC)。

内核启动后,再加载Shell和用户应用程序,用户应用程序使用C\C++编写,被编译成机器码,形成一个进程,通过系统调用(Syscall)与内核系统进行联通。进程间交流需要使用特殊的进程间通信(IPC)机制。

看完了Linux架构,我们再来一起看看Android系统架构。Android的系统非常复杂和庞大,底层以Linux内核为基础,上层采用带有虚拟机的JAVA层,通过JNI技术,将上下层打通。

先来看一张Google提供经典Android架构图,从上往下依次为应用层(System Apps)、应用框架层(Java API Framework)、运行层(系统Native库和Android运行时环境)、硬件抽象层(HAL)、Liunx 内核(Marco Kernel)。每一层都有对应的进程、系统库。

 

Android系统架构-[Android取经之路]_第2张图片

  • 应用层(System Apps)

该层中包含所有的Android应用程序,包括电话、相机、日历等,我们自己开发的Android应用程序也被安装在这层;大部分的应用使用JAVA开发,现在Google也开始力推kotlin进行开发

 

  • 应用框架层(Java API Framework)

这一层主要提供构建应用程序是可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的,开发者也可以通过使用API来构建自己的应用程序。

 

  • 运行层

    1)系统Native库

      Android包含一些C/C++库,这些库能被Android系统中不同的组件使用

    2)Android运行时环境

     Android包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能。虚拟机也在该层启动。

每个Android应用都有一个专有的进程,这些进程每个都有一个Dalivik虚拟机实例,并在该实例中运行。

 

  • 硬件抽象层(HAL)

     Android的硬件驱动与Linux不同,传统的Liunx内核驱动完全存在于内核空间中。但是Android在内核外部增加了一个硬件抽象层(HAL-Hardware Abstraction Layer),把一部分硬件驱动放到了HAL层。

     为什么Android要这么做呢?

     Linux内核采用了GPL协议,如果硬件厂商需要支持Linux系统,就需要遵照GPL协议公开硬件驱动的源代码,这势必会影响到硬件厂家的核心利益。

    Android的HAL层运行在用户空间,HAL是一个“空壳”,Android会根据不同的需要,加载不同的动态库。这些动态库由硬件厂家提供。硬件厂家把相关硬件功能写入动态库,内核中只开放一些基本的读写接口操作。这样一些硬件厂家的驱动功能就由内核空间移动到了用户空间。

    Android的HAL层遵循Apache协议,并不要求它的配套程序,因此厂家提供的驱动库不需要进行开放,保护了硬件厂家的核心利益。

 

  • Liunx 内核(Marco Kernel)

Android平台的基础是Linux内核,比如ART虚拟机最终调用底层Linux内核来执行功能。Linux内核的安全机制为Android提供相应的保障,也允许设备制造商为内核开发硬件驱动程序。

 

下一节将会一起来看看Android系统是如何启动的,欢迎关注我,谢谢!

微信公众号:IngresGe

Android系统架构-[Android取经之路]_第3张图片

 

更多相关文章

  1. 转:Android电话系统之-rild
  2. 【Android Linux内存及性能优化】(八) 系统性能分析工具
  3. 索骥馆-编程语言之《Android内核剖析》扫描版[PDF]
  4. android中MediaRecorder的架构介绍
  5. Android CPU架构
  6. Android 系统服务管家servicemanager启动过程详解
  7. 细谈Android应用架构

随机推荐

  1. mysql-5.7.21-winx64免安装版安装--Windo
  2. 详解mysql8.0创建用户授予权限报错解决方
  3. 最新mysql-5.7.21安装和配置方法
  4. MySQL5.7.21解压版安装详细教程图解
  5. mysql 5.7.21 解压版通过历史data目录恢
  6. 浅谈mysql8.0新特性的坑和解决办法(小结)
  7. mysql 从 frm 文件恢复 table 表结构的3
  8. 详解MySQL安装及MySQL8.0新密码认证方式
  9. MySQL数据库监控软件lepus使用问题以及解
  10. 详解关于MySQL 8.0走过的坑