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>
82 lines
3.0 KiB
Docker
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"]
|