使用 Docker 在 Ubuntu 24.04 编译 Android 15(AOSP)

为什么选择 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 组后,继续下面的步骤。


  1. 设置构建环境
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,并确保有执行权限。


  1. 构建 Docker 镜像
docker build -t aosp-builder .

  1. 启动构建环境

假设你的 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 没有名称对应项。你仍然可以正常编译和运行一切。


  1. 编译 AOSP

进入容器后运行:

source build/envsetup.sh
lunch aosp_arm64-trunk_staging-userdebug
m

构建过程会以你主机的 UID/GID 运行,不会造成权限问题。


你现在拥有了一个最小、可生产使用的 AOSP 15 构建环境,适用于本地构建与 CI/CD 自动化流程。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部