使用Docker运行Android编译环境需满足Docker、KVM虚拟化和磁盘空间三项基础条件,拉取budtmo/docker-android:build_11.0等镜像后挂载项目目录即可执行./gradlew assembleDebug,支持自定义构建和CI/CD集成。

直接用 Docker 运行容器化的 Android 编译环境,核心是把 JDK、Android SDK、Gradle 和构建工具链全部打包进镜像,让每次编译都在干净、一致的环境中进行。不用再手动装 SDK、配 JAVA_HOME、等 sdkmanager 下载 platform-tools——一条命令拉起,几秒就 ready。
确认基础条件
宿主机需满足三项硬性要求:
- Docker 已安装并正常运行(
docker --version可查) - 启用硬件虚拟化支持:Linux 上运行
kvm-ok,输出KVM acceleration can be used才行;macOS/Windows 需通过 WSL2 或 Docker Desktop 启用嵌套虚拟化 - 磁盘空间充足(单个 Android 11 镜像约 2–3 GB,建议预留 10 GB 以上)
拉取并启动预编译镜像
官方维护的 budtmo/docker-android 提供开箱即用的编译镜像,例如:
-
budtmo/docker-android:emulator_11.0_v2.0(含模拟器,适合测试) -
budtmo/docker-android:build_11.0(轻量纯构建版,无 GUI,CI 场景首选)
启动一个带工作目录挂载的编译环境:
docker run -it --rm \ -v $PWD:/home/androidusr/project \ -w /home/androidusr/project \ --device /dev/kvm \ budtmo/docker-android:build_11.0 \ /bin/bash
进入后即可直接执行 ./gradlew assembleDebug,APK 会生成在宿主机当前目录的 app/build/outputs/apk/debug/ 中。
自定义构建镜像(可选进阶)
若项目依赖特定 Gradle 版本或私有 SDK 插件,可基于官方镜像二次构建:
- 新建
Dockerfile,FROM 官方 build 镜像 - COPY 项目所需的
gradle/wrapper/gradle-wrapper.properties或本地 maven 仓库缓存 - RUN 替换默认 JDK 或预装 NDK(如需 JNI 构建)
- 构建并打标签:
docker build -t my-android-builder:11.0 .
后续所有 CI 节点或新成员只需 docker run my-android-builder:11.0,无需任何前置配置。
集成到 CI/CD 流水线
在 GitHub Actions、GitLab CI 或 Jenkins 中调用时,关键点有三个:
- 指定 runner 必须支持 KVM(例如自建 Linux runner,非 GitHub-hosted 默认实例)
- 使用
docker run --rm保证每次构建环境绝对干净 - 将 APK、日志、覆盖率报告等产物通过 volume 挂载导出到宿主机,供后续步骤使用
示例 GitLab CI 片段:
build-android:
image: docker:stable
services:
- docker:dind
script:
- docker run --rm -v $(pwd):/workspace -w /workspace budtmo/docker-android:build_11.0 ./gradlew assembleRelease
artifacts:
paths:
- app/build/outputs/apk/release/app-release.apk
不复杂但容易忽略:镜像版本要和项目 compileSdkVersion 和 targetSdkVersion 对齐,比如项目用 Android 13,就别拉 emulator_11.0 镜像去编译,否则会报找不到 API 33 的资源。











