共计 2468 个字符,预计需要花费 7 分钟才能阅读完成。
前言
在之前的文章中介绍了 Android 系统源码的下载,这篇文章简单介绍一下源码结构,并结合 Android 系统结构,熟悉一下源码工程。
阅读工具
关于阅读源码的工具,这里使用的是 visual studio code,但是 visual studio code 本身不支持 java 和 c ++ 的相关提示,所以你必须安装 java 和 c 的拓展插件,帮助你更好的阅读代码。
源码结构
各个版本的源码目录结构基本上是大同小异,编译后的目录中会多一个 out 文件夹,里面用来存储编译后的文件。这里我下载的源码版本是 9.0 的,如果你不知道你下载的源码版本的话,可以打开 build->core->version_defaults.md 中找到 PLATFORM_SDK_VERSION 字段,PLATFORM_SDK_VERSION:=28 就是 Android 源码的版本。Android 源码目录结构如下:
art:Android Runtime,一种 App 运行模式,区别于传统的 Dalvik 虚拟机,旨在提高 Android 系统的流畅性
bionic:基础 C 库源代码,Android 改造的 C /C++ 库
bootable:Android 程序启动导引,适合各种 bootloader 的通用代码,包括一个 recovery 目录
build:存放系统编译规则及 generic 等基础开发包配置
compatibility:Android 兼容性计划
cts:Android 兼容性测试套件标准
dalvik:Android Dalvik 虚拟机相关内容
developers:Android 开发者参考文档
development:Android 应用开发基础设施相关
device:Android 支持的各种设备及相关配置
external:Android 中使用的外部开源库
frameworks:应用程序框架,Android 系统核心部分,由 Java 和 C ++ 编写
hardware:硬件适配接口
kernel:Linux Kernel,不过 Android 默认不提供,需要单独下载,只有一个 tests 目录
libcore:Android Java 核心类库
libnativehelper:Android 动态库,实现 JNI 库的基础
packages:应用程序包
pdk:Plug Development Kit 的缩写,本地开发套件
platform_testing:Android 平台测试程序
prebuilts:x86 和 arm 架构下预编译的一些资源
sdk:Android 的 Java 层 sdk
system:Android 底层文件系统库、应用和组件
test:Android Vendor 测试框架
toolchain:Android 工具链文件
tools:Android 工具文件
Android.bp:Android7.0 开始代替 Android.mk 文件,它是告诉 ndk 将 jni 代码编译成动态库的一个脚本
Makefile:全局 Makefile 文件,用来定义编译规则
Android 系统结构与源码的对应关系
在之前的文章中介绍了一下 Android 系统架构,对于 Android 系统架构每一层,Android 源码结构中都有相关目录与之对应。下图展示了在 Android 源码一级目录中,各框架层和部分目录的对应关系:
系统架构
对应关系
对于 Android 开发者而言,学习源码有助于帮助我们更好的理解 Android,为此我们一般学习 Framework 层的代码。接下来介绍一下应用层、应用框架层相关目录结构。
应用层
应用层位于整个 Android 系统的最上层,开发者开发的应用程序以及系统内置的应用程序都是在应用层。其中目录结构如下:
apps:核心应用程序
inputmethods:输入法目录
providers:内容提供者目录
screensavers:屏幕保护
services:通信服务
wallpapers:墙纸
应用框架层
应用框架层是系统的核心部分,一方面向上提供接口给应用层调用,另一方面向下与 C /C++ 程序库以及硬件抽象层等进行衔接。其中目录结构如下:
av:多媒体框架
base:Android 源码的主要核心目录
compile:编译相关
ex:文件解析器
hardware:硬件适配接口
layoutlib:布局相关
minikin:Android 原生字体,连体字效果
ml:机器学习
multidex:多 dex 加载器
native:native 实现
opt:一些软件
rs:Render Script,可创建 3D 接口
support:framework 支持文件
wilhelm:基于 Khronos 的 OpenSL ES/OpenMAX AL 的 audio/multimedia 实现
其中 base 目录中是应用框架层的主要核心代码,目录结构如下:
apct-tests:性能优化测试
api:android 应用框架层声明类、属性和资源
cmds:android 系统启动时用到的 commands
core:framework 的核心框架组件
data:android 下的资源 (字体、声音、视频、软盘等)
docs:android 项目说明
drm:实现权限管理,数字内容解密等模块的工作
graphics:图像渲染模块
keystore:秘钥库
libs:库信息 (界面、存储、USB)
location:位置信息
media:手机媒体管理 (音频、视频等)
native:本地方法实现 (传感器、输入、界面、窗体)
nfc-extras:近场通讯
obex:蓝牙
opengl:2D 和 3D 图形绘制
packages:框架层的实现 (界面、服务、存储)
proto:协议框架
rs:资源框架
samples:例子程序
sax:xml 解析器
services:各种服务程序
telecomm:telecomm 通信框架
telephony:电话通讯框架
tests:各种测试
vr:虚拟现实相关
wifi:wifi 模块
参考
Android 8.0.0-r4 源码目录结构详解
Android 系统架构与系统源码目录
Android 系统源码篇之(一)源码获取、源码目录结构及源码阅读工具简介
android framework 源码目录介绍