feat: Phase 1 mobile tablet — Jenkins APK, PC tab, in-app update
Capacitor 확장으로 git push 시 Mobile Jenkins 빌드, PC 탭 Android/iPad 다운로드, 앱 내 APK 업데이트, iOS TestFlight API 및 Capacitor ios 프로젝트를 추가한다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Executable
+68
@@ -0,0 +1,68 @@
|
||||
#!/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=$(command -v apksigner 2>/dev/null || 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:-}" ]]; then
|
||||
echo "JAVA_HOME 미설정" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "google-services.json 확인"
|
||||
"$ROOT/scripts/ensure-android-google-services.sh"
|
||||
|
||||
log "cap:sync"
|
||||
npm run cap:sync
|
||||
|
||||
log "assembleRelease"
|
||||
(cd "$ROOT/app/android" && ./gradlew assembleRelease --no-daemon)
|
||||
|
||||
sign_release_apk
|
||||
|
||||
log "완료 $(du -h "$LOCAL_APK" | cut -f1)"
|
||||
Reference in New Issue
Block a user