如何下载AOSP (Android Open Source Project)
准备条件
你可能临时起意想要尝试,最好先确认一下自己的软硬件环境
- 内存16GB起步,编译会出现
fatal error: runtime: out of memory
- 磁盘200GB+
如果你是要看源码,用不着下载
本文采用的是清华源 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/,
你可以可以按原文里面的步骤
下载repo工具
repo就是一个git脚本的集合,其实还是git公交,很多git命令可以直接套用。
1 | mkdir ~/bin |
repo init 初始化
我没有通过初始包的方式下载,包含了自己不需要的,而且全部工程有点大。我们做一些精简。拉取指定的分支,如果需要特定的分支 去https://source.android.com/source/build-numbers.html#source-code-tags-and-builds 选择Tag
repo init --depth=1 -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-11.0.0_r39
- –depth=1 表示只下载最近版本的代码,只保留最近的commit版本。使用–depth 可以节省本地磁盘空间,加速下载,对于开发够用了
repo sync 下载
repo sync -c -f --no-tags --no-clone-bundle -j`nproc`
- -c 或者–current-branch表示只拉取当前分支代码.
- –no-tags 不拉取tags
- –no-clone-bundle 不使用clone.bundle
- -f 如果sync失败,继续同步
- –force-sync 如果文件目录有差异,强制覆盖掉
- -j 参数指定同时运行多少个job, 看具体的源是否支持足够的数量
执行玩会出现success的log,大概80GB左右,出错可重新执行。
如果出现如下的错误,上面的命令追加重新跑一次
1 | error: Unable to fully sync the tree. |
常用的repo命令
创建分支
1
repo start --all 自定义分支名
删除分支
1
repo abandon 已创建的本地分支名
切换分支
1
2repo init -b xxx --depth=1
repo sync -c -frepo回滚
1
2
3repo sync -d
repo forall -c 'git reset --hard' # Remove all working directory (and staged) changes.
repo forall -c 'git clean -f -d' # Clean untracked files查看当前项目分支
1
2repo branch
repo status可以看到每一个git 工程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28project art/ branch android_11_study_ck
project bionic/ branch android_11_study_ck
project bootable/recovery/ branch android_11_study_ck
project build/blueprint/ branch android_11_study_ck
project build/make/ branch android_11_study_ck
project build/soong/ branch android_11_study_ck
project compatibility/cdd/ branch android_11_study_ck
project cts/ branch android_11_study_ck
project dalvik/ branch android_11_study_ck
project developers/build/ branch android_11_study_ck
project developers/demos/ branch android_11_study_ck
project developers/samples/android/ branch android_11_study_ck
project development/ branch android_11_study_ck
project device/amlogic/yukawa/ branch android_11_study_ck
project device/amlogic/yukawa-kernel/ branch android_11_study_ck
project device/common/ branch android_11_study_ck
project device/generic/arm64/ branch android_11_study_ck
project device/generic/armv7-a-neon/ branch android_11_study_ck
project device/generic/art/ branch android_11_study_ck
project device/generic/car/ branch android_11_study_ck
project device/generic/common/ branch android_11_study_ck
project device/generic/goldfish/ branch android_11_study_ck
project device/generic/goldfish-opengl/ branch android_11_study_ck
project device/generic/mini-emulator-arm64/ branch android_11_study_ck
project device/generic/mini-emulator-armv7-a-neon/ branch android_11_study_ck
project device/generic/mini-emulator-x86/ branch android_11_study_ck
project device/generic/mini-emulator-x86_64/ branch android_11_study_ck
project device/generic/opengl-transport/ branch android_11_study_ck
AOSP 目录简介
目录结构
https://elinux.org/Master-android
1 | ./ |
abi(Application Binary Interface) https://developer.android.com/ndk/guides/abis
art(Android runtime) https://source.android.com/devices/tech/dalvik/
bionic 一些基础库
- libm(library math)
- libc(library c):在 glibc 的基础上做了裁剪与修改的,为了规避GNU GPL等商业行为的约束
- libstdc++(library standard C++):并非完整版,只做了简单支持
linker:装载链接相关库
bootable
bootable 下仅包含 recovery 此文件夹,其实就是启动 Android recovery 模式相关的代码build
Android Build 系统,用来定制各种编译规则。主要由 makefile 组成。
比如在编译时要执行的 source build/envsetup.sh 就位于 build 下cts(Compatibility Test Suite)
一个自动化测试工具 CTSdalvik
dalvik 虚拟机 , https://source.android.com/devices/tech/dalvik/developers
一些可运行的 Android 示例项目,可以单独拉出来运行device
包含不同品牌手机独有的设备信息external
一些开源的第三方组件,这里仅列了一下大家比较熟悉的如glide、junit、okhttp、sqlite 等frameworks
Android 中大家熟悉的 Frameworks,应用程序框架层1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16av
base
compile
data-binding
ex
mff
minikin
ml
multidex
native
opt
rs
support
volley
webview
wilhelm- Android support 包 com.android.support:support-v4、v7 等都位于 frameworks/support 文件夹下
- webview 就位于 frameworks/webview 文件夹下
- 各种 Service,比如ActivityManagerService、SystemService、WindowManagerService、InputManagerService等就位于 frameworks/base 文件夹下
- keystore、opengl 等也位于 frameworks/base 文件夹下
hardware
包含了 android HAL(硬件抽象层)相关代码。硬件抽象层介于 Linux内核驱动程序与 Android 系统之间。对 Linux 驱动进行了封装,使操作系统级别可以忽略底层实现的细节。libcore
一些核心库libnativehelper
JNI 相关的一些类ndk
原生开发工具包out
编译完后输出的所有相关文件都位于此文件夹下,包括生成的各种 img 就位于 out/target/product/hammerhead 下packages
各种内置的 apk、ContentProvider、输入法、壁纸等- 蓝牙、浏览器、相机、邮件、音乐、NFC 等都位于 packages/apps 下面
- MediaProvider、DownloadProvider、MmsProvider等都位于 packages/providers 下
- 壁纸相关位于 packages/wallpapers 下
pdk(Platform Development Kit)
平台开发套件,仅包含了一些供硬件抽象层开发使用的必要组件,供一些 OEM 厂商用来适配及测试最新的Android 系统,加快第三方厂商的更新速度。
加快OEM厂商的update速度prebuilts
一些预构建成二进制的库 prebuilts
https://developer.android.com/ndk/guides/prebuiltssystem
Android 的部分系统源码及一些工具,主要是在各种 java 启动程序起来前的部分。工具比如 adb、fastboot、keystore 等,其他如 mkbootimg、init 进程等
- vendor
包含不同供应商的私有的二进制库