forked from Tadrisino/MathApp_frontend
First time the project has been built: debug and release both produce an APK. Release refuses to build without keystore or RSA key. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
34 lines
2.3 KiB
Bash
Executable File
34 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# یک دستور برای ساختِ APKِ امضاشده: ./build-apk.sh
|
|
#
|
|
# چیزی را حدس نمیزند: JDK، Android SDK، keystore یا کلیدِ RSA نبود، با پیامِ روشن میایستد.
|
|
# تنظیمات از ~/.tadrisino/android.properties (یا $TADRISINO_ANDROID_CONFIG) میآید، نه از ریپو.
|
|
# بعد از build، امضا را با apksigner میسنجد و اثرانگشتِ گواهی را چاپ میکند تا با نسخهی قبلی بخوانید:
|
|
# گواهیِ متفاوت یعنی بازار آپدیت را نمیپذیرد.
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
CONFIG="${TADRISINO_ANDROID_CONFIG:-$HOME/.tadrisino/android.properties}"
|
|
export ANDROID_HOME="${ANDROID_HOME:-$HOME/Library/Android/sdk}"
|
|
if [ -z "${JAVA_HOME:-}" ] && [ -d /opt/homebrew/opt/openjdk@17 ]; then export JAVA_HOME=/opt/homebrew/opt/openjdk@17; fi
|
|
|
|
fail() { printf '✖ %s\n' "$1" >&2; exit 1; }
|
|
[ -n "${JAVA_HOME:-}" ] && [ -x "$JAVA_HOME/bin/java" ] || fail "JDK 17 پیدا نشد (JAVA_HOME). نصب: brew install openjdk@17"
|
|
[ -d "$ANDROID_HOME/platforms/android-34" ] || fail "Android SDK (platforms;android-34) در $ANDROID_HOME نیست."
|
|
[ -f "$CONFIG" ] || fail "فایلِ تنظیمات نیست: $CONFIG (README.md ← «تنظیماتِ بیرون از ریپو»)."
|
|
[ "$(stat -f %Lp "$CONFIG" 2>/dev/null || stat -c %a "$CONFIG")" = "600" ] || fail "دسترسیِ $CONFIG باید ۶۰۰ باشد: chmod 600 \"$CONFIG\""
|
|
[ -x ./gradlew ] || fail "gradlew نیست (gradle wrapper در ریپو کامیت میشود)."
|
|
|
|
./gradlew --no-daemon assembleRelease
|
|
|
|
APK="app/build/outputs/apk/release/app-release.apk"
|
|
[ -f "$APK" ] || fail "APK ساخته نشد: $APK"
|
|
APKSIGNER="$(ls -d "$ANDROID_HOME"/build-tools/*/apksigner | sort -V | tail -1)"
|
|
"$APKSIGNER" verify --print-certs "$APK" | grep -E "certificate (DN|SHA-256)"
|
|
CODE="$(grep -E '^\s*versionCode' app/build.gradle.kts | grep -oE '[0-9]+')"
|
|
NAME="$(grep -E '^\s*versionName' app/build.gradle.kts | grep -oE '"[^"]+"' | tr -d '"')"
|
|
OUT="build-out/Tadrisino-$NAME-$CODE.apk"
|
|
mkdir -p build-out && cp "$APK" "$OUT"
|
|
printf '✔ %s (versionCode %s)\n اثرانگشتِ گواهی بالا باید با APKِ قبلیِ منتشرشده یکی باشد.\n' "$OUT" "$CODE"
|