FROM ubuntu:24.04

ARG DEBIAN_FRONTEND=noninteractive
ARG FLUTTER_VERSION=3.24.5
ARG RUST_VERSION=1.75.0
ARG ANDROID_CMDLINE_TOOLS=11076708
ARG ANDROID_NDK_VERSION=28.2.13676358
ARG VCPKG_COMMIT=120deac3062162151622ca4860575a33844ba10b

ENV ANDROID_HOME=/opt/android-sdk \
    ANDROID_SDK_ROOT=/opt/android-sdk \
    ANDROID_NDK_HOME=/opt/android-sdk/ndk/28.2.13676358 \
    ANDROID_NDK_ROOT=/opt/android-sdk/ndk/28.2.13676358 \
    JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 \
    VCPKG_ROOT=/opt/vcpkg \
    VCPKG_FORCE_SYSTEM_BINARIES=1 \
    CARGO_HOME=/opt/cargo \
    RUSTUP_HOME=/opt/rustup \
    PUB_CACHE=/opt/pub-cache \
    GRADLE_USER_HOME=/opt/gradle \
    PATH=/opt/flutter/bin:/opt/cargo/bin:/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:/usr/lib/jvm/java-17-openjdk-amd64/bin:$PATH

RUN apt-get update && apt-get install -y --no-install-recommends \
      bash ca-certificates clang cmake curl file gcc g++ gcc-multilib g++-multilib \
      git libc6-dev libclang-dev libgtk-3-dev libssl-dev libunwind-dev llvm-dev make nasm \
      ninja-build openjdk-17-jdk-headless pkg-config python3 unzip wget xz-utils zip \
    && rm -rf /var/lib/apt/lists/*

RUN install -d "$ANDROID_HOME/cmdline-tools" \
    && wget -q "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_TOOLS}_latest.zip" -O /tmp/android-tools.zip \
    && unzip -q /tmp/android-tools.zip -d /tmp/android-tools \
    && mv /tmp/android-tools/cmdline-tools "$ANDROID_HOME/cmdline-tools/latest" \
    && yes | sdkmanager --licenses >/dev/null \
    && sdkmanager "platform-tools" "platforms;android-31" "platforms;android-32" \
         "platforms;android-33" "platforms;android-34" \
         "build-tools;30.0.3" "build-tools;34.0.0" "ndk;${ANDROID_NDK_VERSION}" \
    && rm -rf /tmp/android-tools /tmp/android-tools.zip

RUN wget -q "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz" -O /tmp/flutter.tar.xz \
    && tar -xJf /tmp/flutter.tar.xz -C /opt \
    && git config --global --add safe.directory /opt/flutter \
    && flutter config --no-analytics \
    && flutter precache --android \
    && rm /tmp/flutter.tar.xz

RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain "${RUST_VERSION}" --profile minimal \
    && rustup component add rustfmt \
    && rustup target add aarch64-linux-android armv7-linux-androideabi \
    && cargo install cargo-ndk --version 3.1.2 --locked \
    && cargo install cargo-expand --version 1.0.95 --locked \
    && cargo install flutter_rust_bridge_codegen --version 1.80.1 --features uuid --locked

RUN git clone https://github.com/microsoft/vcpkg.git "$VCPKG_ROOT" \
    && git -C "$VCPKG_ROOT" checkout "${VCPKG_COMMIT}" \
    && "$VCPKG_ROOT/bootstrap-vcpkg.sh" -disableMetrics

WORKDIR /workspace
COPY deployment/build/build.sh /usr/local/bin/build-xiaoxin-android
RUN chmod 755 /usr/local/bin/build-xiaoxin-android

ENTRYPOINT ["/usr/local/bin/build-xiaoxin-android"]
