FROM ubuntu:24.04 ARG QT_VERSION=6.11.1 ARG AQTINSTALL_VERSION=3.3.0 ARG ANDROID_COMMAND_LINE_TOOLS_VERSION=15859902 ARG ANDROID_COMMAND_LINE_TOOLS_SHA256=4e4c464f145a7512b57d088ac6c278c03c9eea610886b35a5e0804e74eedf583 ARG ANDROID_NDK_VERSION=27.2.12479018 ARG ANDROID_OPENSSL_COMMIT=32ebe304ff064a9affb699b2185af78e3494f49a ENV DEBIAN_FRONTEND=noninteractive \ QT_ROOT=/opt/Qt \ ANDROID_SDK_ROOT=/opt/android-sdk \ ANDROID_HOME=/opt/android-sdk \ ANDROID_NDK_ROOT=/opt/android-sdk/ndk/${ANDROID_NDK_VERSION} \ JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 \ PATH=/opt/aqt/bin:/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:${PATH} RUN apt-get update \ && apt-get install --yes --no-install-recommends \ ca-certificates \ ccache \ cmake \ curl \ file \ git \ libavahi-client-dev \ libdbus-1-3 \ libegl1 \ libfontconfig1 \ libgl1 \ libx11-6 \ libx11-xcb1 \ libxcb-cursor0 \ libxcb-glx0 \ libxcb-icccm4 \ libxcb-image0 \ libxcb-keysyms1 \ libxcb-randr0 \ libxcb-render-util0 \ libxcb-shape0 \ libxcb-shm0 \ libxcb-sync1 \ libxcb-util1 \ libxcb-xfixes0 \ libxcb-xinerama0 \ libxcb-xkb1 \ libxcb1 \ libxkbcommon-x11-0 \ ninja-build \ openjdk-21-jdk-headless \ p7zip-full \ pkg-config \ python3 \ python3-venv \ unzip \ && rm -rf /var/lib/apt/lists/* RUN python3 -m venv /opt/aqt \ && /opt/aqt/bin/pip install --no-cache-dir "aqtinstall==${AQTINSTALL_VERSION}" \ && aqt install-qt linux desktop "${QT_VERSION}" linux_gcc_64 \ -m qtcharts qtwebsockets -O "${QT_ROOT}" \ && aqt install-qt linux android "${QT_VERSION}" android_arm64_v8a \ -m qtcharts qtwebsockets -O "${QT_ROOT}" \ && aqt install-qt linux android "${QT_VERSION}" android_armv7 \ -m qtcharts qtwebsockets -O "${QT_ROOT}" RUN mkdir -p "${ANDROID_SDK_ROOT}/cmdline-tools" \ && curl --fail --location --retry 5 \ --output /tmp/android-command-line-tools.zip \ "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_COMMAND_LINE_TOOLS_VERSION}_latest.zip" \ && echo "${ANDROID_COMMAND_LINE_TOOLS_SHA256} /tmp/android-command-line-tools.zip" | sha256sum --check \ && unzip -q /tmp/android-command-line-tools.zip -d "${ANDROID_SDK_ROOT}/cmdline-tools" \ && mv "${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools" "${ANDROID_SDK_ROOT}/cmdline-tools/latest" \ && rm /tmp/android-command-line-tools.zip \ && yes | sdkmanager --licenses >/dev/null \ && sdkmanager \ "platform-tools" \ "platforms;android-36" \ "build-tools;36.0.0" \ "ndk;${ANDROID_NDK_VERSION}" RUN git init "${ANDROID_SDK_ROOT}/android_openssl" \ && git -C "${ANDROID_SDK_ROOT}/android_openssl" remote add origin https://github.com/KDAB/android_openssl.git \ && git -C "${ANDROID_SDK_ROOT}/android_openssl" fetch --depth 1 origin "${ANDROID_OPENSSL_COMMIT}" \ && git -C "${ANDROID_SDK_ROOT}/android_openssl" checkout --detach FETCH_HEAD \ && rm -rf "${ANDROID_SDK_ROOT}/android_openssl/.git" # Build dependencies needed by applications using the prebuilt desktop Qt. # Keep these in a separate layer so changes here do not invalidate the large # Qt and Android SDK downloads above. RUN apt-get update \ && apt-get install --yes --no-install-recommends \ build-essential \ libgl1-mesa-dev \ libglib2.0-0t64 \ && rm -rf /var/lib/apt/lists/* ENV LANG=C.UTF-8 \ LC_ALL=C.UTF-8 WORKDIR /workspace