今日名言
再如何不可思议的事情,一旦做的次数多了,便会习惯直至麻木甚至开始乐在其中。 --猫腻 《将夜》
Android做的久了,有些东西自然而然就要了解 一些。对于Android系统源码来说,我们可能不需要改动它,但读懂它还是有必要的。
这里先放上几个查看源码的地址
AOSPXRef 这个地址是阿里云的,感觉起来会比较快,而且已经更新到10.0了
AndroidXRef 这个有时比较慢,目前为止只更新到9.0
下面的分析基于系统 Q - 10.0.0_r2
整个目录如下所示:
-
art:Android Runtime,一种App运行模式,区别于传统的Dalvik虚拟机,旨在提高Android系统的流畅性
-
bionic:基础C库源代码,Android改造的C/C++库
-
bootable:Android程序启动导引,适合各种bootloader的通用代码,包括一个recovery目录
-
build:存放系统编译规则及generic等基础开发包配置
-
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工具文件
目录解析
1. build
存放系统编译规则及generic等基础开发包配置,我们如果需要进行系统开发或者只是想改动系统源码然后编译一下系统,是需要对这块了解的。目录如下:
简单介绍如下:
目录名 | 介绍 |
---|---|
blueprint | 输入为.bp文件。输出为.ninja文件 |
core | 核心的编译规则makefile |
kati | kati is an experimental GNU make clone |
make | 以前的老的make系统 |
soong | 新的Build系统 |
target | AOSP自带的Target(模拟器)的一些makefile |
tools | 编译中使用的shell及python写的工具脚本 |
build/envsetup.sh | 编译初始化脚本 |
Android.bp:Android7.0开始代替Android.mk文件,它是告诉ndk将jni代码编译成动态库的一个脚本
Makefile:全局Makefile文件,用来定义编译规则
2. framework
Android核心应用都在这个framework中,我们经常说的framework层的开发就是基于这块,千万别觉得高大上,其实和我们平时写程序差不多,我们常说的分析系统源码,其实也只是分析到这一层而已。我们先看下这个目录下有啥:
简单介绍如下
目录名 | 介绍 |
---|---|
framework/av/ | 多媒体相关的native层源码目录 |
framework/base/ | 一些基础库代码,各种解析类、工具类都在这个里面 |
framework/compile/ | 编译相关的内容 |
framework/ex/ | ex文件解析器 |
framework/minikin/ | Android原生字体 |
framework/ml/ | 机器学习 |
framework/multidex/ | multi dex Loader |
framework/native/ | power、surface、input、binder等服务的native层实现源码目录 |
framework/opt/ | 一些基础软件,如:日历、网络、蓝牙 |
framework/rs/ | Render Script 可创建3D接口 |
framework/wilhelm/ | OpenSL ES/OpenMAX AL的audio |
**