使用 Docker 執行 Android 模擬器
May 30, 2023
為了進行 Android App 的自動化測試,將好幾台手機的電池都弄到膨脹了。因此後來將一部分會讓手機負載比較重的測試轉移到 Android 模擬器上執行。
但是要安裝 Android SDK 與 Android 模擬器花費了我不少時間,所以打起了 Docker 的主意,是否能將 Android 模擬器暈做所需要的環境都包成 Image,這樣就可以降低部屬的複雜度。
好用的參考範例 - budtmo/docker-android
之前都是用自己做的 docker image ,可是那個版本在 Debug 上有一些不方便。
後來發現有人也有做類似的 image
這個 image 使用 noVNC 來導出模擬器的畫面,但是我覺得很聰明的地方在於。大部分的 Image 都是使用 android emulator 本身自己的 VNC 功能( qemu 提供的),但是 emualtor 的 vnc 參數無法與 accel 同時使用
因此 budtmo/docker-android 用了另外一種方法,他使用 x11VNC 也就他並非是連到 emulator 本身,而是連到 container 內的桌面再去操作 emulator。這樣就可以同時使用 emulator 的 accel 功能,同時也能 noVNC 使用瀏覽器操作 emulator,讓 Debug 變得快速又方便
啟動指令
docker run --privileged \ -p 6080:6080 \ -p 5554:5554 \ -p 5555:5555 \ -e DEVICE="Nexus 5" \ -e AUTO_RECORD=false \ -e APPIUM=false \ --rm \ --name android-container \ budtmo/docker-android-x86-8.1
如果要增加 emulator 參數,可以使用
-e EMULATOR_ARGS="-skin 1080x1920"
連線到 container 內
docker exec -it android-container bash
基於 budtmo/docker-android 想改進的地方
swind/android-emulator
參考上面這些 Repository 設定檔所拼湊出來的版本
主要功能
使用方式
建立一個 start.sh 檔案,方便啟動
#!/bin/sh ANDROID_EMULATOR_EXTRA_ARGS="-skin 1080x1920 -memory 2048 -gpu host -no-boot-anim -qemu" ANDROID_AVD_EXTRA_ARGS="--device 8 --force" docker run --privileged -it -p 6080:6080 \ -e ANDROID_AVD_EXTRA_ARGS="${ANDROID_AVD_EXTRA_ARGS}" \ -e ANDROID_EMULATOR_EXTRA_ARGS="${ANDROID_EMULATOR_EXTRA_ARGS}" \ --name android-emulator --rm $1
之後如果要啟動 android 26 的版本只需要下
./start.sh swind/android-emulator:android_26
之後就可以連到 http://localhost:6080 透過 VNC 操作 emulator 了
參考資料
Google 官方的 docker emulator container scripts