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。

相关推荐
四格12 小时前
如何使用 Bittly 根据业务流程自动发送串口指令
物联网·嵌入式
fanged18 小时前
裸机编一个Hello World!(TODO)
嵌入式
FreakStudio1 天前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
python·嵌入式·面向对象·电子diy
weixin_632077631 天前
udp聊天室
udp·网络编程·嵌入式·编程·聊天室
fanged3 天前
Linux下的ADSP(TODO)
嵌入式
winddevil3 天前
[rCore学习笔记 027]地址空间
rust·嵌入式·rcore
宇努力学习4 天前
C语言编译原理
c语言·开发语言·嵌入式
玄奕子5 天前
使用vscode上传git远程仓库流程(Gitee)
vscode·gitee·嵌入式·git仓库
—你的鼬先生5 天前
基于树莓派ubuntu20.04的ros-noetic小车
python·嵌入式·ros·树莓派项目
倒霉熊dd5 天前
Cortex-M3架构学习:异常
学习·嵌入式·cortex-m3架构