前言
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(可选)
启动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吧!
如果Jackie没有及时回复也请不要着急
学习太忙了qwq