fix
This commit is contained in:
@@ -51,9 +51,19 @@ COPY apps/frontend ./apps/frontend
|
|||||||
COPY shared ./shared
|
COPY shared ./shared
|
||||||
COPY tsconfig.base.json ./
|
COPY tsconfig.base.json ./
|
||||||
COPY tauri_app ./tauri_app
|
COPY tauri_app ./tauri_app
|
||||||
COPY tauri_app/docker/build-android-apk.sh /usr/local/bin/build-android-apk
|
|
||||||
|
|
||||||
RUN sed -i 's/\r$//' /usr/local/bin/build-android-apk \
|
RUN sed -i 's/\r$//' tauri_app/docker/*.sh \
|
||||||
|
&& chmod +x tauri_app/docker/*.sh \
|
||||||
|
&& cp tauri_app/docker/build-android-apk.sh /usr/local/bin/build-android-apk \
|
||||||
&& chmod +x /usr/local/bin/build-android-apk
|
&& chmod +x /usr/local/bin/build-android-apk
|
||||||
|
|
||||||
|
ENV ANDROID_AGP_LOCAL_REPO=/opt/android-agp-maven
|
||||||
|
ENV GRADLE_USER_HOME=/root/.gradle
|
||||||
|
|
||||||
|
RUN /workspace/tauri_app/docker/prefetch-android-agp.sh
|
||||||
|
|
||||||
|
ENV VITE_API_URL=https://id.lendry.ru
|
||||||
|
ENV VITE_FRONTEND_URL=https://id.lendry.ru
|
||||||
|
RUN /workspace/tauri_app/docker/warm-gradle-cache.sh
|
||||||
|
|
||||||
CMD ["build-android-apk"]
|
CMD ["build-android-apk"]
|
||||||
|
|||||||
@@ -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 VITE_FRONTEND_URL="${VITE_FRONTEND_URL:-${PUBLIC_FRONTEND_URL:-http://localhost:3002}}"
|
||||||
export ANDROID_HOME="${ANDROID_HOME:-/opt/android-sdk}"
|
export ANDROID_HOME="${ANDROID_HOME:-/opt/android-sdk}"
|
||||||
export ANDROID_SDK_ROOT="${ANDROID_SDK_ROOT:-${ANDROID_HOME}}"
|
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
|
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)"
|
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"
|
echo "==> Инициализация Android проекта Tauri"
|
||||||
npm run android:init -- --ci || npm run android:init
|
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 APK (AGP из шаблона Tauri, без принудительного даунгрейда)"
|
||||||
npm run tauri -- android build --apk
|
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