David Prince
fix: zipalign -h exits 2 — use zipalign -v with || true instead
dad8bfa
Raw
History Blame Contribute Delete
4.62 kB
FROM python:3.11-slim-bookworm
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1 \
ANDROID_HOME=/opt/android-sdk \
ANDROID_SDK_ROOT=/opt/android-sdk \
ANDROID_BUILD_TOOLS_VERSION=36.0.0 \
ANDROID_PLATFORM_VERSION=36 \
PATH=/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:/opt/android-sdk/build-tools/36.0.0:$PATH
WORKDIR /app
RUN apt-get update && \
apt-get install -y --no-install-recommends \
bash \
ca-certificates \
curl \
wget \
git \
unzip \
zip \
openjdk-17-jdk-headless \
build-essential \
libstdc++6 \
libc6 \
zlib1g && \
rm -rf /var/lib/apt/lists/*
###############################################################################
# Android command-line tools
#
# Official Linux command-line tools release.
# SHA-256 is verified before extraction.
###############################################################################
ARG ANDROID_CMDLINE_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-15859902_latest.zip"
ARG ANDROID_CMDLINE_TOOLS_SHA256="4e4c464f145a7512b57d088ac6c278c03c9eea610886b35a5e0804e74eedf583"
RUN set -eux; \
mkdir -p "${ANDROID_SDK_ROOT}/cmdline-tools"; \
cd /tmp; \
curl -fsSL --retry 5 --retry-delay 3 \
"${ANDROID_CMDLINE_TOOLS_URL}" \
-o commandlinetools.zip; \
echo "${ANDROID_CMDLINE_TOOLS_SHA256} commandlinetools.zip" | sha256sum -c -; \
unzip -q commandlinetools.zip -d "${ANDROID_SDK_ROOT}/cmdline-tools"; \
mv "${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools" \
"${ANDROID_SDK_ROOT}/cmdline-tools/latest"; \
rm -f commandlinetools.zip
###############################################################################
# Android SDK packages required by native_apk_builder
###############################################################################
RUN yes | sdkmanager --sdk_root="${ANDROID_SDK_ROOT}" --licenses >/dev/null || true
RUN sdkmanager --sdk_root="${ANDROID_SDK_ROOT}" \
"platform-tools" \
"platforms;android-${ANDROID_PLATFORM_VERSION}" \
"build-tools;${ANDROID_BUILD_TOOLS_VERSION}"
###############################################################################
# Verify the complete native Android toolchain during image construction.
###############################################################################
RUN set -eux; \
test -x "${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/aapt2"; \
test -x "${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/d8"; \
test -x "${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/zipalign"; \
test -x "${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/apksigner"; \
test -f "${ANDROID_SDK_ROOT}/platforms/android-${ANDROID_PLATFORM_VERSION}/android.jar"; \
java -version; \
"${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/aapt2" version; \
"${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/d8" --version; \
"${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/zipalign" -v 4 /dev/null /dev/null 2>/dev/null || true; \
"${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/apksigner" --version
###############################################################################
# Python dependencies
###############################################################################
COPY requirements.txt .
RUN python -m pip install --upgrade pip && \
python -m pip install --no-cache-dir -r requirements.txt
###############################################################################
# Application
###############################################################################
COPY . .
RUN python - <<'PY'
import importlib
for module in (
"fastapi",
"uvicorn",
"asyncpg",
"edge_tts",
):
importlib.import_module(module)
import app
assert app.app.__class__.__name__ == "FastAPI"
print("[OK] Production application import passed")
PY
###############################################################################
# Runtime verification
###############################################################################
RUN set -eux; \
command -v java; \
command -v aapt2; \
command -v d8; \
command -v zipalign; \
command -v apksigner; \
test -f "${ANDROID_SDK_ROOT}/platforms/android-${ANDROID_PLATFORM_VERSION}/android.jar"
EXPOSE 7860
CMD ["python", "-m", "uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]