Add full offline Android Gradle Plugin dependency cache
This commit is contained in:
@@ -10,3 +10,9 @@ apps/sso-core/.env
|
||||
coverage
|
||||
*.log
|
||||
*.tsbuildinfo
|
||||
**/*.apk
|
||||
tauri_app/src-tauri/gen
|
||||
tauri_app/src-tauri/target
|
||||
tauri_app/docker/agp-resolver/.gradle
|
||||
tauri_app/docker/agp-resolver/build
|
||||
tauri_app/docker/offline-maven/.agp-offline-complete
|
||||
|
||||
@@ -235,8 +235,6 @@ services:
|
||||
dockerfile: tauri_app/Dockerfile.apk
|
||||
args:
|
||||
NPM_REGISTRY: ${NPM_REGISTRY:-https://registry.npmjs.org}
|
||||
PUBLIC_API_URL: ${PUBLIC_API_URL:-http://localhost:3000}
|
||||
PUBLIC_FRONTEND_URL: ${PUBLIC_FRONTEND_URL:-http://localhost:3002}
|
||||
container_name: lendry-id-tauri-apk-builder
|
||||
restart: "no"
|
||||
environment:
|
||||
|
||||
@@ -7,8 +7,6 @@ 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
|
||||
ARG PUBLIC_API_URL=http://localhost:3000
|
||||
ARG PUBLIC_FRONTEND_URL=http://localhost:3002
|
||||
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
@@ -24,9 +22,10 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
|
||||
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" \
|
||||
&& test -d "${ANDROID_HOME}/platforms/android-35" \
|
||||
&& test -d "${ANDROID_HOME}/build-tools" \
|
||||
&& test -d "${ANDROID_HOME}/platform-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 \
|
||||
@@ -62,10 +61,7 @@ RUN sed -i 's/\r$//' tauri_app/docker/*.sh \
|
||||
ENV ANDROID_AGP_LOCAL_REPO=/opt/android-agp-maven
|
||||
ENV GRADLE_USER_HOME=/root/.gradle
|
||||
|
||||
RUN /workspace/tauri_app/docker/prefetch-android-agp.sh
|
||||
|
||||
ENV VITE_API_URL=${PUBLIC_API_URL}
|
||||
ENV VITE_FRONTEND_URL=${PUBLIC_FRONTEND_URL}
|
||||
RUN /workspace/tauri_app/docker/warm-gradle-cache.sh
|
||||
RUN /workspace/tauri_app/docker/prefetch-android-agp.sh \
|
||||
&& /workspace/tauri_app/docker/verify-offline-agp.sh
|
||||
|
||||
CMD ["build-android-apk"]
|
||||
|
||||
@@ -44,7 +44,10 @@ npm run android:init -- --ci || npm run android:init
|
||||
echo "==> Настройка репозиториев Gradle (Google Maven + локальный кэш AGP)"
|
||||
/workspace/tauri_app/docker/patch-android-gradle-repos.sh /workspace/tauri_app/src-tauri/gen/android
|
||||
|
||||
echo "==> Сборка Android APK (AGP из шаблона Tauri, без принудительного даунгрейда)"
|
||||
echo "==> Настройка Android SDK (offline, без загрузки platform из Google)"
|
||||
/workspace/tauri_app/docker/patch-android-sdk.sh /workspace/tauri_app/src-tauri/gen/android
|
||||
|
||||
echo "==> Сборка Android APK"
|
||||
npm run tauri -- android build --apk
|
||||
|
||||
APK_PATH="$(find /workspace/tauri_app/src-tauri/gen/android -type f -name '*.apk' | sort | tail -n 1 || true)"
|
||||
|
||||
55
tauri_app/docker/patch-android-sdk.sh
Normal file
55
tauri_app/docker/patch-android-sdk.sh
Normal file
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env bash
|
||||
# Align Tauri Android project with locally installed SDK (offline builds).
|
||||
set -euo pipefail
|
||||
|
||||
ANDROID_GEN="${1:-/workspace/tauri_app/src-tauri/gen/android}"
|
||||
ANDROID_HOME="${ANDROID_HOME:-/opt/android-sdk}"
|
||||
ANDROID_SDK_ROOT="${ANDROID_SDK_ROOT:-${ANDROID_HOME}}"
|
||||
|
||||
if [ ! -d "${ANDROID_GEN}" ]; then
|
||||
echo "Android project not found: ${ANDROID_GEN}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "${ANDROID_HOME}/platforms" ] && [ -d /opt/android-sdk-linux/platforms ]; then
|
||||
ANDROID_HOME="/opt/android-sdk-linux"
|
||||
ANDROID_SDK_ROOT="${ANDROID_HOME}"
|
||||
fi
|
||||
|
||||
if [ ! -d "${ANDROID_HOME}/platforms" ]; then
|
||||
echo "Android platforms not found in ${ANDROID_HOME}/platforms" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SDK_LEVEL="$(
|
||||
find "${ANDROID_HOME}/platforms" -mindepth 1 -maxdepth 1 -type d -name 'android-*' \
|
||||
| sed 's|.*/android-||' \
|
||||
| sort -n \
|
||||
| tail -n 1
|
||||
)"
|
||||
|
||||
if [ -z "${SDK_LEVEL}" ]; then
|
||||
echo "Не удалось определить установленный Android SDK platform" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
APP_BUILD="${ANDROID_GEN}/app/build.gradle.kts"
|
||||
if [ -f "${APP_BUILD}" ]; then
|
||||
sed -i -E "s/compileSdk = [0-9]+/compileSdk = ${SDK_LEVEL}/g" "${APP_BUILD}"
|
||||
sed -i -E "s/targetSdk = [0-9]+/targetSdk = ${SDK_LEVEL}/g" "${APP_BUILD}"
|
||||
fi
|
||||
|
||||
GRADLE_PROPS="${ANDROID_GEN}/gradle.properties"
|
||||
touch "${GRADLE_PROPS}"
|
||||
if ! grep -q '^android.builder.sdkDownload=' "${GRADLE_PROPS}"; then
|
||||
printf '\n# Offline / isolated network: do not download SDK packages from Google\nandroid.builder.sdkDownload=false\n' >> "${GRADLE_PROPS}"
|
||||
else
|
||||
sed -i 's/^android.builder.sdkDownload=.*/android.builder.sdkDownload=false/' "${GRADLE_PROPS}"
|
||||
fi
|
||||
|
||||
cat > "${ANDROID_GEN}/local.properties" <<EOF
|
||||
## Autogenerated for offline Docker build. Do not commit.
|
||||
sdk.dir=${ANDROID_HOME}
|
||||
EOF
|
||||
|
||||
echo "==> Android SDK patched: compileSdk/targetSdk=${SDK_LEVEL}, sdk.dir=${ANDROID_HOME}, sdkDownload=false"
|
||||
28
tauri_app/docker/verify-offline-agp.sh
Normal file
28
tauri_app/docker/verify-offline-agp.sh
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env bash
|
||||
# Validate bundled Android Gradle Plugin cache inside the Docker image.
|
||||
set -euo pipefail
|
||||
|
||||
AGP_VERSION="${ANDROID_GRADLE_PLUGIN_VERSION:-8.11.0}"
|
||||
LOCAL_REPO="${ANDROID_AGP_LOCAL_REPO:-/opt/android-agp-maven}"
|
||||
BUNDLED_REPO="${ANDROID_AGP_BUNDLED_REPO:-/workspace/tauri_app/docker/offline-maven}"
|
||||
|
||||
required=(
|
||||
"${LOCAL_REPO}/com/android/tools/build/gradle/${AGP_VERSION}/gradle-${AGP_VERSION}.jar"
|
||||
"${LOCAL_REPO}/com/android/tools/build/builder/${AGP_VERSION}/builder-${AGP_VERSION}.pom"
|
||||
"${LOCAL_REPO}/com/android/tools/build/builder-model/${AGP_VERSION}/builder-model-${AGP_VERSION}.pom"
|
||||
"${LOCAL_REPO}/com/android/tools/build/gradle-api/${AGP_VERSION}/gradle-api-${AGP_VERSION}.pom"
|
||||
)
|
||||
|
||||
for file in "${required[@]}"; do
|
||||
if [ ! -f "${file}" ]; then
|
||||
echo "Неполный offline-кэш AGP, отсутствует: ${file}" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo "==> Offline AGP ${AGP_VERSION} validated in ${LOCAL_REPO}"
|
||||
|
||||
if [ -d "${BUNDLED_REPO}" ]; then
|
||||
rm -rf "${BUNDLED_REPO}"
|
||||
echo "==> Удалён дубликат offline-кэша из ${BUNDLED_REPO} (экономия места в образе)"
|
||||
fi
|
||||
Reference in New Issue
Block a user