This commit is contained in:
lendry
2026-06-26 20:39:41 +03:00
parent 65abf17421
commit 8805ec327f
6 changed files with 423 additions and 3 deletions

View File

@@ -235,6 +235,8 @@ services:
dockerfile: tauri_app/Dockerfile.apk
args:
NPM_REGISTRY: ${NPM_REGISTRY:-https://registry.npmjs.org}
PUBLIC_API_URL: ${PUBLIC_API_URL:-http://localhost:3000}
PUBLIC_FRONTEND_URL: ${PUBLIC_FRONTEND_URL:-http://localhost:3002}
container_name: lendry-id-tauri-apk-builder
restart: "no"
environment:

View File

@@ -7,6 +7,8 @@ ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
ENV PATH=/root/.cargo/bin:/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:/usr/local/bin:$PATH
ARG NPM_REGISTRY=https://registry.npmjs.org
ARG PUBLIC_API_URL=http://localhost:3000
ARG PUBLIC_FRONTEND_URL=http://localhost:3002
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
@@ -62,8 +64,8 @@ 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
ENV VITE_API_URL=${PUBLIC_API_URL}
ENV VITE_FRONTEND_URL=${PUBLIC_FRONTEND_URL}
RUN /workspace/tauri_app/docker/warm-gradle-cache.sh
CMD ["build-android-apk"]

View File

@@ -0,0 +1,363 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- This module was also published with a richer model, Gradle metadata, -->
<!-- which should be used instead. Do not delete the following line which -->
<!-- is to indicate to Gradle or any Gradle module metadata file consumer -->
<!-- that they should prefer consuming it instead. -->
<!-- do_not_remove: published-with-gradle-metadata -->
<modelVersion>4.0.0</modelVersion>
<groupId>com.android.tools.build</groupId>
<artifactId>gradle</artifactId>
<version>8.11.0</version>
<dependencies>
<dependency>
<groupId>com.android.tools.build</groupId>
<artifactId>builder</artifactId>
<version>8.11.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.android.tools.build</groupId>
<artifactId>builder-model</artifactId>
<version>8.11.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.android.tools.build</groupId>
<artifactId>gradle-api</artifactId>
<version>8.11.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.android.tools.build</groupId>
<artifactId>gradle-settings-api</artifactId>
<version>8.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools</groupId>
<artifactId>sdk-common</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools</groupId>
<artifactId>sdklib</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools</groupId>
<artifactId>repository</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.ddms</groupId>
<artifactId>ddmlib</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.build</groupId>
<artifactId>aapt2-proto</artifactId>
<version>8.11.0-12782657</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.build</groupId>
<artifactId>aaptcompiler</artifactId>
<version>8.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.analytics-library</groupId>
<artifactId>crash</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.analytics-library</groupId>
<artifactId>shared</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.lint</groupId>
<artifactId>lint-model</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.lint</groupId>
<artifactId>lint-typedef-remover</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>androidx.databinding</groupId>
<artifactId>databinding-compiler-common</artifactId>
<version>8.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>androidx.databinding</groupId>
<artifactId>databinding-common</artifactId>
<version>8.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.databinding</groupId>
<artifactId>baseLibrary</artifactId>
<version>8.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.build</groupId>
<artifactId>builder-test-api</artifactId>
<version>8.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.layoutlib</groupId>
<artifactId>layoutlib-api</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.utp</groupId>
<artifactId>android-device-provider-ddmlib-proto</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.utp</groupId>
<artifactId>android-device-provider-gradle-proto</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.utp</groupId>
<artifactId>android-device-provider-profile-proto</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.utp</groupId>
<artifactId>android-test-plugin-host-additional-test-output-proto</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.utp</groupId>
<artifactId>android-test-plugin-host-coverage-proto</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.utp</groupId>
<artifactId>android-test-plugin-host-emulator-control-proto</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.utp</groupId>
<artifactId>android-test-plugin-host-logcat-proto</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.utp</groupId>
<artifactId>android-test-plugin-host-apk-installer-proto</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.utp</groupId>
<artifactId>android-test-plugin-result-listener-gradle-proto</artifactId>
<version>31.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>2.1.20</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.build</groupId>
<artifactId>transform-api</artifactId>
<version>2.0.0-deprecated-use-gradle-api</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.6</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.16.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>9.7.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-analysis</artifactId>
<version>9.7.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-commons</artifactId>
<version>9.7.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-util</artifactId>
<version>9.7.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk18on</artifactId>
<version>1.79</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>net.sf.jopt-simple</groupId>
<artifactId>jopt-simple</artifactId>
<version>4.9</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.build</groupId>
<artifactId>bundletool</artifactId>
<version>1.18.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.build.jetifier</groupId>
<artifactId>jetifier-core</artifactId>
<version>1.0.0-beta10</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.android.tools.build.jetifier</groupId>
<artifactId>jetifier-processor</artifactId>
<version>1.0.0-beta10</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.squareup</groupId>
<artifactId>javapoet</artifactId>
<version>1.10.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.25.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java-util</artifactId>
<version>3.25.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-core</artifactId>
<version>1.69.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>1.69.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>1.69.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>1.69.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-inprocess</artifactId>
<version>1.69.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.google.crypto.tink</groupId>
<artifactId>tink</artifactId>
<version>1.7.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.google.testing.platform</groupId>
<artifactId>core-proto</artifactId>
<version>0.0.9-alpha03</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.google.flatbuffers</groupId>
<artifactId>flatbuffers-java</artifactId>
<version>1.12.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>tensorflow-lite-metadata</artifactId>
<version>0.2.0</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<description>Gradle plug-in to build Android applications.</description>
<url>https://developer.android.com/studio/build</url>
<name>com.android.tools.build.gradle</name>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<developer>
<name>The Android Open Source Project</name>
</developer>
</developers>
<scm>
<connection>git://android.googlesource.com/platform/tools/base.git</connection>
<url>https://android.googlesource.com/platform/tools/base</url>
</scm>
</project>

View File

@@ -0,0 +1,35 @@
#!/usr/bin/env bash
# Download Android Gradle Plugin into tauri_app/docker/offline-maven for offline Docker builds.
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
AGP_VERSION="${ANDROID_GRADLE_PLUGIN_VERSION:-8.11.0}"
DEST="${ROOT}/docker/offline-maven/com/android/tools/build/gradle/${AGP_VERSION}"
mkdir -p "${DEST}"
try_download() {
local base_url="$1"
if curl -fsSL --connect-timeout 20 --max-time 120 \
"${base_url}/com/android/tools/build/gradle/${AGP_VERSION}/gradle-${AGP_VERSION}.pom" \
-o "${DEST}/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}/gradle-${AGP_VERSION}.jar"
echo "==> AGP ${AGP_VERSION} saved to ${DEST} (source: ${base_url})"
return 0
fi
return 1
}
for base in \
"https://maven.google.com" \
"https://dl.google.com/android/maven2" \
"https://dl.google.com/dl/android/maven2"; do
if try_download "${base}"; then
exit 0
fi
done
echo "Не удалось скачать AGP ${AGP_VERSION}. Проверьте доступ к Google Maven." >&2
exit 1

View File

@@ -4,6 +4,18 @@ set -euo pipefail
AGP_VERSION="${ANDROID_GRADLE_PLUGIN_VERSION:-8.11.0}"
LOCAL_REPO="${ANDROID_AGP_LOCAL_REPO:-/opt/android-agp-maven}"
BUNDLED_REPO="${ANDROID_AGP_BUNDLED_REPO:-/workspace/tauri_app/docker/offline-maven}"
BUNDLED_ARTIFACT="${BUNDLED_REPO}/com/android/tools/build/gradle/${AGP_VERSION}/gradle-${AGP_VERSION}.jar"
copy_bundled() {
if [ ! -f "${BUNDLED_ARTIFACT}" ]; then
return 1
fi
mkdir -p "${LOCAL_REPO}"
cp -a "${BUNDLED_REPO}/." "${LOCAL_REPO}/"
echo "==> AGP ${AGP_VERSION} copied from bundled offline cache (${BUNDLED_REPO})"
return 0
}
try_download() {
local base_url="$1"
@@ -24,6 +36,10 @@ try_download() {
echo "==> Prefetch Android Gradle Plugin ${AGP_VERSION}"
if copy_bundled; then
exit 0
fi
MIRROR=""
for base in \
"https://maven.google.com" \
@@ -36,7 +52,9 @@ for base in \
done
if [ -z "${MIRROR}" ]; then
echo "Не удалось скачать Android Gradle Plugin ${AGP_VERSION} ни из одного зеркала Google Maven" >&2
echo "Не удалось получить Android Gradle Plugin ${AGP_VERSION}." >&2
echo "Нет bundled-кэша в ${BUNDLED_REPO} и Google Maven недоступен (404/сеть)." >&2
echo "На машине с интернетом выполните: tauri_app/docker/populate-offline-agp.sh" >&2
exit 1
fi