基于Android Framework的C/C++开发实战
一、Android Framework架构概览
Android开源项目 (AOSP) 是公开发布且可修改的 Android 源代码。任何人都可以下载并修改 AOSP 以适配其设备。AOSP 提供 Android移动平台的功能完备的代码实现。
Android是Google开发的基于Linux底层实现的开源操作系统,Android平台的主要组件如图,包含了Linux内核、HAL层、Native C/C++库、Android运行时环境、Java API框架与应用等。
二、Android系统核心组件
(1).安卓系统应用
包含了电子邮件、短信、日历、浏览器和相机等核心应用。
(2).Java API框架
Java API框架位于APP应用层和Native C/C++库之间,它可以为Android App开发提供Java/Kotlin API接口,比如Activity等,也可以通过JNI(Java Native Interface)接口调用Native C/C++本地库,比如OpenGL、SQLite等。
在Android系统中,Native C/C++库是连接Linux内核与Java API框架的桥梁。
(3).Native C/C++库
Native C/C++库位于Android系统的底层,它运行在Linux内核之上,处于Android Runtime运行时环境(ART/Dalvik 虚拟机)和Android Framework框架(Java/Kotlin API)之下,Android底层许多核心组件和服务都需要使用C/C++代码编写的原生代码进行构建。
Android系统的文件系统、进程管理、内存管理、网络协议栈等核心功能主要由Native C/C++库实现。
硬件抽象层(HAL)与特定硬件(比如摄像头、传感器、音频设备、蓝牙驱动等)通信的接口通常由Native C/C++库实现,并通过JNI接口向Java API框架层提供统一的API调用接口。
Native C/C++库可以复用现有的C/C++跨平台项目代码,比如它可以移植Linux/Unix生态的成熟的OpenGL、SQLite等库文件,进行复用,避免了二次开发。
如果直接使用C/C++代码开发安卓应用,可以利用Android NDK工具链直接从本地代码访问某些原生的Native C/C++库。
(4).Android运行时环境ART
Android运行时环境ART(Android Runtime),在Android 5.0以后的版本中,ART替代了早期的Dalvik虚拟机,其核心目标是通过预编译优化来提升应用程序的启动速度和性能。
ART的核心组件如下:
1.编译器:比如dex2oat工具,支持将DEX字节码编译为本地机器码。
2.运行时库:比如libart.so,提供运行时支持。
3.垃圾回收器:支持高效地分配和回收内存。
(5).硬件抽象层 (HAL)
HAL层的核心功能是将硬件设备的操作抽象化,向Android Java框架和应用层提供统一的API接口。
例如,当安卓App请求调用Camera API拍照时,Android框架通过JNI或HIDL(Hardware Interface Definition Language)触发HAL模块的对应函数,HAL层再通知Linux内核去加载和调用相机驱动程序。
Android设备的每个硬件模块,比如音频、相机或传感器等,都有对应的HAL模块,这些HAL模块通常是以".so"动态链接库文件的形式存放在Android系统的特定目录(比如/vendor/lib/hw/目录)中的。
HAL层提供一组标准化的C/C++接口函数来访问硬件资源。例如,音频模块的HAL层提供open_output_stream()函数接口来处理音频输出。
为了确保性能和安全性,HAL层在用户空间运行,与Linux内核隔离,减少了系统崩溃的风险。HAL层可以通过系统调用(比如ioctl)与Linux驱动交互。
(6).Linux 内核
Android操作系统基于Linux内核构建,Linux内核在Android平台中负责管理底层硬件资源(如CPU、内存、存储和网络设备),并提供进程调度、内存管理、文件系统管理和设备驱动等关键功能,比如,ART依赖Linux内核来实现底层的线程管理和内存回收等功能。
Android系统针对原生Linux内核进行了大量修改和扩展以适应移动设备的特殊需求,主要扩展包括:
a.进程间通信IPC:采用Binder机制替代传统IPC。<