一、docker容器准备
按照以下容器配置 aosp 源码编译基础容器 Dockerfile
设置的工作目录为 /aosp,输出目录为 /out,缓存目录为 /ccache
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
git \
git-lfs \
gnupg \
flex \
bison \
build-essential \
zip \
curl \
zstd \
unzip \
rsync \
bc \
ccache \
python3 \
python-is-python3 \
ninja-build \
cmake \
lz4 \
libssl-dev \
libelf-dev \
libncurses5 \
libncurses5-dev \
libxml2-utils \
xsltproc \
lib32z1-dev \
libc6-dev-i386 \
libgl1-mesa-dev \
libx11-dev \
x11proto-core-dev \
openjdk-17-jdk \
adb \
fastboot \
sudo \
vim \
less \
file \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
RUN curl -fsSL \
https://storage.googleapis.com/git-repo-downloads/repo \
-o /usr/local/bin/repo && \
chmod +x /usr/local/bin/repo
COPY code-server_4.99.4_amd64.deb /tmp/
RUN apt-get update && \
apt-get install -y /tmp/code-server_4.99.4_amd64.deb && \
rm -f /tmp/code-server_4.99.4_amd64.deb && \
rm -rf /var/lib/apt/lists/*
#ARG CODE_SERVER_VERSION=4.99.4
#RUN curl -fsSL https://code-server.dev/install.sh | sh -s -- --version ${CODE_SERVER_VERSION}
ENV USE_CCACHE=1
ENV CCACHE_DIR=/ccache
ENV OUT_DIR=/out
WORKDIR /aosp
EXPOSE 8080
CMD ["/bin/bash"]然后按照一下配置配置 docker-compose.yml
其中,配置了工作目录为 /aosp,指定环境变量中的输出目录以及缓存目录
services:
aosp:
build:
context: .
dockerfile: Dockerfile
# 构建时传入代理(仅 build 阶段使用,不会进入最终容器)
args:
HTTP_PROXY: ${HTTP_PROXY:-}
HTTPS_PROXY: ${HTTPS_PROXY:-}
NO_PROXY: ${NO_PROXY:-localhost,127.0.0.1,.local}
image: aosp-build:android14
container_name: aosp-android14
working_dir: /aosp
stdin_open: true
tty: true
environment:
OUT_DIR: /out
USE_CCACHE: "1"
CCACHE_DIR: /ccache
PASSWORD: "asgk487921"
ports:
- "1823:8080"
volumes:
- /mnt/lv_ssd/docker_volume/aosp/android14/android:/aosp
- /data/aosp/out:/out
- /data/aosp/ccache:/ccache
# AOSP 编译通常需要较大的共享内存
shm_size: "8gb"
command:
- code-server
- --bind-addr
- 0.0.0.0:8080
- --auth
- password
- /aosp完成配置后,执行 docker compose build aosp 执行编译构造容器,然后执行 docker compose up -d 启动容器
二、源码传输并编译
容器启动后,先通过 sudo docker compose exec aosp bash 进入容器 bash 中,然后执行一下命令开始同步
# 1. 首先进入工作目录下
cd /aosp
# 【可选】由于代码量太大了,aosp源码大小为180G左右,编译后的产物90G左右,建议配置一个快点的代理
export http_proxy=http://10.44.0.10:18080
export https_proxy=http://10.44.0.10:18080
# 2. 第一次执行时,需要执行一下仓库来创建一个空的代码仓
repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_rXX
# 这里可以选择 android-14.0.0_r75 分支
# 3. 开始同步
repo sync -c -j8
同步完成后,即可从源码编译,CPU 10400 源码编译耗时大概 4小时左右
# 1. 进入工作目录下
cd /aosp
# 2. 激活aosp系统环境变量
source build/envsetup.sh
# 3. 选择编译目标平台,可按需选择
lunch aosp_cf_x86_64_auto-trunk_staging-userdebug
# 4. 开始编译
m编译完成后,即可开始测试编译出的安卓系统产物,可参照 使用cuttlefish虚拟机测试AOSP程序
三、相关测试样例
为了更进一步确保编译出来的产物无问题,且虚拟机可用,此章节将继续介绍相关的样例编译过程以及测试验证过程