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

為什麼選擇 Podman 而非 Docker?

雖然 Docker 是容器化工作流程的標準,並且與 CI/CD 平台(例如 GitHub Actions、GitLab CI、Jenkins)整合得更緊密,但 Podman 在本地 AOSP 編譯環境中具備以下優勢:

  • 預設無需 root 權限:對個人開發者來說更安全也更簡單,不需要守護程序或 sudo
  • 正確的檔案擁有權:容器內建立的檔案在主機上會保留正確的使用者擁有權
  • 較少的權限問題:避免 Docker 常見的掛載權限與 UID 不一致問題
  • 無需守護程序:容器以使用者程序獨立執行(不需要 dockerd),更容易在本地除錯

Podman 特別適合本地開發環境,當你重視簡潔性、檔案權限一致性與隔離性多於 CI 相容性時,它是更好的選擇。若你專注於有效率地作為開發者編譯 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

發佈留言

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

返回頂端