Add full offline Android Gradle Plugin dependency cache

This commit is contained in:
lendry
2026-06-26 21:56:56 +03:00
parent 07df6eacf1
commit ea204a4d38
6 changed files with 98 additions and 12 deletions

View File

@@ -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)"

View 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"

View 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