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

为什么选择 Podman 而不是 Docker?

尽管 Docker 是容器工作流的标准,并且与 CI/CD 平台(如 GitHub Actions、GitLab CI、Jenkins)集成更紧密,但 Podman 在本地 AOSP 构建中有以下优势:

  • 默认无须 root:对开发者来说更安全、操作更简单,不需要 daemon 或 sudo
  • 文件权限正确:容器中创建的文件保留主机用户的权限
  • 权限问题更少:避免 Docker 常见的挂载权限和 UID 不匹配的问题
  • 无守护进程:容器以用户进程运行(无需 dockerd),本地调试更方便

Podman 更适合本地开发环境。如果你专注于高效编译 AOSP,Podman 往往是更好的选择。


  1. 安装 Podman
sudo apt update
sudo apt install -y podman

  1. 创建最小化 AOSP 构建容器镜像
  • ~/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
  • 构建镜像:
cd ~/aosp-builder
podman build -t aosp-builder -f .

  1. 准备 AOSP 源码(在主机)

如果你已同步完成:

cd ~/aosp-src

如果还没同步:

repo init -u https://android.googlesource.com/platform/manifest -b android-15.0.0_r30
repo sync -c -j$(nproc)

  1. 启动 AOSP 构建容器

从 AOSP 源码目录运行 Podman:

cd ~/aosp-src
podman run -it --rm -v "$PWD":/workspace -v /home/administrator/.cache/ccache:/ccache aosp-builder bash

这会将本机源码挂载到容器内 /workspace


  1. 编译 Android 15 AOSP(在容器中)
source build/envsetup.sh
lunch aosp_arm64-trunk_staging-userdebug
m

  1. 编译完成

你会看到如下输出:

[100% 169029/169029] touch out/soong/ndk_abi_diff.timestamp (priority: 0)

#### build completed successfully (04:39:53 (hh:mm:ss)) ####

  1. 验证主机上的文件权限

退出容器后,你可以确认所有生成文件(包括 out 文件夹)都属于当前用户:

ls -ld out

示例:

drwxr-xr-x 14 administrator administrator 4096 May  7 04:10 out

发表评论

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

滚动至顶部