為什麼選擇 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
群組後,請繼續以下步驟。
- 建立建構環境
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 自動化。