Android架构的最新理解-----基于Android11

前言

网上对于Android架构的描述大多过于抽象,生涩难懂,层级划分不够清晰,而且关于安卓的介绍过于老旧,对应现在的安卓版本无法使用,自己开发过程是使用的Android11,为了方便自己开发,记录自己学习过程中的问题和理解。

本人为驱动开发,对于安卓应用层的程序不关注,故很多不讨论,主要研究安卓应用层之下的。

层级

这是Android官网上的层级图,说实话,感觉这个图可能不适合新手,因为很多的层级具有两段性,先入为主的层级图会影响大家的理解,大家最主要的是看文字介绍,然后自己构建层级图

HAL(Hardware Abstraction Layer)

HAL即硬件抽象层,是Android系统中位于最底层的一个组件,主要负责硬件相关功能的抽象和封装,为上层的软件提供统一的硬件访问接口。在HAL中,包含了与硬件设备相关的驱动程序和库,它们将底层硬件的操作和控制抽象化,使得不同硬件厂商的设备可以在Android系统上被统一地管理和访问。

linux的外设驱动都属于HAL层,例如wifi、触摸、显示、喇叭等驱动,此外HIDL也属于HAL层。

HAL的主要作用包括:

  • 提供与硬件设备相关的抽象接口,与设备无关的上层代码通过这些接口来访问硬件设备。
  • 将硬件相关接口的实现细节封装起来,隐藏底层硬件的差异性,从而提高系统的可移植性。
  • 管理着设备的初始化、配置、数据传输等功能,为上层应用提供标准化的访问接口。

Native层

Native层是Android系统中介于Framework层和底层硬件之间的一层,它主要包括了一些用C/C++编写的系统库和运行时环境,如libc、libm、libstdc++等。Native层通常运行在Linux内核之上,提供了一些底层服务和系统调用接口,同时也为Java层提供了部分功能的支持。

wifi的wpa_supplicant就属于native层。

Native层的重要作用包括:

  • 提供了Android系统底层应用的支持,如文件操作、网络通信、内存管理等。
  • 负责与底层硬件通信,包括驱动程序的加载、设备控制等。
  • 为Android系统提供了更高的性能,在某些对性能要求较高的场景下,开发者可以通过Native层进行优化。

Framework层

Framework层是Android系统的核心部分之一,位于HAL之上,也是手机应用开发的关键所在。Framework层包含了各种核心服务和系统组件,如Activity Manager、Content Provider、View System等,它们提供了应用开发者和用户之间的桥梁,实现了Android系统的各种功能。

Framework层的主要功能包括:

  • 提供各种系统组件和服务,如Activity生命周期管理、资源管理、通知管理等。
  • 定义了应用程序框架和开发模式,包括四大组件(Activity、Service、BroadcastReceiver、ContentProvider)等。
  • 实现了各种系统服务,如电话服务、WIFI服务、位置信息服务等,为应用提供底层支持

ART

安卓的ART(Android Runtime)是安卓操作系统中的一种运行时环境,用于执行应用程序的字节码。在安卓 5.0(Lollipop)及以后的版本中,ART取代了之前的运行时环境Dalvik虚拟机,成为默认的运行时环境。

以下是一些关于安卓的ART的特点和功能:

  1. AOT编译和Ahead-of-Time预编译:与Dalvik采用的JIT(Just-In-Time)编译不同,ART引入了AOT(Ahead-of-Time)编译。ART在应用安装时会将应用的字节码转换为本地机器码,这样可以提高应用的运行速度,减少应用运行时的性能开销。
  2. 垃圾回收优化:ART还对垃圾回收机制进行了优化,引入了更加高效的垃圾回收算法和机制,进一步提高了系统的性能和稳定性。
  3. 支持多种ABI架构:ART支持多种架构的处理器,包括ARM、MIPS、x86等,使得应用可以在不同类型的设备上运行和兼容。
  4. 内存管理改进:ART引入了更好的内存管理机制,包括更低的内存占用和更好的内存分配策略,提高了系统的稳定性和性能。
  5. 更好的应用兼容性:ART对新的Java语言特性和API做了更好的支持,使得开发者可以更好地利用新功能和更新的API。

简言之,ART取代了之前的JAVA虚拟机,现在的JAVA虚拟机可以理解为就是ART。

相关推荐
委员1 天前
基于NodeMCU的物联网电灯控制系统设计
单片机·物联网·嵌入式·nodemcu··lu_asr01·gy-302
憧憬一下2 天前
PCIe_Host驱动分析_设备枚举
arm开发·嵌入式硬件·嵌入式·pcie·linux驱动开发
憧憬一下4 天前
PCIe_Host驱动分析_地址映射
arm开发·嵌入式硬件·嵌入式·linux驱动开发·pci/pcie
aspirestro三水哥9 天前
Linux: 通过/proc/pid/stack查看程序卡在内核的什么地方
linux·运维·服务器·嵌入式
@启智森10 天前
【C语言】浮点数的原理、整型如何转换成浮点数
c语言·开发语言·嵌入式·float·int·浮点数
@启智森10 天前
【Uboot】Uboot启动流程分析
linux·c++·嵌入式·uboot·启动·底层
不想写代码的我11 天前
基于ZYNQ-7000系列的FPGA学习笔记11——IP核之单端RAM读写
笔记·学习·fpga开发·嵌入式·zynq
7yewh11 天前
嵌入式 linux Git常用命令 抽补丁 打补丁
linux·arm开发·git·嵌入式硬件·ubuntu·嵌入式·嵌入式软件
Jason_zhao_MR12 天前
基于米尔全志T527开发板的OpenCV进行手势识别方案
人工智能·mcu·opencv·计算机视觉·嵌入式
昊虹AI笔记12 天前
Source Insight的使用经验汇总
嵌入式