0%

使用docker编译安卓源码

安装docker

在WSL2(Ubuntu 18.04)中安装docker并配置自启动

配置docker源

使用阿里云的加速服务,解决下载镜像速度慢的问题
打开容器镜像服务
镜像中心 - 镜像加速器
将加速器地址写入/etc/docker/daemon.json,格式为:

1
2
3
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}

重启docker

1
sudo service docker restart

克隆仓库

编译安卓5.0到6.0,则克隆android-5分支

1
git clone https://github.com/XhyEax/docker-aosp -b android-5

7.0及以上直接克隆即可

1
git clone https://github.com/XhyEax/docker-aosp

配置源码保存路径(可选)

默认保存到~/aosp-root (即/root/aosp-root)

1
export AOSP_VOL=~/Android/

也可修改aosp中的AOSP_VOL

手动配置镜像版本(可选)

以编译6.0系统为例,修改aosp的第十二行为:

1
AOSP_IMAGE=${AOSP_IMAGE:-kylemanna/aosp:5.0-lolipop}

所有tag:dockerhub kylemanna/aosp tags

启动容器 进入bash

用于测试文件夹映射是否正确,进入后执行ls

1
./aosp

注意:不要执行exit,会关闭容器。使用Ctrl+P+Q从容器中Detach即可

以root用户进入bash

用于编译系统

使用VSCode Docker插件(推荐)

VSCode中安装Docker插件后,在Containers中右键打开的aosp容器,Attach Shell

使用命令行

查询容器id

启动docker容器后,复制容器id(用户名后面的字符)
也可以使用docker ps查询
(下面是使用命令提取出第一个容器id)

登录bash
1
2
cid=$(docker ps | grep aosp | cut -d" " -f1) && echo $cid
docker exec --privileged -u root -it $cid bash

已有源码:直接编译系统

进入容器的bash后,打开源码目录,执行以下命令:

1
2
3
4
5
prebuilts/misc/linux-x86/ccache/ccache -M 100G
source build/envsetup.sh
lunch aosp_arm-eng
cpus=$(grep ^processor /proc/cpuinfo | wc -l)
make -j $[2*$cpus]

注意

如果需要编译手机(如nexus5)使用的系统镜像,还需要下载驱动文件。
见:Ubuntu 19.10 编译安卓6.0.0_r1源码
并修改脚本中的aosp_arm-engaosp_hammerhead-userdebug

无源码:下载源码并编译

1
2
cd tests
bash ./build-aosp.sh

该脚本下载的是android-6.0.0_r1的代码,编译目标为aosp_arm-eng,如需更换请自行修改脚本

删除容器

docker ps找到容器id,执行docker rm -f 容器id删除

参考

tiann/docker-aosp
使用docker创建aosp编译环境
docker下载镜像太慢的解决方案
Docker退出容器不关闭容器的方法