前言

Android 是一个适用于移动设备的开源操作系统,也是由 Google 主导的对应开源项目。
此网站和 Android 开源项目 (AOSP) 代码库可为您提供所需信息和源代码,供您创建定制的 Android 操作系统版本,将设备和配件移植到 Android 平台,同时确保您的设备符合兼容性要求,从而让 Android 生态系统维持良好稳健的运行环境,以便更好地服务于数百万用户。(来自AOSP官网)

因为国内的魔改ROM大部分使用体验不佳,就出现了一批类原生ROM

又因为大佬们精力有限,很多设备都用不上好用的类原生,只能自己编译

然后Jackie就发现网上很多与AOSP有关的文章都已经过时了(甚至有的文章的Docker教程还在用ubuntu 18.04)

所以就想写一些新的文章去代替它们

为什么要用Docker

因为Docker可以方便Windows用户编译

同时也可以方便某些linux发行版编译(例如arch,arch由于滚动更新,工具链会出点问题,编译kernel时会error)

Docker的性能也不错 在Linux平台开启了kvm的情况下性能损耗接近0,Windows的性能损耗就会大点(没办法 Docker现在在Windows里面只有两个后端,一个wsl一个hyperv,都是虚拟机,性能损耗就会大点)

安装Docker

Windows平台

参考官方安装手册

Linux平台

Ubuntu用户

更新包索引,并安装需要的依赖

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

然后用curl导入Docker源仓库的GPG Key

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

然后添加Docker APT软件源

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

最后,安装Docker

sudo apt install docker-ce docker-ce-cli containerd.io

Arch用户

pacman安装docker即可

配置Docker(可选)

参考Arch Wiki

启动Docker服务

执行sudo systemctl enable --now docker即可(Ubuntu用户的Docker服务应该在安装完Docker后就已经自动启动了,可以用sudo systemctl status docker查看)

创建Image

首先 我们需要Dockerfile去创建我们的Docker Image

FROM ubuntu:24.04
# 更换镜像源
RUN rm /etc/apt/sources.list && \ 
    echo "deb http://mirrors.bfsu.edu.cn/ubuntu/ jammy main restricted universe multiverse\n # deb-src http://mirrors.bfsu.edu.cn/ubuntu/ jammy main restricted universe multiverse\n deb http://mirrors.bfsu.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse\n # deb-src http://mirrors.bfsu.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse\n deb http://mirrors.bfsu.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse\n # deb-src http://mirrors.bfsu.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse\n deb http://mirrors.bfsu.edu.cn/ubuntu/ jammy-security main restricted universe multiverse\n # deb-src http://mirrors.bfsu.edu.cn/ubuntu/ jammy-security main restricted universe multiverse" >> /etc/apt/sources.list
# 安装编译的依赖和一些可能需要用到的工具
RUN apt-get upgrade && apt-get update && \
    apt-get install -y curl gnupg iputils-ping nano git vim flex bison gperf build-essential rsync zip zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev libncurses5 x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip libssl-dev python-is-python3 openjdk-8-jre
#安装repo
RUN curl https://mirrors.bfsu.edu.cn/git/git-repo -o /bin/repo && \
    chmod a+x /bin/repo
RUN echo "export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'" >> /root/.bashrc

创建一个目录,在目录内创建Dockerfile(不用后缀名,这就是完整的文件名)

然后在目录内执行docker build -t docker_aosp:latest(当然 你想改镜像名和版本号也是没有问题的)

等待Docker执行完毕,我们的Image就创建好了

创建Volume

Volume可以被Docker Container挂载,性能相比直接挂载硬盘上的文件夹也会更好一些,所以用来存放我们的AOSP源码是再合适不过了

Windows用户

Windows用户可以直接在Docker Desktop内创建Volume

Linux用户

执行docker volume create vol-name即可

创建容器并挂载Volume

打开shell,执行docker run -it --name container-name image-name --mount source=vol-name,destination=/src /bin/bash就能创建并进入容器了(如果不想进入容器,可以在-it处增加一个d参数,这样容器就会在后台运行)

Volume也会被挂载到容器内部的/src(当然自己更换挂载点也是没有任何问题的)

容器只需要创建一次就好了

进入容器

运行docker exec -it image-name /bin/bash就能进入容器内了

如果无法进入容器,log为Error response from daemon: Container ********* is not running,执行docker start container-name启动容器,再执行docker exec就能进入容器内了

然后,进入Volume目录,开始编译AOSP吧!