llvm/libcxx/utils/ci/vendor/android/Dockerfile.emulator

# ===----------------------------------------------------------------------===##
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#
# ===----------------------------------------------------------------------===##

FROM ubuntu:jammy

RUN apt-get update && apt-get install -y \
    curl \
    netcat-openbsd \
    openjdk-11-jdk \
    sudo \
    unzip \
    && rm -rf /var/lib/apt/lists/*

ENV ANDROID_HOME=/opt/android/sdk

RUN curl -sL https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip -o cmdline-tools.zip && \
    mkdir -p ${ANDROID_HOME} && \
    unzip cmdline-tools.zip -d ${ANDROID_HOME}/cmdline-tools && \
    mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/latest && \
    rm cmdline-tools.zip
ENV PATH="${ANDROID_HOME}/cmdline-tools/latest/bin:${PATH}"

RUN yes | sdkmanager --licenses
RUN sdkmanager --install emulator
ENV PATH="${ANDROID_HOME}/emulator:${PATH}"

ARG API  # e.g. 21
RUN sdkmanager --install "platforms;android-${API}"

ARG TYPE  # one of: default, google_apis, or google_apis_playstore
ARG ABI   # e.g. armeabi-v7a, x86
ENV EMU_PACKAGE_NAME="system-images;android-${API};${TYPE};${ABI}"
RUN sdkmanager --install "${EMU_PACKAGE_NAME}"

COPY ./emulator-entrypoint.sh /opt/emulator/bin/emulator-entrypoint.sh
COPY ./emulator-wait-for-ready.sh /opt/emulator/bin/emulator-wait-for-ready.sh
ENV PATH="/opt/emulator/bin:${PATH}"
ENV PATH="${ANDROID_HOME}/platform-tools:${PATH}"

# Setup password-less sudo so that /dev/kvm permissions can be changed. Run the
# emulator in an unprivileged user for reliability (and it might require it?)
RUN echo "ALL ALL = (ALL) NOPASSWD: ALL" >> /etc/sudoers
RUN useradd --create-home emulator
USER emulator
WORKDIR /home/emulator

# Size of emulator /data partition in megabytes.
ENV EMU_PARTITION_SIZE=8192

EXPOSE 5037

HEALTHCHECK CMD emulator-wait-for-ready.sh 5

ENTRYPOINT ["emulator-entrypoint.sh"]