Android系统开发--2.使用docker构建Android编译环境

一般来说,使用 ubuntu 系统来编译 Android 系统会比较方便一点,问题会少一点,因为 google 官方就是在 ubuntu 上进行编译的,其他的发行版本没有验证过。虽说都是 linux 内核的发行版本,但各发行版的各种工具链的版本差异是很大的,之前在 archlinux, deepin 15.5 上尝试过编译android 6.0, 这过程就出现了各种奇怪的编译错误。虽然这些编译错误只要慢慢用心查,还是能找到处理方法的,但就是太折腾了。所以后面自己搞了一套 docker 的编译环境。无论你用哪个 linux 发行版,都可以不用折腾这些编译环境了。这套环境我在 Android 6.0, Android 8.1 上都编译验证过,没问题。具体的使用方法如下。

安装 docker

网上介绍 docker 的安装方法乱七八糟的,其实只要简单的一条命令就行了

1
2
curl -sSL https://get.docker.com/ | sh
sudo usermod -aG docker qiushao

编译 docker 镜像

我已经做好了一个可以用来编译 Android 各版本系统源码的 docker 镜像, 不想麻烦的话,直接用就行。

1
2
3
git clone https://github.com/qiushao/aosp_builder.git
cd aosp_builder
docker build -t aosp_builder:V1.0 .

构建出来的镜像用户名为 builder,

如果想要了解这个镜像的环境是怎么构建的,可以参考一下 aosp_builder 里面的 Dockerfile 文件。

使用方法

按上面的步骤操作完之后,应该生成一个 aosp_builder:V1.0 的docker 镜像了。
创建容器:

1
docker run -it --name aosp_builder -v ~/source:/home/builder/source -u builder aosp_builder:V1.0 /bin/bash

其中
-v ~/source:/home/builder/source 参数是将宿主机目录 ~/source 映射到 docker 容器的 /home/builder/source 目录。因为我宿主机上 Android 的源码放在 ~/source这个目录里面了。

-u builder 表示使用 builder 用户登录,不指定的话,会使用 root 用户登录,最好不要用 root 登录,用 root 用户登录的话,编译时产生的文件用户属主就是 root 了,在宿主机上要编辑或删除这些编译生成的文件就得用 sudo 了。

其他参数的意义就不作详细说明了,想要了解的话请查阅 docker 使用文档。

电脑重启后, 我们之前创建的容器还存在的, 我们不需要重新创建容器, 只要启动之前创建的容器就行:

1
2
docker start aosp_builder
docker exec -it aosp_builder /bin/bash

然后我们就可以按照 Android 的标准编译流程开编了