#!/usr/bin/env bash # Download AGP + AndroidX runtime deps into offline-maven for isolated LAN builds. # Run once on a machine with internet, then commit tauri_app/docker/offline-maven/. set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" AGP_VERSION="${ANDROID_GRADLE_PLUGIN_VERSION:-8.11.0}" RESOLVER="${ROOT}/docker/agp-resolver" OFFLINE="${ROOT}/docker/offline-maven" if [ ! -x "${RESOLVER}/gradlew" ]; then echo "Gradle wrapper not found in ${RESOLVER}" >&2 exit 1 fi run_export() { cd "${RESOLVER}" chmod +x ./gradlew sed -i 's/\r$//' ./gradlew 2>/dev/null || true if [ -n "${ANDROID_HOME:-}" ]; then printf 'sdk.dir=%s\n' "${ANDROID_HOME}" > local.properties fi ./gradlew exportAllOfflineMaven --no-daemon -PagpVersion="${AGP_VERSION}" "${ROOT}/docker/ensure-tauri-androidx-offline.sh" } echo "==> Resolving AGP ${AGP_VERSION} + Android runtime deps into ${OFFLINE}" for script in "${ROOT}/docker/populate-offline-agp.sh" "${ROOT}/docker/ensure-tauri-androidx-offline.sh"; do sed -i 's/\r$//' "${script}" 2>/dev/null || true done if [ -n "${ANDROID_HOME:-}" ] && [ -d "${ANDROID_HOME}/platforms" ]; then run_export elif command -v docker >/dev/null 2>&1; then echo "==> ANDROID_HOME not set; using Docker (ghcr.io/cirruslabs/android-sdk:35-ndk)" docker run --rm \ -v "${ROOT}/..:/workspace" \ -w /workspace/tauri_app/docker/agp-resolver \ -e ANDROID_HOME=/opt/android-sdk \ -e ANDROID_SDK_ROOT=/opt/android-sdk \ -e JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 \ ghcr.io/cirruslabs/android-sdk:35-ndk \ bash -lc "echo sdk.dir=\${ANDROID_HOME} > local.properties && ./gradlew exportAllOfflineMaven --no-daemon -PagpVersion=${AGP_VERSION} && /workspace/tauri_app/docker/ensure-tauri-androidx-offline.sh" else echo "Set ANDROID_HOME or install Docker to populate the offline AndroidX cache." >&2 exit 1 fi required=( "${OFFLINE}/com/android/tools/build/builder/${AGP_VERSION}/builder-${AGP_VERSION}.pom" "${OFFLINE}/androidx/webkit/webkit/1.14.0/webkit-1.14.0.pom" "${OFFLINE}/androidx/appcompat/appcompat/1.7.1/appcompat-1.7.1.pom" "${OFFLINE}/androidx/browser/browser/1.8.0/browser-1.8.0.pom" "${OFFLINE}/androidx/annotation/annotation/1.9.1/annotation-1.9.1.pom" "${OFFLINE}/androidx/lifecycle/lifecycle-runtime/2.10.0/lifecycle-runtime-2.10.0.pom" "${OFFLINE}/androidx/emoji2/emoji2-views-helper/1.2.0/emoji2-views-helper-1.2.0.pom" "${OFFLINE}/androidx/savedstate/savedstate/1.2.1/savedstate-1.2.1.pom" "${OFFLINE}/org/jetbrains/kotlin/kotlin-gradle-plugin/1.9.25/kotlin-gradle-plugin-1.9.25.pom" ) for file in "${required[@]}"; do if [ ! -f "${file}" ]; then echo "Missing required offline artifact: ${file}" >&2 exit 1 fi done TOTAL_SIZE="$(du -sh "${OFFLINE}" 2>/dev/null | awk '{print $1}' || echo '?')" ARTIFACTS="$(find "${OFFLINE}" \( -name '*.jar' -o -name '*.aar' \) 2>/dev/null | wc -l | tr -d ' ')" echo "==> Offline Maven cache ready: ${ARTIFACTS} jar/aar, total ${TOTAL_SIZE}" echo "==> Commit tauri_app/docker/offline-maven/ and push to the server"