Files
IdP/tauri_app/Dockerfile.apk
lendry f1bba24faa Complete offline Android APK build for isolated LAN servers.
Bundle AndroidX, Kotlin Gradle plugin, and SDK patch scripts so Gradle no longer needs Google Maven at runtime. Bake Gradle wrapper into Docker image during build when network is available.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-26 23:26:22 +03:00

82 lines
3.0 KiB
Docker

FROM ghcr.io/cirruslabs/android-sdk:35-ndk
ENV DEBIAN_FRONTEND=noninteractive
ENV ANDROID_HOME=/opt/android-sdk
ENV ANDROID_SDK_ROOT=/opt/android-sdk
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
ENV PATH=/root/.cargo/bin:/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:/usr/local/bin:$PATH
ARG NPM_REGISTRY=https://registry.npmjs.org
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
curl \
unzip \
xz-utils \
git \
build-essential \
pkg-config \
libssl-dev \
openjdk-17-jdk \
&& rm -rf /var/lib/apt/lists/*
RUN if [ ! -d "${ANDROID_HOME}" ] && [ -d /opt/android-sdk-linux ]; then ln -s /opt/android-sdk-linux "${ANDROID_HOME}"; fi \
&& (sdkmanager --version || true) \
&& test -d "${ANDROID_HOME}/platforms/android-35" \
&& test -d "${ANDROID_HOME}/build-tools" \
&& test -d "${ANDROID_HOME}/platform-tools" \
&& test -d "${ANDROID_HOME}/ndk"
RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
&& apt-get update \
&& apt-get install -y --no-install-recommends nodejs \
&& rm -rf /var/lib/apt/lists/*
RUN curl --proto '=https' --tlsv1.2 -fsSL https://sh.rustup.rs | sh -s -- -y --profile minimal \
&& rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
WORKDIR /workspace
COPY package.json package-lock.json .npmrc ./
COPY apps/sso-core/package.json ./apps/sso-core/
COPY apps/api-gateway/package.json ./apps/api-gateway/
COPY apps/frontend/package.json ./apps/frontend/
COPY apps/docs/package.json ./apps/docs/
COPY tauri_app/package.json ./tauri_app/
RUN --mount=type=cache,target=/root/.npm \
npm config set registry "${NPM_REGISTRY}" && \
npm ci --no-audit --no-fund
COPY apps/frontend ./apps/frontend
COPY shared ./shared
COPY tsconfig.base.json ./
COPY tauri_app ./tauri_app
RUN sed -i 's/\r$//' tauri_app/docker/*.sh \
&& chmod +x tauri_app/docker/*.sh \
&& cp tauri_app/docker/build-android-apk.sh /usr/local/bin/build-android-apk \
&& chmod +x /usr/local/bin/build-android-apk
ENV ANDROID_AGP_LOCAL_REPO=/opt/android-agp-maven
ENV GRADLE_USER_HOME=/root/.gradle
ENV ANDROID_COMPILE_SDK=35
RUN if [ ! -d "${ANDROID_HOME}" ] && [ -d /opt/android-sdk-linux ]; then ln -s /opt/android-sdk-linux "${ANDROID_HOME}"; fi \
&& ln -sfn android-35 "${ANDROID_HOME}/platforms/android-36" \
&& test -e "${ANDROID_HOME}/platforms/android-36"
RUN /workspace/tauri_app/docker/prefetch-android-agp.sh \
&& /workspace/tauri_app/docker/verify-offline-agp.sh
RUN if [ -f /workspace/tauri_app/docker/offline-gradle/gradle-8.14.3-bin.zip ]; then \
mkdir -p /opt/offline-gradle \
&& cp /workspace/tauri_app/docker/offline-gradle/gradle-8.14.3-bin.zip /opt/offline-gradle/; \
else \
/workspace/tauri_app/docker/populate-offline-gradle.sh \
&& mkdir -p /opt/offline-gradle \
&& cp /workspace/tauri_app/docker/offline-gradle/gradle-8.14.3-bin.zip /opt/offline-gradle/; \
fi
CMD ["build-android-apk"]