|
1 | 1 | # syntax=docker/dockerfile:1.4 |
2 | | -# This Dockerfile is used to setup the environment (JDK, SDK, NDK, just) for Android app building. |
| 2 | +# Pinned Android build environment on top of Gradle. |
3 | 3 |
|
4 | | -FROM debian:bookworm |
| 4 | +ARG GRADLE_IMAGE=gradle:8.13-jdk17 |
| 5 | +ARG CMDLINE_TOOLS_VERSION=11076708 |
| 6 | +ARG ANDROID_API_LEVEL=35 |
| 7 | +ARG ANDROID_BUILD_TOOLS_VERSION=35.0.0 |
| 8 | +ARG ANDROID_NDK_VERSION=28.1.13356709 |
| 9 | +ARG JUST_VERSION=1.45.0 |
| 10 | +ARG JUST_TARGET=x86_64-unknown-linux-musl |
| 11 | + |
| 12 | +FROM ${GRADLE_IMAGE} |
| 13 | + |
| 14 | +USER root |
| 15 | + |
| 16 | +ARG CMDLINE_TOOLS_VERSION |
| 17 | +ARG ANDROID_API_LEVEL |
| 18 | +ARG ANDROID_BUILD_TOOLS_VERSION |
| 19 | +ARG ANDROID_NDK_VERSION |
| 20 | +ARG JUST_VERSION |
| 21 | +ARG JUST_TARGET |
5 | 22 |
|
6 | | -ENV DEBIAN_FRONTEND=noninteractive |
7 | 23 | ENV HOME=/root |
8 | 24 | ENV ANDROID_HOME=/opt/android-sdk |
9 | 25 | ENV ANDROID_SDK_ROOT=/opt/android-sdk |
10 | | -ENV PATH=${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools:${PATH} |
11 | | - |
12 | | -RUN dpkg --add-architecture amd64 |
13 | | - |
14 | | -RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ |
15 | | - --mount=type=cache,target=/var/lib/apt,sharing=locked \ |
16 | | - apt-get update && apt-get install -y \ |
17 | | - curl \ |
18 | | - unzip \ |
19 | | - zip \ |
20 | | - git \ |
21 | | - make \ |
22 | | - build-essential \ |
23 | | - pkg-config \ |
24 | | - openjdk-17-jdk-headless \ |
25 | | - libc6:amd64 \ |
26 | | - zlib1g:amd64 |
27 | | - |
28 | | -RUN curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to /usr/local/bin |
29 | | - |
30 | | -RUN --mount=type=cache,target=/tmp/android-dl \ |
31 | | - mkdir -p ${ANDROID_HOME}/cmdline-tools/latest && \ |
32 | | - if [ ! -f /tmp/android-dl/commandlinetools-linux-11076708_latest.zip ]; then \ |
33 | | - curl -o /tmp/android-dl/commandlinetools-linux-11076708_latest.zip \ |
34 | | - https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip; \ |
35 | | - fi && \ |
36 | | - unzip -q /tmp/android-dl/commandlinetools-linux-11076708_latest.zip -d /tmp/cmdline-tools && \ |
37 | | - mv /tmp/cmdline-tools/cmdline-tools/* ${ANDROID_HOME}/cmdline-tools/latest/ && \ |
38 | | - rm -rf /tmp/cmdline-tools |
| 26 | +ENV ANDROID_SDK_URL=https://dl.google.com/android/repository/commandlinetools-linux-${CMDLINE_TOOLS_VERSION}_latest.zip |
| 27 | +ENV PATH=${ANDROID_HOME}/cmdline-tools/bin:${ANDROID_HOME}/platform-tools:${PATH} |
| 28 | + |
| 29 | +# Runtime deps for build-tools/aapt2. |
| 30 | +RUN apt-get update && \ |
| 31 | + apt-get install -y --no-install-recommends \ |
| 32 | + libc6 \ |
| 33 | + libstdc++6 \ |
| 34 | + zlib1g \ |
| 35 | + libtinfo6 \ |
| 36 | + ca-certificates \ |
| 37 | + && rm -rf /var/lib/apt/lists/* |
| 38 | + |
| 39 | +# Install just from a pinned release. |
| 40 | +RUN curl -fL \ |
| 41 | + "https://github.com/casey/just/releases/download/${JUST_VERSION}/just-${JUST_VERSION}-${JUST_TARGET}.tar.gz" \ |
| 42 | + -o /tmp/just.tar.gz && \ |
| 43 | + tar -xzf /tmp/just.tar.gz -C /tmp && \ |
| 44 | + mv /tmp/just /usr/local/bin/just && \ |
| 45 | + rm -rf /tmp/just* |
| 46 | + |
| 47 | +RUN mkdir -p "${ANDROID_HOME}" /root/.android && \ |
| 48 | + cd "${ANDROID_HOME}" && \ |
| 49 | + curl -o sdk.zip "${ANDROID_SDK_URL}" && \ |
| 50 | + unzip -q sdk.zip && \ |
| 51 | + rm sdk.zip |
39 | 52 |
|
40 | 53 | RUN --mount=type=cache,target=/root/.android \ |
41 | | - yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --licenses && \ |
42 | | - ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager \ |
| 54 | + yes | ${ANDROID_HOME}/cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} --licenses && \ |
| 55 | + ${ANDROID_HOME}/cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} \ |
43 | 56 | "platform-tools" \ |
44 | | - "platforms;android-35" \ |
45 | | - "build-tools;35.0.0" \ |
46 | | - "ndk;28.1.13356709" |
| 57 | + "platforms;android-${ANDROID_API_LEVEL}" \ |
| 58 | + "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \ |
| 59 | + "ndk;${ANDROID_NDK_VERSION}" |
47 | 60 |
|
48 | 61 | CMD ["bash"] |
0 commit comments