MCPcopy
hub / github.com/budtmo/docker-android

github.com/budtmo/docker-android @v3.5.2-p0 sqlite

repository ↗ · DeepWiki ↗ · release v3.5.2-p0 ↗
110 symbols 367 edges 20 files 6 documented · 5%
README

Paypal Donate PRs Welcome codecov Join the chat at https://gitter.im/budtmo/docker-android GitHub release

Docker-Android is a docker image built to be used for everything related to Android. It can be used for Application development and testing (native, web and hybrid-app).

Advantages of using this project

  1. Emulator with different device profile and skins, such as Samsung Galaxy S6, LG Nexus 4, HTC Nexus One and more.
  2. Support vnc to be able to see what happen inside docker container
  3. Support log sharing feature where all logs can be accessed from web-UI
  4. Ability to control emulator from outside container by using adb connect
  5. Integrated with other cloud solutions, e.g. Genymotion Cloud
  6. It can be used to build Android project
  7. It can be used to run unit and UI-Test with different test-frameworks, e.g. Appium, Espresso, etc.

List of Docker-Images

Android API Image with latest release version Image with specific release version
9.0 28 budtmo/docker-android:emulator_9.0 budtmo/docker-android:emulator_9.0_
10.0 29 budtmo/docker-android:emulator_10.0 budtmo/docker-android:emulator_10.0_
11.0 30 budtmo/docker-android:emulator_11.0 budtmo/docker-android:emulator_11.0_
12.0 32 budtmo/docker-android:emulator_12.0 budtmo/docker-android:emulator_12.0_
13.0 33 budtmo/docker-android:emulator_13.0 budtmo/docker-android:emulator_13.0_
14.0 34 budtmo/docker-android:emulator_14.0 budtmo/docker-android:emulator_14.0_
- - budtmo/docker-android:genymotion budtmo/docker-android:genymotion_

List of Devices

Type Device Name
Phone Samsung Galaxy S10
Phone Samsung Galaxy S9
Phone Samsung Galaxy S8
Phone Samsung Galaxy S7 Edge
Phone Samsung Galaxy S7
Phone Samsung Galaxy S6
Phone Nexus 4
Phone Nexus 5
Phone Nexus One
Phone Nexus S
Tablet Nexus 7
Tablet Pixel C

Requirements

  1. Docker is installed on your system.

Quick Start

  1. If you use Ubuntu OS on your host machine, you can skip this step. For OSX and Windows OS user, you need to use Virtual Machine that support Virtualization with Ubuntu OS because the image can be run under Ubuntu OS only.

  2. Your machine should support virtualization. To check if the virtualization is enabled is: sudo apt install cpu-checker kvm-ok

  3. Run Docker-Android container docker run -d -p 6080:6080 -e EMULATOR_DEVICE="Samsung Galaxy S10" -e WEB_VNC=true --device /dev/kvm --name android-container budtmo/docker-android:emulator_11.0

  4. Open http://localhost:6080 to see inside running container.

  5. To check the status of the emulator docker exec -it android-container cat device_status

Persisting data

The default behaviour is to destroy the emulated device on container restart. To persist data, you need to mount a volume at /home/androidusr: docker run -v data:/home/androidusr budtmo/docker-android:emulator_11.0

WSL2 Hardware acceleration (Windows 11 only)

Credit goes to Guillaume - The Parallel Interface blog

Microsoft - Advanced settings configuration in WSL

  1. Add yourself to the kvm usergroup. sudo usermod -a -G kvm ${USER}

  2. Add necessary flags to /etc/wsl.conf to their respective sections. [boot] command = /bin/bash -c 'chown -v root:kvm /dev/kvm && chmod 660 /dev/kvm'

    Then, using PowerShell, open a notepad on notepad $env:USERPROFILE\.wslconfig. Inside, put these other flags: [wsl2] nestedVirtualization=true

  3. Restart WSL2 via CMD prompt or Powershell wsl --shutdown

command = /bin/bash -c 'chown -v root:kvm /dev/kvm && chmod 660 /dev/kvm' sets /dev/kvm to kvm usergroup rather than the default root usergroup on WSL2 startup.

nestedVirtualization flag is only available to Windows 11.

If this setup does not work, you may have an old WSL version. In that case, ignore \.wslconfig and put everything on /etc/wsl.conf, including the [wsl2] flag.

Use-Cases

  1. Build Android project
  2. UI-Test with Appium
  3. Control Android emulator on host machine
  4. SMS Simulation
  5. Jenkins
  6. Deploying on cloud (Azure, AWS, GCP)

Custom-Configurations

This document contains information about configurations that can be used to enable some features, e.g. log-sharing, etc.

Genymotion

For you who do not have ressources to maintain the simulator or to buy machines or need different device profiles, you can give a try by using Genymotion SAAS. Docker-Android is integrated with Genymotion on different cloud services, e.g. Genymotion SAAS, AWS, GCP, Alibaba Cloud. Please follow this document for more detail.

Emulator Skins

The Emulator skins are taken from Android Studio IDE and Samsung Developer Website

USERS

<img src="https://github.com/budtmo/docker-android/raw/v3.5.2-p0/images/docker-android_users.png" alt="docker-android-users" width="800" height="600">

PRO VERSION

Due to high requests for help and to be able to actively maintain the projects, the creator has decided to create docker-android-pro. Docker-Android-Pro is a sponsor based project which mean that the docker image of pro-version can be pulled only by active sponsor.

The differences between normal version and pro version are:

Feature Normal Pro Comment
user-behavior-analytics Yes No -
proxy No Yes Set up company proxy on Android emulator on fly
language No Yes Set up language on Android emulator on fly
Newer Android version No Yes Support other newer Android version e.g. Android 15, Android 16, etc
root-privileged No Yes Able to run command with security privileged
headless-mode No Yes Save resources by using headless mode
Selenium 4.x integration No Yes Running Appium UI-Tests againt one (Selenium Hub) endpoint for Android- and iOS emulator(s) / device(s)
multiple Android-Simulators No Yes (soon) Save resources by having multiple Android-Simulators on one docker-container
Google Play Store No Yes (soon) -
Video Recording No Yes (soon) Helpful for debugging

This document contains detail information about how to use docker-android-pro.

LICENSE

See License

Core symbols most depended-on inside this repo

convert_str_to_bool
called by 21
cli/src/helper/__init__.py
get_env_value_or_raise
called by 19
cli/src/helper/__init__.py
start
called by 6
cli/src/application/__init__.py
check_adb_command
called by 6
cli/src/device/emulator.py
set_status
called by 5
cli/src/device/__init__.py
shutdown_and_logout
called by 5
cli/src/device/__init__.py
is_initialized
called by 5
cli/src/device/emulator.py
_use_override_config
called by 5
cli/src/device/emulator.py

Shape

Method 75
Class 16
Function 16
Route 3

Languages

Python100%

Modules by API surface

cli/src/tests/device/test_emulator.py18 symbols
cli/src/device/__init__.py18 symbols
cli/src/device/emulator.py15 symbols
cli/src/app.py15 symbols
cli/src/tests/helper/test_helper.py11 symbols
cli/src/device/geny_aws.py9 symbols
cli/src/device/geny_saas.py7 symbols
cli/src/application/__init__.py5 symbols
cli/src/tests/device/__init__.py3 symbols
cli/src/tests/__init__.py3 symbols
cli/src/helper/__init__.py3 symbols
cli/src/tests/device/test_device.py2 symbols

Dependencies from manifests, versioned

autopep82.3.2 · 1×
click8.4.1 · 1×
coverage7.14.3 · 1×
mock5.2.0 · 1×
pytest9.1.1 · 1×
pytest-cov7.1.0 · 1×
pytest-xdist3.8.0 · 1×
requests2.34.2 · 1×
setuptools82.0.1 · 1×

For agents

$ claude mcp add docker-android \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact