Android系统开发入门-1.Android系统源码下载编译

由于国情特殊,想要直接下载 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-10
cd ~/source/android-10
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r8
repo sync

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

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

4. 编译 Android 源码

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
qiushao@qiushao-pc:~$ cd source/android-10/
qiushao@qiushao-pc:~/source/android-10$ source build/envsetup.sh
qiushao@qiushao-pc:~/source/android-10$ lunch aosp_x86_64-eng
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=10
TARGET_PRODUCT=aosp_x86_64
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=x86_64
TARGET_2ND_ARCH=x86
TARGET_2ND_ARCH_VARIANT=x86_64
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-5.0.0-32-generic-x86_64-Ubuntu-18.04.3-LTS
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=QD1A.190821.011
OUT_DIR=out
============================================
qiushao@qiushao-pc:~/source/android-10$ make -j

如果我们已经知道要编译的 product 的名字了, 可以直接 lunch product_name 就行,
不确定的话,就 lunch 不加参数,然后再选择要编译的 product。
然后就是静静地等待编译完成了, Android10 的编译居然没有任何错误,一次性编译过了,
看来 google 对编译这块做了不少改进,Android9.0以前总是会遇到各种各样的问题。
大概花了40分钟。相比旧电脑速度提高了6倍这样。

5. 运行编译好的系统

Android 系统源码里面预置了 emulator 虚拟机, 我们只要 source, lunch 完之后,就可以直接执行 emulator 命令。
emulator 会自动找到 out 目录下对应的 product 目录下的镜像来启动

1
2
3
4
5
6
7
8
9
10
qiushao@qiushao-pc:~/source/android-10$ emulator
emulator: WARNING: Couldn't find crash service executable /home/qiushao/source/android-10/prebuilts/android-emulator/linux-x86_64/emulator64-crash-service

emulator: WARNING: system partition size adjusted to match image file (3083 MB > 800 MB)

qemu_ram_alloc_user_backed: call
emulator: INFO: boot completed
emulator: INFO: boot time 9973 ms
emulator: Increasing screen off timeout, logcat buffer size to 2M.
emulator: Revoking microphone permissions for Google App.

等待虚拟机启动完成,查看一下系统信息确认是我们刚刚编译的系统。
android-emulator
product, 编译时间,用户名都能对上,说明是我们刚刚编译的系统了。