Files
IdP/tauri_app/docker/build-android-apk.sh
2026-06-26 16:29:12 +03:00

88 lines
3.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
cd /workspace
export VITE_API_URL="${VITE_API_URL:-${PUBLIC_API_URL:-http://localhost:3000}}"
export VITE_FRONTEND_URL="${VITE_FRONTEND_URL:-${PUBLIC_FRONTEND_URL:-http://localhost:3002}}"
export ANDROID_HOME="${ANDROID_HOME:-/opt/android-sdk}"
export ANDROID_SDK_ROOT="${ANDROID_SDK_ROOT:-${ANDROID_HOME}}"
export ANDROID_GRADLE_PLUGIN_VERSION="${ANDROID_GRADLE_PLUGIN_VERSION:-}"
if [ -z "${ANDROID_NDK_HOME:-}" ]; then
NDK_DIR="$(find "${ANDROID_HOME}/ndk" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | sort -V | tail -n 1 || true)"
if [ -n "${NDK_DIR}" ]; then
export ANDROID_NDK_HOME="${NDK_DIR}"
export NDK_HOME="${NDK_DIR}"
fi
fi
echo "==> Android SDK: ${ANDROID_HOME}"
echo "==> Android NDK: ${ANDROID_NDK_HOME:-не найден}"
if [ -z "${ANDROID_NDK_HOME:-}" ] || [ ! -d "${ANDROID_NDK_HOME}" ]; then
echo "Android NDK не найден в ${ANDROID_HOME}/ndk. Используйте Android SDK image с предустановленным NDK или примонтируйте SDK с NDK." >&2
exit 1
fi
mkdir -p /out
echo "==> Проверка web-сборки tauri_app"
npm --workspace @lendry/tauri-app run build
cd /workspace/tauri_app
if [ ! -d "src-tauri/gen/android" ]; then
echo "==> Инициализация Android проекта Tauri"
npm run android:init -- --ci || npm run android:init
fi
resolve_agp_version() {
if [ -n "${ANDROID_GRADLE_PLUGIN_VERSION}" ]; then
echo "${ANDROID_GRADLE_PLUGIN_VERSION}"
return
fi
for version in 8.10.1 8.9.3 8.8.2 8.7.3 8.6.1; do
url="https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/${version}/gradle-${version}.pom"
if curl -fsIL --connect-timeout 10 --max-time 30 "${url}" >/dev/null 2>&1; then
echo "${version}"
return
fi
done
echo "8.10.1"
}
echo "==> Проверка Android Gradle Plugin"
RESOLVED_AGP_VERSION="$(resolve_agp_version)"
echo "==> Используем Android Gradle Plugin: ${RESOLVED_AGP_VERSION}"
find src-tauri/gen/android \
-type f \
\( -name '*.gradle' -o -name '*.gradle.kts' -o -name '*.toml' -o -name 'libs.versions.toml' \) \
-print0 \
| xargs -0 sed -i -E "s/(com\\.android\\.tools\\.build:gradle:)[0-9]+\\.[0-9]+\\.[0-9]+/\\1${RESOLVED_AGP_VERSION}/g; s/(com\\.android\\.application[\"']? version[[:space:]]*=?[[:space:]]*[\"'])[0-9]+\\.[0-9]+\\.[0-9]+/\\1${RESOLVED_AGP_VERSION}/g; s/(agp[[:space:]]*=[[:space:]]*[\"'])[0-9]+\\.[0-9]+\\.[0-9]+/\\1${RESOLVED_AGP_VERSION}/g; s/(androidGradlePlugin[[:space:]]*=[[:space:]]*[\"'])[0-9]+\\.[0-9]+\\.[0-9]+/\\1${RESOLVED_AGP_VERSION}/g; s/(gradle[[:space:]]*=[[:space:]]*[\"'])[8]\\.11\\.[0-9]+/\\1${RESOLVED_AGP_VERSION}/g"
if grep -R "com.android.tools.build:gradle:8.11\\|8.11.0\\|8.11.1" -n src-tauri/gen/android >/tmp/agp-leftovers.txt 2>/dev/null; then
echo "Остались ссылки на недоступный Android Gradle Plugin:" >&2
cat /tmp/agp-leftovers.txt >&2
exit 1
fi
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)"
if [ -z "${APK_PATH}" ] || [ ! -f "${APK_PATH}" ]; then
echo "APK не найден после сборки" >&2
find /workspace/tauri_app/src-tauri/gen/android -maxdepth 8 -type f | sort >&2 || true
exit 1
fi
cp "${APK_PATH}" /out/lendry-id.apk
chmod 0644 /out/lendry-id.apk
echo "==> APK готов: /out/lendry-id.apk"
ls -lh /out/lendry-id.apk