Files
goldenChart/scripts/build-mobile-apk.sh
T
Macbook 7c4fc00b37 fix: server mobile CI — Java paths, monorepo Podfile
Jenkins/서버에서 brew OpenJDK·Android SDK 경로를 사용하고, npm workspace
루트의 Capacitor iOS 의존성을 Podfile이 참조하도록 수정한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-14 16:40:58 +09:00

81 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# GoldenChart Android APK — 로컬(CI) 빌드 → data/mobile-releases/
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT"
APK_REMOTE_NAME="${APK_REMOTE_NAME:-goldenchart-android.apk}"
LOCAL_APK="${LOCAL_APK:-$ROOT/data/mobile-releases/$APK_REMOTE_NAME}"
log() { echo "[build-mobile-apk $(date '+%H:%M:%S')] $*"; }
sign_release_apk() {
local unsigned="$ROOT/app/android/app/build/outputs/apk/release/app-release-unsigned.apk"
local signed="$ROOT/app/android/app/build/outputs/apk/release/app-release.apk"
local keystore="$ROOT/app/android/goldenchart-release.keystore"
if [[ ! -f "$unsigned" ]]; then
echo "unsigned APK 없음: $unsigned" >&2
exit 1
fi
if [[ ! -f "$keystore" ]]; then
log "keystore 생성..."
"${JAVA_HOME}/bin/keytool" -genkeypair -v -keystore "$keystore" -alias goldenchart \
-keyalg RSA -keysize 2048 -validity 10000 \
-storepass goldenchart -keypass goldenchart \
-dname "CN=GoldenChart, OU=Mobile, O=GoldenChart, L=Seoul, ST=Seoul, C=KR"
fi
local apksigner
apksigner="${ANDROID_HOME:-$HOME/Library/Android/sdk}/build-tools/35.0.0/apksigner"
if [[ ! -x "$apksigner" ]]; then
apksigner=$(ls -d "${ANDROID_HOME:-$HOME/Library/Android/sdk}"/build-tools/*/apksigner 2>/dev/null | sort -V | tail -1 || true)
fi
if [[ -z "$apksigner" || ! -x "$apksigner" ]]; then
echo "apksigner 없음. Android SDK build-tools 설치 필요." >&2
exit 1
fi
cp "$unsigned" "$signed"
"$apksigner" sign --ks "$keystore" --ks-key-alias goldenchart \
--ks-pass pass:goldenchart --key-pass pass:goldenchart "$signed"
mkdir -p "$(dirname "$LOCAL_APK")"
cp "$signed" "$LOCAL_APK"
log "서명 완료: $LOCAL_APK"
}
if [[ -z "${JAVA_HOME:-}" ]] && [[ -x "$HOME/.local/jdk-21.0.11+10/Contents/Home/bin/java" ]]; then
export JAVA_HOME="$HOME/.local/jdk-21.0.11+10/Contents/Home"
fi
if [[ -z "${JAVA_HOME:-}" ]] && [[ -x "/opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk/Contents/Home/bin/java" ]]; then
export JAVA_HOME="/opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk/Contents/Home"
fi
if [[ -z "${JAVA_HOME:-}" ]] && command -v /usr/libexec/java_home >/dev/null 2>&1; then
JAVA_HOME="$(/usr/libexec/java_home 2>/dev/null || true)"
[[ -n "$JAVA_HOME" ]] && export JAVA_HOME
fi
if [[ -z "${JAVA_HOME:-}" ]]; then
echo "JAVA_HOME 미설정" >&2
exit 1
fi
log "google-services.json 확인"
"$ROOT/scripts/ensure-android-google-services.sh"
if [[ ! -d "$ROOT/node_modules/vite" ]]; then
log "npm ci (root dependencies)"
(cd "$ROOT" && npm ci --ignore-scripts 2>/dev/null || npm install)
fi
log "cap:sync"
(cd "$ROOT/app" && npm run build && bash ../scripts/ensure-android-google-services.sh && npx cap sync)
log "assembleRelease"
(cd "$ROOT/app/android" && ./gradlew assembleRelease --no-daemon)
sign_release_apk
log "완료 $(du -h "$LOCAL_APK" | cut -f1)"