The Android Emulator is the main tool Android developers use to test their apps. Google has just made integrating the Android Emulator within a continuous testing pipeline easier by open sourcing the Android Emulator Container Scripts and two related tools.
The Android Emulator Container Scripts are a set of Python and shell scripts meant to automate the process of running the Android emulator in a Docker container. This makes the use of an Android emulator instance running remotely within a continuous testing pipeline, says Google.
Developers can easily choose which emulator version to download and create a Dockerfile to contain it. The command supporting this is emu-docker which allows developers to choose a system image and and emulator version from a list and then manually download it using wget. Once the files are available locally, Docker can be used to build the image and run it with the proper port mapping in place:
docker run -e "ADBKEY=$(cat ~/.android/adbkey)" --device /dev/kvm--publish 5556:5556/tcp --publish 5555:5555/tcp <docker-image-id>
This last step can be automated with the provided ./run.sh script. Once the container is running, communication with the emulator is enabled through port 5555:
adb connect localhost:5555
ADB is also used to track failures due to bugs and to diagnose their cause.
Two key pieces of the the Android Emulator Container Scripts are the Android emulator download script and the Docker image generator. The former aims to automate the emulator download step described above. Currently, it only supports downloading the current version of the emulator, but Google say it will eventually support the possibility of downloading older versions to enable reproducing legacy test results. The Docker image creator is responsible to create a suitable environment for the Android emulator to run. This includes supporting ADB, gRPC, and WebRTC. This script is only supported on Linux, at the time being, but it will be ported to macOS and Windows as well, according to Google.
As an additional bonus, the containerized Android emulator can be run inside a Web browser with WebRTC. This requires running two additional containers, one for the Envoy web proxy required by gRPC, and another for nginx, which will serve the emulator React app. Remote streaming of the emulator can also be used to identify and diagnose bugs.
To use the Android Emulator Container Scripts, you need Docker, Docker-compose, and KVM, which is mostly a concern if you attempt to use a Cloud service to run the container. Both Python 2 and Python 3 are supported.