为什么选择 Docker 而不是 Podman?
虽然 Podman 支持无 root 权限构建,但 Docker 对大多数用户来说仍是更好的选择,尤其在 CI/CD 流水线中:
- 原生集成 Jenkins、GitHub Actions、GitLab CI
- 拥有成熟的生态系统和社区支持
如果你正在考虑使用 Podman,也可以阅读:
在 Ubuntu 24.04 使用 Podman 编译 Android 15 (AOSP)
前置条件:安装 Docker
请参考这篇详细指南:
在 Ubuntu 24.04 上安装 Docker
当 Docker 正常运行,且你的用户已经加入 docker
组后,继续下面的步骤。
- 设置构建环境
mkdir ~/aosp-builder && cd ~/aosp-builder
Dockerfile
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
ENV LANG=C.UTF-8
ENV USE_CCACHE=1
ENV CCACHE_DIR=/ccache
ENV CCACHE_EXEC=/usr/local/bin/ccache
RUN apt-get update && apt-get install -y --no-install-recommends \
git-core \
gnupg \
flex \
bison \
build-essential \
zip \
curl \
zlib1g-dev \
libc6-dev-i386 \
x11proto-core-dev \
libx11-dev \
lib32z1-dev \
libgl1-mesa-dev \
libxml2-utils \
xsltproc \
unzip \
fontconfig \
rsync \
openssl \
&& apt-get clean
COPY ccache /usr/local/bin/ccache
WORKDIR /workspace
请将你自定义的 ccache
可执行文件放在 ./ccache
,并确保有执行权限。
- 构建 Docker 镜像
docker build -t aosp-builder .
- 启动构建环境
假设你的 AOSP 15 源码已经同步到 ~/aosp-15
:
docker run -it --rm --user $(id -u):$(id -g) \
-v .:/workspace -v /home/administrator/.cache/ccache:/ccache \
aosp-builder bash
这会为你打开一个容器中的 shell,并使用主机用户的权限运行。
关于 Shell 提示与组警告
如果你使用了 --user
参数并指定了容器内未定义于 /etc/passwd
或 /etc/group
的 UID/GID(如 1000:1000),你可能会看到:
groups: cannot find name for group ID 1000
I have no name!@<container-id>:/workspace$
这是预期行为且无害,仅表示该 UID 没有名称对应项。你仍然可以正常编译和运行一切。
- 编译 AOSP
进入容器后运行:
source build/envsetup.sh
lunch aosp_arm64-trunk_staging-userdebug
m
构建过程会以你主机的 UID/GID 运行,不会造成权限问题。
你现在拥有了一个最小、可生产使用的 AOSP 15 构建环境,适用于本地构建与 CI/CD 自动化流程。