Skip to content

Instantly share code, notes, and snippets.

@ljmf00
Last active June 24, 2022 03:17
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ljmf00/5db17e4cca66e762d51a86bae0712652 to your computer and use it in GitHub Desktop.
Save ljmf00/5db17e4cca66e762d51a86bae0712652 to your computer and use it in GitHub Desktop.
Android Emulator on docker
# _____ .___ __
# / _ \ ____ __| _/____ ____ | | __ ___________
# / /_\ \ / \ / __ |/ _ \_/ ___\| |/ // __ \_ __ \
# / | \ | \/ /_/ ( <_> ) \___| <\ ___/| | \/
# \____|__ /___| /\____ |\____/ \___ >__|_ \\___ >__|
# \/ \/ \/ \/ \/ \/
#
# Unbloat version of budtmo/docker-android-x86-11.0
# Thanks to @benjamin.botto for 3D hardware acceleration inside docker
#
# Licensed under WTFPL.
# Copyright (C) 2021 Luís Ferreira <contact at lsferreira dot net>
FROM openjdk:17-jdk-slim-buster
LABEL maintainer="Luís Ferreira <contact at lsferreira dot net>"
# Setup Android variables
ENV ANDROID_HOME=/opt/android-sdk \
ANDROID_SDK_HOME="/home/android"
ENV ANDROID_SDK="${ANDROID_HOME}" \
ANDROID_SDK_ROOT="${ANDROID_HOME}" \
ANDROID_AVD_HOME="${ANDROID_SDK_HOME}/.android/avd"
# Create Android home
RUN mkdir -p "${ANDROID_HOME}"
# Build dependencies
RUN apt-get update -y && \
apt-get install -y --no-install-recommends \
curl unzip \
libglvnd0 libgl1 libglx0 libegl1 \
libc6 libgcc1 libncurses5 libstdc++6 zlib1g
# Setup Android Command Line Tools
ENV ANDROID_CMDLINE_BUILD_NO 6858069
RUN curl https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_BUILD_NO}_latest.zip -O && \
unzip commandlinetools-linux-${ANDROID_CMDLINE_BUILD_NO}_latest.zip -d ${ANDROID_HOME} && \
rm -rf commandlinetools-linux-${ANDROID_CMDLINE_BUILD_NO}_latest.zip && \
mv ${ANDROID_HOME}/cmdline-tools/ ${ANDROID_HOME}/cmdline-tools2/ && \
mkdir -p ${ANDROID_HOME}/cmdline-tools && \
mv ${ANDROID_HOME}/cmdline-tools2 ${ANDROID_HOME}/cmdline-tools/latest
RUN apt-get remove --purge -y curl unzip && \
apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/*
# Setup Path
ENV PATH "${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin"
# Setup Android user and fix android sdk ownership
RUN groupadd android && useradd -m -g android android && \
chown android:android -R ${ANDROID_HOME}
# Switch to user mode
USER android
WORKDIR ${ANDROID_SDK_HOME}
# Fetch system images and Android APIs
ENV ANDROID_API_VERSION=30 \
ANDROID_BUILD_TOOLS_VERSION=30.0.3
RUN yes | sdkmanager --licenses
RUN sdkmanager \
"platforms;android-${ANDROID_API_VERSION}" \
"build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
"system-images;android-${ANDROID_API_VERSION};google_apis;x86_64"
# Setup Android Virtual Device (AVD)
RUN echo no | avdmanager -v create avd \
-n "Device" \
-k "system-images;android-${ANDROID_API_VERSION};google_apis;x86_64" && \
echo "hw.mainKeys=no" >> "${ANDROID_AVD_HOME}/Device.avd/config.ini"
ENV PATH "${PATH}:${ANDROID_HOME}/emulator"
ENTRYPOINT emulator \
-avd "Device" \
-writable-system \
-no-window \
-no-audio \
-gpu swiftshader_indirect \
-accel on \
-ports 5554,5555 \
-verbose
#!/usr/bin/env bash
# Build
docker build . -t android-30
# Run
docker run -d --rm \
--device /dev/kvm \
--net=host \
--name="android-11-emulator" \
android-30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment