#!/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}}" GRADLE_USER_HOME="${GRADLE_USER_HOME:-/root/.gradle}" 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 export ANDROID_COMPILE_SDK="${SDK_LEVEL}" PLATFORM_DIR="${ANDROID_HOME}/platforms" # Tauri 2.x templates/plugins request android-36 while the SDK image ships android-35. for requested in 36 35 34; do if [ ! -e "${PLATFORM_DIR}/android-${requested}" ] && [ -d "${PLATFORM_DIR}/android-${SDK_LEVEL}" ]; then ln -sfn "android-${SDK_LEVEL}" "${PLATFORM_DIR}/android-${requested}" echo "==> Platform symlink: android-${requested} -> android-${SDK_LEVEL}" fi done while IFS= read -r -d '' gradle_file; do sed -i -E "s/compileSdk = [0-9]+/compileSdk = ${SDK_LEVEL}/g" "${gradle_file}" sed -i -E "s/targetSdk = [0-9]+/targetSdk = ${SDK_LEVEL}/g" "${gradle_file}" sed -i -E "s/compileSdkVersion = [0-9]+/compileSdkVersion = ${SDK_LEVEL}/g" "${gradle_file}" sed -i -E "s/compileSdkVersion [0-9]+/compileSdkVersion ${SDK_LEVEL}/g" "${gradle_file}" sed -i -E "s/targetSdkVersion = [0-9]+/targetSdkVersion = ${SDK_LEVEL}/g" "${gradle_file}" sed -i -E "s/targetSdkVersion [0-9]+/targetSdkVersion ${SDK_LEVEL}/g" "${gradle_file}" done < <(find "${ANDROID_GEN}" \( -name 'build.gradle.kts' -o -name 'build.gradle' \) -print0 2>/dev/null || true) ROOT_BUILD="${ANDROID_GEN}/build.gradle.kts" if [ -f "${ROOT_BUILD}" ] && ! grep -q 'forceOfflineAndroidSdk' "${ROOT_BUILD}"; then cat >> "${ROOT_BUILD}" <> "${GRADLE_PROPS}" else sed -i 's/^android.builder.sdkDownload=.*/android.builder.sdkDownload=false/' "${GRADLE_PROPS}" fi if ! grep -q '^android.compileSdk=' "${GRADLE_PROPS}"; then printf 'android.compileSdk=%s\n' "${SDK_LEVEL}" >> "${GRADLE_PROPS}" else sed -i "s/^android.compileSdk=.*/android.compileSdk=${SDK_LEVEL}/" "${GRADLE_PROPS}" fi cat > "${ANDROID_GEN}/local.properties" < "${GRADLE_USER_HOME}/init.d/force-android-sdk.gradle" < project.afterEvaluate { def androidExt = project.extensions.findByName('android') if (androidExt == null) { return } try { androidExt.compileSdk = offlineCompileSdk } catch (ignored) { try { androidExt.compileSdkVersion offlineCompileSdk } catch (ignored2) { // ignore non-Android projects } } try { if (androidExt.metaClass.hasProperty(androidExt, 'defaultConfig') && androidExt.defaultConfig != null) { androidExt.defaultConfig.targetSdk = offlineCompileSdk } } catch (ignored) { try { androidExt.defaultConfig.targetSdkVersion offlineCompileSdk } catch (ignored2) { // ignore library modules without targetSdk } } } } EOF echo "==> Android SDK patched: compileSdk/targetSdk=${SDK_LEVEL}, sdk.dir=${ANDROID_HOME}, sdkDownload=false"