Android架构
AOSP 的软件堆栈包含以下层,如图:
- Android app:系统原生一些应用,位于system/app,像图库、文件管理器等
- Privileged app:系统原生一些高特权应用,位于system/priv-app,像SettingsProvider、TelephonyProvider等
- Device manufacturer app:厂商定制的应用,一般厂商定制的内容位于vendor目录下
- Android API:供开发者使用的api, 在Android Studio中下载的Android SDK Platform
- Android framework:Android fwk,像AMS,WMS等都属于fwk层
- System services:系统服务,像system_server、SurfaceFlinger 和 MediaService等,Android 框架 API 提供的功能可以与系统服务进行通信,以访问底层硬件
- Android Runtime:AOSP 提供的 Java 运行时环境。 ART 会将应用的字节码转换为由设备运行时环境执行的处理器专有指令
- Hardware abstraction layer :HAL 是一个抽象层,其中包含硬件供应商要实现的标准接口。HAL 让 Android 无需关注较低级别的驱动程序实现。借助 HAL,您可以顺利实现相关功能,而不会影响或更改更高级别的系统
- Native daemons and libraries:原生守护程序包括 init、healthd、logd 和 storaged,这些守护程序直接与内核或其他接口进行交互,并且不依赖于基于用户空间的 HAL 实现。原生库包括 libc、liblog、libutils、libbinder 和 libselinux,这些原生库直接与内核或其他接口进行交互,并且不依赖于基于用户空间的 HAL 实现
- Kernel:内核是操作系统的核心部分,与设备上的底层硬件进行通信
源码代码结构
~/source$ tree -d -L 1
├── art:全新的ART运行环境,Android5.0之后java虚拟机就使用ART
├── bionic :提供了一个简化的 C 库实现,用于 Android 操作系统
├── bootable:包含引导加载程序代码和系统映像
├── build:构建系统脚本和工具
├── cts:Android 兼容性测试套件
├── dalvik:提供了 Dalvik 虚拟机的实现,是 Android 早期的基于堆栈的 Java 执行环境
├── developers:提供示例、文档和工具,以帮助开发者开发 Android 应用
├── development:应用程序开发相关 提供应用开发的工具, 应用例子,monkey命令,shell脚本和python脚本
├── device:设备相关配置 设备产品定制目录, 该目录是厂商和产品公司定制文件比较多的地方
├── external:开源模组相关文件 外部第三方开源的库和工具,比如ppp, wpa_supplicant, libz, libcurl等
├── frameworks:应用程序框架,Android系统核心部分,由Java和C++编写, 包括各种系统资源, 后台服务、子系统的native代码
├── hardware:主要是硬件抽象层的代码, 如gps, wifi, viberate
├── kernel:主要是硬件抽象层的代码, 如gps, wifi, viberate
├── libcore:核心库相关文件 Android 系统中支持众多 Java 标准的库,例如 java.lang 包,libart库,JSON库
├── libnativehelper:核心库相关文件 Android 系统中支持众多 Java 标准的库,例如 java.lang 包,libart库,JSON库
├──
├── out:编译完成后代码输出在此目录
├── packages:系统内置的app源码
├── pdk:Platform Development Kit 的缩写,平台开发套件, PDK的目标是帮助芯片组供应商和原始设备制造商迁移到新的版本
├── platform_testing:Android平台测试程序
├── prebuilts:预编译文件夹, x86和arm架构下预编译的一些资源,如ndk工具包, gcc编译器等
├── sdk:sdk和模拟器,编译sdk规则目录, Android的SDK包含该平台为应用程序开发人员提供的开发工具,主要是所有公开API的集合,应用程序开发人员可以借助SDK中的API快速的进行应用的开发.
├── system:Android底层文件系统库、应用和组件,如busybox, init进程
├── test:Android Vendor测试框架,如vts(vendor test suit) ,Mainline Test Suite (MTS)
├── toolchain:工具链文件,一些python测试脚本
├── tools:工具文件,一些特殊命令, 如acloud命令用于连接谷歌云端工作站的,apkzlib用于apk打包的
└── vendor:厂商定制目录