AndroidSDK:一行命令搭建 Android 开发环境

文章目录

  • [AndroidSDK:一行命令搭建 Android 开发环境](#AndroidSDK:一行命令搭建 Android 开发环境)

AndroidSDK:一行命令搭建 Android 开发环境

做 Android 开发的人大概都遇到过这种场景:本地跑得好好的项目,换台机器就编译不过。环境变量没配、SDK 版本不对、Gradle 版本冲突,排查半天最后发现就是环境差异导致的。

thyrlian/AndroidSDK 这个项目提供了一个 Docker 镜像,把完整的 Android SDK 开发环境打包好,拉下来就能用。目前在 GitHub 上有 1,382 颗 Star。

核心思路

这个镜像的设计理念是只提供最基础的 SDK,不预装多余的包。用户可以维护一个外部的 SDK 目录,挂载到任意容器里。好处是不用每次都重新下载,也能按需安装自己要的组件。

按照 Android 的许可条款,SDK 本身不能重新分发,所以这个镜像走的是最小化打包的路线。Gradle 和 Kotlin 编译器随镜像提供,主要为了方便试用。实际项目里推荐用 Gradle Wrapper,这样能锁定 Gradle 版本,避免构建环境不一致。

基础用法

最简单的方式是直接从 Docker Hub 拉镜像:

复制代码
docker pull thyrlian/android-sdk

然后把预下载的 SDK 拷贝到挂载目录:

复制代码
docker run -it --rm -v $(pwd)/sdk:/sdk thyrlian/android-sdk bash -c 'cp -a $ANDROID_HOME/. /sdk'

后续更新 SDK 也是在挂载目录上操作,不用进容器。多个容器同时用同一份 SDK 时,建议挂载为只读模式,避免写入冲突。

远程访问

镜像支持 SSH 连接,有三种配置方式:构建镜像时内置 authorized_keys、从宿主机挂载、或者运行时拷贝进去。选哪种看实际场景,CI 环境里挂载的方式比较灵活。

另外还有一套带 VNC 支持的镜像 thyrlian/android-sdk-vnc,拉起来之后用 VNC 客户端连上去就能看到容器桌面。适合需要在容器里跑模拟器的场景,ARM 模拟器不需要 KVM,x86 模拟器则要求宿主机是 Linux 且开启了 KVM。

构建优化

项目里附带了一个 Gradle 分发包镜像服务器的搭建方案。Gradle 一次下载大概 100MB,多个构建任务重复下载既浪费带宽也拖慢速度。搭个本地镜像服务器,把 Gradle wrapper 的下载源指向它,构建速度能快不少。

模拟器和测试

ARM 模拟器不依赖宿主机架构,在 macOS、Linux、VM 里都能跑,但性能一般。x86 模拟器需要 KVM 加速,只能跑在 Linux 物理机或支持嵌套虚拟化的云实例上。创建 AVD、启动模拟器、检查设备状态这些操作都有对应的命令,文档里写得很清楚。

项目还集成了 Firebase Test Lab 的用法,可以把 UI 测试部署到 Google 的真机和模拟器上跑,支持多设备并行分片。

内存管理

在 Docker 容器里跑 JVM 有个老问题:早期版本的 JVM 感知不到容器的内存限制,容易被 OOM killer 杀掉。JDK 8u131 之后引入了容器支持,默认开启,基本解决了这个问题。文档里针对不同退出码(137、1、3、134)分别解释了原因和处理方式,排查内存问题时可以参考。

项目采用 Apache 许可证,Docker Hub 上可以直接拉取使用。

排查内存问题时可以参考。

项目采用 Apache 许可证,Docker Hub 上可以直接拉取使用。