fix
This commit is contained in:
@@ -7,6 +7,8 @@ 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 GRADLE_USER_HOME="${GRADLE_USER_HOME:-/root/.gradle}"
|
||||
export ANDROID_AGP_LOCAL_REPO="${ANDROID_AGP_LOCAL_REPO:-/opt/android-agp-maven}"
|
||||
|
||||
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)"
|
||||
@@ -39,6 +41,9 @@ fi
|
||||
echo "==> Инициализация Android проекта Tauri"
|
||||
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, без принудительного даунгрейда)"
|
||||
npm run tauri -- android build --apk
|
||||
|
||||
|
||||
103
tauri_app/docker/patch-android-gradle-repos.sh
Normal file
103
tauri_app/docker/patch-android-gradle-repos.sh
Normal file
@@ -0,0 +1,103 @@
|
||||
#!/usr/bin/env bash
|
||||
# Adds reliable Google Maven mirrors for Android Gradle Plugin resolution.
|
||||
set -euo pipefail
|
||||
|
||||
ANDROID_GEN="${1:-/workspace/tauri_app/src-tauri/gen/android}"
|
||||
|
||||
if [ ! -d "${ANDROID_GEN}" ]; then
|
||||
echo "Android project not found: ${ANDROID_GEN}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
GRADLE_USER_HOME="${GRADLE_USER_HOME:-/root/.gradle}"
|
||||
LOCAL_REPO="${ANDROID_AGP_LOCAL_REPO:-/opt/android-agp-maven}"
|
||||
mkdir -p "${GRADLE_USER_HOME}/init.d"
|
||||
|
||||
cat > "${GRADLE_USER_HOME}/init.d/agp-repos.gradle" <<EOF
|
||||
def googleMirrors = []
|
||||
def localAgpRepo = new File('${LOCAL_REPO}')
|
||||
if (localAgpRepo.exists()) {
|
||||
googleMirrors.add(localAgpRepo.toURI().toString())
|
||||
}
|
||||
googleMirrors.addAll([
|
||||
'https://maven.google.com',
|
||||
'https://dl.google.com/android/maven2/',
|
||||
'https://dl.google.com/dl/android/maven2/'
|
||||
])
|
||||
|
||||
gradle.beforeSettings { settings ->
|
||||
settings.pluginManagement {
|
||||
repositories {
|
||||
googleMirrors.each { url ->
|
||||
maven { setUrl(url) }
|
||||
}
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
buildscript {
|
||||
repositories {
|
||||
googleMirrors.each { url ->
|
||||
maven { setUrl(url) }
|
||||
}
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
repositories {
|
||||
googleMirrors.each { url ->
|
||||
maven { setUrl(url) }
|
||||
}
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
insert_maven_repos() {
|
||||
local file="$1"
|
||||
[ -f "${file}" ] || return 0
|
||||
if grep -q 'maven.google.com' "${file}"; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
awk '
|
||||
/repositories[[:space:]]*\{/ {
|
||||
print
|
||||
print " maven { url = uri(\"https://maven.google.com\") }"
|
||||
print " maven { url = uri(\"https://dl.google.com/android/maven2/\") }"
|
||||
print " maven { url = uri(\"file:///opt/android-agp-maven\") }"
|
||||
next
|
||||
}
|
||||
{ print }
|
||||
' "${file}" > "${file}.tmp" && mv "${file}.tmp" "${file}"
|
||||
}
|
||||
|
||||
insert_maven_repos "${ANDROID_GEN}/build.gradle.kts"
|
||||
insert_maven_repos "${ANDROID_GEN}/buildSrc/build.gradle.kts"
|
||||
insert_maven_repos "${ANDROID_GEN}/app/build.gradle.kts" 2>/dev/null || true
|
||||
|
||||
if [ -f "${ANDROID_GEN}/settings.gradle" ] && ! grep -q 'pluginManagement' "${ANDROID_GEN}/settings.gradle"; then
|
||||
{
|
||||
cat <<'EOF'
|
||||
pluginManagement {
|
||||
repositories {
|
||||
maven { url = uri("file:///opt/android-agp-maven") }
|
||||
maven { url = uri("https://maven.google.com") }
|
||||
maven { url = uri("https://dl.google.com/android/maven2/") }
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
EOF
|
||||
cat "${ANDROID_GEN}/settings.gradle"
|
||||
} > "${ANDROID_GEN}/settings.gradle.tmp" && mv "${ANDROID_GEN}/settings.gradle.tmp" "${ANDROID_GEN}/settings.gradle"
|
||||
fi
|
||||
|
||||
echo "==> Gradle repositories patched for AGP (${ANDROID_GEN})"
|
||||
48
tauri_app/docker/prefetch-android-agp.sh
Normal file
48
tauri_app/docker/prefetch-android-agp.sh
Normal file
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env bash
|
||||
# Pre-download Android Gradle Plugin into a local Maven repo inside the image.
|
||||
set -euo pipefail
|
||||
|
||||
AGP_VERSION="${ANDROID_GRADLE_PLUGIN_VERSION:-8.11.0}"
|
||||
LOCAL_REPO="${ANDROID_AGP_LOCAL_REPO:-/opt/android-agp-maven}"
|
||||
|
||||
try_download() {
|
||||
local base_url="$1"
|
||||
local dest_dir="${LOCAL_REPO}/com/android/tools/build/gradle/${AGP_VERSION}"
|
||||
mkdir -p "${dest_dir}"
|
||||
|
||||
if curl -fsSL --connect-timeout 20 --max-time 120 \
|
||||
"${base_url}/com/android/tools/build/gradle/${AGP_VERSION}/gradle-${AGP_VERSION}.pom" \
|
||||
-o "${dest_dir}/gradle-${AGP_VERSION}.pom"; then
|
||||
curl -fsSL --connect-timeout 20 --max-time 600 \
|
||||
"${base_url}/com/android/tools/build/gradle/${AGP_VERSION}/gradle-${AGP_VERSION}.jar" \
|
||||
-o "${dest_dir}/gradle-${AGP_VERSION}.jar"
|
||||
echo "${base_url}"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
echo "==> Prefetch Android Gradle Plugin ${AGP_VERSION}"
|
||||
|
||||
MIRROR=""
|
||||
for base in \
|
||||
"https://maven.google.com" \
|
||||
"https://dl.google.com/android/maven2" \
|
||||
"https://dl.google.com/dl/android/maven2"; do
|
||||
if MIRROR="$(try_download "${base}")"; then
|
||||
echo "==> AGP ${AGP_VERSION} cached from ${MIRROR}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "${MIRROR}" ]; then
|
||||
echo "Не удалось скачать Android Gradle Plugin ${AGP_VERSION} ни из одного зеркала Google Maven" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cat > "${LOCAL_REPO}/README.txt" <<EOF
|
||||
Local cache for com.android.tools.build:gradle:${AGP_VERSION}
|
||||
Source: ${MIRROR}
|
||||
EOF
|
||||
|
||||
echo "==> Local AGP repo: ${LOCAL_REPO}"
|
||||
42
tauri_app/docker/warm-gradle-cache.sh
Normal file
42
tauri_app/docker/warm-gradle-cache.sh
Normal file
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env bash
|
||||
# Warm Gradle cache for Tauri Android buildSrc during Docker image build.
|
||||
set -euo pipefail
|
||||
|
||||
cd /workspace/tauri_app
|
||||
|
||||
export ANDROID_HOME="${ANDROID_HOME:-/opt/android-sdk}"
|
||||
export ANDROID_SDK_ROOT="${ANDROID_SDK_ROOT:-${ANDROID_HOME}}"
|
||||
export GRADLE_USER_HOME="${GRADLE_USER_HOME:-/root/.gradle}"
|
||||
export ANDROID_AGP_LOCAL_REPO="${ANDROID_AGP_LOCAL_REPO:-/opt/android-agp-maven}"
|
||||
|
||||
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)"
|
||||
[ -n "${NDK_DIR}" ] && export ANDROID_NDK_HOME="${NDK_DIR}" && export NDK_HOME="${NDK_DIR}"
|
||||
fi
|
||||
|
||||
npm run build
|
||||
rm -rf src-tauri/gen/android
|
||||
npm run android:init -- --ci
|
||||
|
||||
/workspace/tauri_app/docker/patch-android-gradle-repos.sh /workspace/tauri_app/src-tauri/gen/android
|
||||
|
||||
ANDROID_GEN="/workspace/tauri_app/src-tauri/gen/android"
|
||||
if [ ! -f "${ANDROID_GEN}/tauri.settings.gradle" ]; then
|
||||
echo '// Gradle warmup stub; Tauri overwrites this during android build' > "${ANDROID_GEN}/tauri.settings.gradle"
|
||||
fi
|
||||
if [ ! -f "${ANDROID_GEN}/app/tauri.build.gradle.kts" ]; then
|
||||
echo '// Gradle warmup stub; Tauri overwrites this during android build' > "${ANDROID_GEN}/app/tauri.build.gradle.kts"
|
||||
fi
|
||||
|
||||
cd "${ANDROID_GEN}"
|
||||
set +e
|
||||
./gradlew :buildSrc:compileKotlin --no-daemon --stacktrace
|
||||
GRADLE_EXIT=$?
|
||||
set -e
|
||||
|
||||
if [ -d "${GRADLE_USER_HOME}/caches/modules-2/files-2.1/com.android.tools.build/gradle/8.11.0" ]; then
|
||||
echo "==> Android Gradle Plugin cached in ${GRADLE_USER_HOME}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
exit "${GRADLE_EXIT}"
|
||||
Reference in New Issue
Block a user