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