AndroidSDK:Docker 里的 Android 开发环境
文章目录AndroidSDKDocker 里的 Android 开发环境1、解决什么问题2、怎么用3、SSH 和 VNC4、模拟器支持5、NFS 共享 SDK6、Gradle 镜像加速7、Firebase Test Lab8、内存管理AndroidSDKDocker 里的 Android 开发环境AndroidSDK 在 GitHub 上有 1,383 Star。这个项目把完整的 Android SDK 开发环境打包成了 Docker 镜像。装好 Docker拉取镜像就能直接做 Android 开发、构建、测试不用在本机折腾 SDK 安装和环境变量配置。1、解决什么问题做 Android 开发的人都碰到过这种情况新电脑搭环境SDK 下载慢版本不对环境变量配错构建工具和本机其他软件冲突。换台机器又得重来一遍。这个镜像的做法很直接——把 Android SDK、JDK、Gradle、Kotlin 编译器全装进一个容器里。用的时候 mount 一个外部 SDK 目录进去不用每次都重新下载。一套环境可以在任何机器上复现本地开发、CI 构建、团队协作都用同一份。2、怎么用拉取镜像dockerpull thyrlian/android-sdk启动容器把 SDK 目录挂载进去dockerrun-it-v$(pwd)/sdk:/opt/android-sdk thyrlian/android-sdk /bin/bash如果想保留 Gradle 缓存多挂一个目录dockerrun-it-v$(pwd)/sdk:/opt/android-sdk-v$(pwd)/gradle-caches:/root/.gradle/caches thyrlian/android-sdk /bin/bash镜像自带 Gradle Wrapper 支持会自动按项目配置的版本下载 Gradle不用手动管理版本。3、SSH 和 VNC容器支持 SSH 接入。构建镜像时把公钥放到指定目录启动后就能通过 SSH 连接。也可以把本机的 authorized_keys 文件直接挂载进去。VNC 方面项目提供了专门的 VNC 镜像thyrlian/android-sdk-vnc。启动后用 VNC 客户端连接 5901 端口密码是 android。这个主要是给模拟器用的因为模拟器需要图形界面。4、模拟器支持镜像支持 ARM 和 x86 两种模拟器。ARM 模拟器不依赖宿主机架构哪都能跑但性能一般。x86 模拟器需要 KVM 支持只能在 Linux 物理机或者支持嵌套虚拟化的云服务器上用。在容器里创建和启动模拟器echono|avdmanager create avd-ntest-ksystem-images;android-25;google_apis;armeabi-v7aemulator-avdtest-no-audio -no-boot-anim-accelon-gpuswiftshader_indirect模拟器启动后可以通过 adb 从容器外部连接。默认端口是 5037先杀掉本机的 adb server再adb connect 容器IP:5037就行。5、NFS 共享 SDK如果团队有多台机器共用同一份 SDK可以用 NFS 把 SDK 目录共享出来。一台机器搭 NFS server其他机器的容器通过挂载 NFS 目录来使用。避免每台机器各自下载一份 SDK。6、Gradle 镜像加速项目还提供了一个 Gradle 分发包的镜像服务器。把常用的 Gradle 版本下载到本地搭个 HTTP 服务容器里的 Gradle Wrapper 就从本地拉取不用每次从外网下载。Gradle 最新版压缩包有 100MB 左右多台机器反复下载确实浪费带宽。7、Firebase Test Lab项目有专门的镜像集成了 Google Cloud SDK可以直接把 UI 测试部署到 Firebase Test Lab 上跑。配置好 GCP 项目和服务账号密钥启动容器后用 gcloud 命令提交测试任务支持多设备并行执行。8、内存管理Docker 容器的内存限制和 JVM 的交互是个需要注意的点。老版本 JDK 不感知容器内存限制容易触发 OOM。JDK 8u131 之后加了容器支持JDK 10 默认开启。如果还在用老版本需要手动设置 JVM 参数让它读取 cgroup 的内存限制。这个镜像适合需要稳定、可复现 Android 构建环境的团队。不用在每台机器上重复配置 SDKCI 和本地开发用同一套环境减少了我机器上能跑这类问题。合需要稳定、可复现 Android 构建环境的团队。不用在每台机器上重复配置 SDKCI 和本地开发用同一套环境减少了我机器上能跑这类问题。