# DSH 工作台 Android 构建环境 # 用法: # docker build -t dsh-appbuilder \ # --build-arg http_proxy=$http_proxy --build-arg https_proxy=$https_proxy \ # --build-arg no_proxy=$no_proxy . # ./build.sh # # 产出:build/app/outputs/flutter-apk/app-*.apk FROM eclipse-temurin:17-jdk-jammy ARG http_proxy ARG https_proxy ARG no_proxy ENV http_proxy=$http_proxy \ https_proxy=$https_proxy \ no_proxy=$no_proxy \ DEBIAN_FRONTEND=noninteractive \ ANDROID_HOME=/opt/android-sdk \ PUB_CACHE=/opt/pub-cache \ PATH=/opt/flutter/bin:/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:$PATH RUN apt-get update \ && apt-get install -y --no-install-recommends xz-utils unzip ca-certificates curl git \ && rm -rf /var/lib/apt/lists/* ARG FLUTTER_VERSION=3.47.7 ARG CMDLINE_TOOLS_VERSION=13114758 # Flutter SDK(固定 stable 版本,来自官方 release 归档) RUN curl -fsSL -o /tmp/flutter.tar.xz \ "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz" \ && tar -xJf /tmp/flutter.tar.xz -C /opt \ && rm /tmp/flutter.tar.xz \ && git config --global --add safe.directory /opt/flutter # Android SDK cmdline-tools + 许可 + platform-tools RUN curl -fsSL -o /tmp/tools.zip \ "https://dl.google.com/android/repository/commandlinetools-linux-${CMDLINE_TOOLS_VERSION}_latest.zip" \ && mkdir -p "${ANDROID_HOME}/cmdline-tools" \ && unzip -q /tmp/tools.zip -d "${ANDROID_HOME}/cmdline-tools" \ && mv "${ANDROID_HOME}/cmdline-tools/cmdline-tools" "${ANDROID_HOME}/cmdline-tools/latest" \ && rm /tmp/tools.zip \ && (yes | sdkmanager --licenses > /dev/null || true) \ && sdkmanager "platform-tools" > /dev/null RUN flutter config --android-sdk "${ANDROID_HOME}" \ && flutter --disable-analytics \ && flutter precache --android \ && flutter doctor # 预热:跑一次与应用相同依赖的默认模板构建,把 Gradle 发行版/AGP/AndroidX # 组件、插件 AAR 和 SDK 平台下载进镜像,之后挂载源码的正式构建不再重复下载 RUN flutter create --org dev.dsh --project-name warmup /tmp/warmup \ && cd /tmp/warmup \ && flutter pub add webview_flutter webview_flutter_android file_selector \ && flutter build apk --release \ && cd / && rm -rf /tmp/warmup \ && flutter doctor WORKDIR /project