Android系统开发--1.源码下载

由于国情特殊,想要直接下载 Android 的源码是很费劲的事,需要搭梯子才行,但幸好有很多高校,企业都提供了 Android 源码的镜像,方便下载,我使用的是清华大学的镜像,为清华大学点赞。具体的使用说明参考清华大学开源镜像站使用说明即可。
下面也记录一下自己的操作。

1. 安装 git

Android 的源码是使用 git 进行管理的, 所以我们先要安装 git

1
2
3
sudo apt install git
git config --global user.name "qiushao"
git config --global user.email "qiushaox@gmail.com"

2. 下载 repo 工具

Android 源码工程并不是单独的一个 git 仓库,而是由非常多的git仓库组成的。目前估计有上百个独立的git仓库。 要手动一个一个 clone 这些仓库是不可能的,所以 google 开发了一个 repo 工具,通过 repo 来下载所有的仓库,所有的代码。repo 的安装方法如下:

1
2
3
4
5
6
mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod +x ~/bin/repo
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
echo 'export REPO_URL="https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/"' >> ~/.bashrc
source ~/.bashrc

3. 下载 Android 源码

1
2
3
4
mkdir -p ~/source/android-8.1
cd ~/source/android-8.1
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r52
repo sync

具体要下哪个分支可以查看Android分支列表

repo sync 要跑好几个小时,这个要看你的网速怎样了。 以后要更新代码的话,也只要执行 repo sync 命令即可。如果 sync 过程中出错了,只再跑 repo sync 即可。

4. 下载 kernel 源码

我们后面的学习中会用到 kernel 的源码, 所以这里也一起下载了,还是使用的清华的镜像。

1
2
3
4
cd ~/source/android-8.1
mkdir kernel
cd kernel
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git

上面下载好的是 master 分支的 kernel,不一定适用我们的 Android 版本。
具体要下载哪个分支的 kernel 源码,我们可以通过查看模拟器预置的 kernel 版本是多少,再下载同样版本的 kernel 即可。
我们可以先编译完系统,再到 out 目录看, 具体编译环境的配置,及编译步骤后面会详细介绍。

1
2
3
4
5
6
7
8
9
10
11
12
qiushao@qiushao-PC:~/source/android-8.1$ cd out/target/product/generic_kktv/
qiushao@qiushao-PC:~/source/android-8.1/out/target/product/generic_kktv$ ls
advancedFeatures.ini config.ini hardware-qemu.ini obj system.img vendor.img
android-info.txt data installed-files.json previous_build_config.mk system-qemu.img vendor-qemu.img
build_fingerprint.txt dex_bootjars installed-files.txt ramdisk.img system-qemu.img.qcow2 vendor-qemu.img.qcow2
cache encryptionkey.img installed-files-vendor.json recovery userdata.img version_num.cache
cache.img encryptionkey.img.qcow2 installed-files-vendor.txt root userdata-qemu.img
cache.img.qcow2 fake_packages kernel-ranchu symbols userdata-qemu.img.qcow2
clean_steps.mk gen module-info.json system vendor
qiushao@qiushao-PC:~/source/android-8.1/out/target/product/generic_kktv$ file kernel-ranchu
kernel-ranchu: Linux kernel x86 boot executable bzImage, version 3.18.74+ (android-build@vpee10.mtv.corp.google.com) #1 SMP PREEMPT Thu Oct 12 17:14:25 UTC 2017, RO-rootFS, swap_dev 0x5, Normal VGA
qiushao@qiushao-PC:~/source/android-8.1/out/target/product/generic_kktv$

可见 Android 8.1 系统预置的内核版本是 3.18 , 再查看一下 kernel 有哪些分支:

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
cd ~/source/android-8.1/goldfish
qiushao@qiushao-PC:~/source/android-8.1/kernel/goldfish$ git branch -a
master
remotes/origin/HEAD -> origin/master
remotes/origin/android-3.10
remotes/origin/android-3.18
remotes/origin/android-3.4
remotes/origin/android-4.14
remotes/origin/android-4.4
remotes/origin/android-goldfish-2.6.29
remotes/origin/android-goldfish-3.10
remotes/origin/android-goldfish-3.10-k-dev
remotes/origin/android-goldfish-3.10-l-mr1-dev
remotes/origin/android-goldfish-3.10-m-dev
remotes/origin/android-goldfish-3.10-n-dev
remotes/origin/android-goldfish-3.18
remotes/origin/android-goldfish-3.18-dev
remotes/origin/android-goldfish-3.4
remotes/origin/android-goldfish-3.4-l-mr1-dev
remotes/origin/android-goldfish-4.14-dev
remotes/origin/android-goldfish-4.4-dev
remotes/origin/android-goldfish-4.9-dev
remotes/origin/heads/for/android-goldfish-3.18-dev
remotes/origin/linux-goldfish-3.0-wip
remotes/origin/master
remotes/origin/tparker-recovery
qiushao@qiushao-PC:~/source/android-8.1/kernel/goldfish$

目前 aosp 用的都是 goldfish 的内核, 所以我们需要 checkout 的是 remotes/origin/android-goldfish-3.18 :

1
git checkout -b android-goldfish-3.18 remotes/origin/android-goldfish-3.18

至此我们就下载好 Android 和 kernel 的源码了,接下来我们可以编译运行它们了。