86 lines
3.1 KiB
Bash
86 lines
3.1 KiB
Bash
#!/usr/bin/env bash
|
||
# Подключает release-подпись APK через keystore.properties + Gradle script.
|
||
set -euo pipefail
|
||
|
||
ANDROID_GEN="${1:-/workspace/tauri_app/src-tauri/gen/android}"
|
||
SECRETS_DIR="${ANDROID_SECRETS_DIR:-/workspace/tauri_app/.secrets}"
|
||
KEYSTORE_FILE="${ANDROID_KEYSTORE_FILE:-${SECRETS_DIR}/lendry-id-release.keystore}"
|
||
APP_GRADLE="${ANDROID_GEN}/app/build.gradle.kts"
|
||
KEYSTORE_PROPS="${ANDROID_GEN}/keystore.properties"
|
||
SIGNING_SCRIPT="${ANDROID_GEN}/app/release-signing.gradle.kts"
|
||
PROPS_TEMPLATE="${SECRETS_DIR}/keystore.properties.template"
|
||
|
||
if [[ ! -d "${ANDROID_GEN}" ]]; then
|
||
echo "Android project not found: ${ANDROID_GEN}" >&2
|
||
exit 1
|
||
fi
|
||
|
||
if [[ ! -f "${KEYSTORE_FILE}" ]]; then
|
||
echo "Keystore не найден: ${KEYSTORE_FILE}. Запустите ensure-android-keystore.sh" >&2
|
||
exit 1
|
||
fi
|
||
|
||
if [[ -f "${PROPS_TEMPLATE}" ]]; then
|
||
cp "${PROPS_TEMPLATE}" "${KEYSTORE_PROPS}"
|
||
else
|
||
echo "keystore.properties.template не найден в ${SECRETS_DIR}" >&2
|
||
exit 1
|
||
fi
|
||
|
||
# Абсолютный путь надёжнее относительного при Gradle rootProject.file().
|
||
if grep -q '^storeFile=' "${KEYSTORE_PROPS}"; then
|
||
sed -i "s|^storeFile=.*|storeFile=${KEYSTORE_FILE}|" "${KEYSTORE_PROPS}"
|
||
else
|
||
printf '\nstoreFile=%s\n' "${KEYSTORE_FILE}" >> "${KEYSTORE_PROPS}"
|
||
fi
|
||
|
||
STORE_PASSWORD="$(grep -E '^storePassword=' "${KEYSTORE_PROPS}" | head -n1 | cut -d= -f2- || true)"
|
||
KEY_ALIAS_PROP="$(grep -E '^keyAlias=' "${KEYSTORE_PROPS}" | head -n1 | cut -d= -f2- || true)"
|
||
KEY_ALIAS_PROP="${KEY_ALIAS_PROP:-lendry-id}"
|
||
|
||
if [[ -z "${STORE_PASSWORD}" ]]; then
|
||
echo "storePassword не найден в ${KEYSTORE_PROPS}" >&2
|
||
exit 1
|
||
fi
|
||
|
||
if ! keytool -list -keystore "${KEYSTORE_FILE}" -storepass "${STORE_PASSWORD}" -alias "${KEY_ALIAS_PROP}" >/dev/null 2>&1; then
|
||
echo "Keystore не читается с паролями из ${KEYSTORE_PROPS}." >&2
|
||
echo "Удалите tauri_app/.secrets и пересоберите APK, либо задайте ANDROID_KEYSTORE_FORCE_REGENERATE=1." >&2
|
||
exit 1
|
||
fi
|
||
|
||
chmod 600 "${KEYSTORE_PROPS}" || true
|
||
|
||
cat > "${SIGNING_SCRIPT}" <<'EOF'
|
||
import com.android.build.api.dsl.ApplicationExtension
|
||
import java.io.File
|
||
import java.util.Properties
|
||
|
||
val keystoreProperties = Properties().apply {
|
||
rootProject.file("keystore.properties").inputStream().use { load(it) }
|
||
}
|
||
|
||
extensions.configure<ApplicationExtension>("android") {
|
||
signingConfigs {
|
||
create("release") {
|
||
val storePasswordValue = keystoreProperties.getProperty("storePassword")
|
||
keyAlias = keystoreProperties.getProperty("keyAlias")
|
||
keyPassword = keystoreProperties.getProperty("keyPassword")
|
||
storeFile = File(keystoreProperties.getProperty("storeFile"))
|
||
storePassword = storePasswordValue
|
||
}
|
||
}
|
||
buildTypes {
|
||
getByName("release") {
|
||
signingConfig = signingConfigs.getByName("release")
|
||
}
|
||
}
|
||
}
|
||
EOF
|
||
|
||
if ! grep -q 'release-signing.gradle.kts' "${APP_GRADLE}"; then
|
||
printf '\napply(from = "release-signing.gradle.kts")\n' >> "${APP_GRADLE}"
|
||
fi
|
||
|
||
echo "==> Android release signing patched (${KEYSTORE_PROPS})"
|