在 Ubuntu 24.04 上使用 Docker 編譯 Android 15(AOSP)

為什麼選擇 Docker 而非 Podman?

雖然 Podman 支援 rootless 建構,但 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 自動化。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端