FROM gradle:9.6.1-jdk17@sha256:7364ce528f33bb6038672bcef990d524f1ad8fbc292935819c235db886d0fae7 AS android-base USER root ARG ANDROID_COMMAND_LINE_TOOLS_VERSION=14742923 ARG ANDROID_COMMAND_LINE_TOOLS_SHA1=48833c34b761c10cb20bcd16582129395d121b27 ENV ANDROID_HOME=/opt/android-sdk ENV ANDROID_SDK_ROOT=/opt/android-sdk ENV PATH="${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools" RUN apt-get update \ && apt-get install -y --no-install-recommends curl unzip \ && rm -rf /var/lib/apt/lists/* RUN mkdir -p "${ANDROID_HOME}/cmdline-tools" \ && curl -fsSL \ "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_COMMAND_LINE_TOOLS_VERSION}_latest.zip" \ -o /tmp/android-command-line-tools.zip \ && echo "${ANDROID_COMMAND_LINE_TOOLS_SHA1} /tmp/android-command-line-tools.zip" \ | sha1sum -c - \ && unzip -q /tmp/android-command-line-tools.zip -d /tmp/android-command-line-tools \ && mv /tmp/android-command-line-tools/cmdline-tools "${ANDROID_HOME}/cmdline-tools/latest" \ && rm -rf /tmp/android-command-line-tools /tmp/android-command-line-tools.zip \ && yes | sdkmanager --licenses >/dev/null RUN sdkmanager \ "build-tools;37.0.0" \ "platforms;android-37.0" \ && chown -R gradle:gradle "${ANDROID_HOME}" FROM android-base AS android-sdk USER gradle WORKDIR /workspace/android COPY --chown=gradle:gradle . . ARG WNH_DEBUG_BASE_URL RUN --mount=type=cache,target=/home/gradle/.gradle,uid=1000,gid=1000 \ --mount=type=cache,target=/home/gradle/.android,uid=1000,gid=1000 \ gradle --no-daemon \ "-PWNH_DEBUG_BASE_URL=${WNH_DEBUG_BASE_URL}" \ testDebugUnitTest lintDebug assembleDebug FROM android-base AS emulator USER root RUN apt-get update \ && apt-get install -y --no-install-recommends \ libdbus-1-3 \ libfontconfig1 \ libgl1 \ libnss3 \ libpulse0 \ libx11-6 \ libxcomposite1 \ libxcursor1 \ libxi6 \ libxrandr2 \ libxrender1 \ libxtst6 \ && rm -rf /var/lib/apt/lists/* RUN sdkmanager \ "emulator" \ "system-images;android-37.0;google_apis_ps16k;x86_64" \ && chown -R gradle:gradle "${ANDROID_HOME}" # The container is operated from the host through `docker exec ... adb`. # Keep platform-tools in the emulator target without invalidating the large # system-image layer when application sources change. RUN sdkmanager "platform-tools" \ && chown -R gradle:gradle "${ANDROID_HOME}" USER gradle RUN echo no | avdmanager create avd \ --force \ --name who_need_help_api37 \ --package "system-images;android-37.0;google_apis_ps16k;x86_64" COPY --from=android-sdk --chown=gradle:gradle \ /workspace/android/app/build/outputs/apk/debug/app-debug.apk \ /opt/who-need-help/who-need-help-debug.apk CMD ["/opt/android-sdk/emulator/emulator", \ "-avd", "who_need_help_api37", \ "-no-window", \ "-no-audio", \ "-no-boot-anim", \ "-no-snapshot", \ "-gpu", "software", \ "-feature", "-Vulkan", \ "-camera-back", "none", \ "-camera-front", "none", \ "-netdelay", "none", \ "-netspeed", "full"] FROM scratch AS artifact COPY --from=android-sdk \ /workspace/android/app/build/outputs/apk/debug/app-debug.apk \ /who-need-help-debug.apk COPY --from=android-sdk \ /workspace/android/app/build/reports/lint-results-debug.html \ /lint-results-debug.html