Add full offline Android Gradle Plugin dependency cache
This commit is contained in:
@@ -60,6 +60,11 @@ RUN sed -i 's/\r$//' tauri_app/docker/*.sh \
|
|||||||
|
|
||||||
ENV ANDROID_AGP_LOCAL_REPO=/opt/android-agp-maven
|
ENV ANDROID_AGP_LOCAL_REPO=/opt/android-agp-maven
|
||||||
ENV GRADLE_USER_HOME=/root/.gradle
|
ENV GRADLE_USER_HOME=/root/.gradle
|
||||||
|
ENV ANDROID_COMPILE_SDK=35
|
||||||
|
|
||||||
|
RUN if [ ! -d "${ANDROID_HOME}" ] && [ -d /opt/android-sdk-linux ]; then ln -s /opt/android-sdk-linux "${ANDROID_HOME}"; fi \
|
||||||
|
&& ln -sfn android-35 "${ANDROID_HOME}/platforms/android-36" \
|
||||||
|
&& test -e "${ANDROID_HOME}/platforms/android-36"
|
||||||
|
|
||||||
RUN /workspace/tauri_app/docker/prefetch-android-agp.sh \
|
RUN /workspace/tauri_app/docker/prefetch-android-agp.sh \
|
||||||
&& /workspace/tauri_app/docker/verify-offline-agp.sh
|
&& /workspace/tauri_app/docker/verify-offline-agp.sh
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ set -euo pipefail
|
|||||||
ANDROID_GEN="${1:-/workspace/tauri_app/src-tauri/gen/android}"
|
ANDROID_GEN="${1:-/workspace/tauri_app/src-tauri/gen/android}"
|
||||||
ANDROID_HOME="${ANDROID_HOME:-/opt/android-sdk}"
|
ANDROID_HOME="${ANDROID_HOME:-/opt/android-sdk}"
|
||||||
ANDROID_SDK_ROOT="${ANDROID_SDK_ROOT:-${ANDROID_HOME}}"
|
ANDROID_SDK_ROOT="${ANDROID_SDK_ROOT:-${ANDROID_HOME}}"
|
||||||
|
GRADLE_USER_HOME="${GRADLE_USER_HOME:-/root/.gradle}"
|
||||||
|
|
||||||
if [ ! -d "${ANDROID_GEN}" ]; then
|
if [ ! -d "${ANDROID_GEN}" ]; then
|
||||||
echo "Android project not found: ${ANDROID_GEN}" >&2
|
echo "Android project not found: ${ANDROID_GEN}" >&2
|
||||||
@@ -33,10 +34,43 @@ if [ -z "${SDK_LEVEL}" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
APP_BUILD="${ANDROID_GEN}/app/build.gradle.kts"
|
export ANDROID_COMPILE_SDK="${SDK_LEVEL}"
|
||||||
if [ -f "${APP_BUILD}" ]; then
|
|
||||||
sed -i -E "s/compileSdk = [0-9]+/compileSdk = ${SDK_LEVEL}/g" "${APP_BUILD}"
|
PLATFORM_DIR="${ANDROID_HOME}/platforms"
|
||||||
sed -i -E "s/targetSdk = [0-9]+/targetSdk = ${SDK_LEVEL}/g" "${APP_BUILD}"
|
# 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}" <<EOF
|
||||||
|
|
||||||
|
// forceOfflineAndroidSdk: override compileSdk for Tauri plugin subprojects (offline LAN builds)
|
||||||
|
subprojects {
|
||||||
|
afterEvaluate {
|
||||||
|
extensions.findByType(com.android.build.gradle.AppExtension::class.java)?.apply {
|
||||||
|
compileSdk = ${SDK_LEVEL}
|
||||||
|
defaultConfig.targetSdk = ${SDK_LEVEL}
|
||||||
|
}
|
||||||
|
extensions.findByType(com.android.build.gradle.LibraryExtension::class.java)?.apply {
|
||||||
|
compileSdk = ${SDK_LEVEL}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
GRADLE_PROPS="${ANDROID_GEN}/gradle.properties"
|
GRADLE_PROPS="${ANDROID_GEN}/gradle.properties"
|
||||||
@@ -47,9 +81,49 @@ else
|
|||||||
sed -i 's/^android.builder.sdkDownload=.*/android.builder.sdkDownload=false/' "${GRADLE_PROPS}"
|
sed -i 's/^android.builder.sdkDownload=.*/android.builder.sdkDownload=false/' "${GRADLE_PROPS}"
|
||||||
fi
|
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" <<EOF
|
cat > "${ANDROID_GEN}/local.properties" <<EOF
|
||||||
## Autogenerated for offline Docker build. Do not commit.
|
## Autogenerated for offline Docker build. Do not commit.
|
||||||
sdk.dir=${ANDROID_HOME}
|
sdk.dir=${ANDROID_HOME}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
mkdir -p "${GRADLE_USER_HOME}/init.d"
|
||||||
|
cat > "${GRADLE_USER_HOME}/init.d/force-android-sdk.gradle" <<EOF
|
||||||
|
def offlineCompileSdk = (System.getenv('ANDROID_COMPILE_SDK') ?: '${SDK_LEVEL}').toInteger()
|
||||||
|
|
||||||
|
gradle.beforeProject { project ->
|
||||||
|
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"
|
echo "==> Android SDK patched: compileSdk/targetSdk=${SDK_LEVEL}, sdk.dir=${ANDROID_HOME}, sdkDownload=false"
|
||||||
|
|||||||
Reference in New Issue
Block a user