# 안드로이드 하이브리드 앱 (Capacitor)

Vue `dist` 를 네이티브 WebView로 패키징해 Android 앱으로 빌드합니다.

## 구성
- `capacitor.config.json` — appId `kr.sblog.slimbudget`, appName `Slim Budget`, webDir `dist`
- `android/` — 네이티브 프로젝트(커밋됨, 빌드 산출물은 .gitignore)
- `.env.capacitor` — **앱 전용 환경변수** (`vite build --mode capacitor` 가 로드)
- `src/capacitor.js` — 하드웨어 뒤로가기 → 라우터 back, safe-area 클래스(`is-native`)
- npm 스크립트: `build:app`, `cap:sync`, `cap:android`

## ⚠️ 빌드 전 반드시 설정
**`.env.capacitor` 의 백엔드 절대 URL 을 운영 도메인으로 교체** (앱 안에선 `/api` 상대경로가 안 됨):
```
VITE_API_BASE_URL=https://yourdomain.com/api
```
백엔드는 이미 CORS에 Capacitor 오리진(`https://localhost`, `capacitor://localhost`, `http://localhost`)을 허용합니다. **백엔드는 HTTPS** 여야 합니다(안드로이드 평문 차단).

## 사전 준비 (PC)
- **Android Studio** + Android SDK + **JDK 17**
- 에뮬레이터 또는 실기기(USB 디버깅 on)

## 빌드 & 실행
```bash
# 1) 웹 자산 빌드 + 네이티브로 동기화
npm run cap:sync          # = vite build --mode capacitor && cap sync

# 2) Android Studio 열기 → Run ▶ 으로 에뮬레이터/기기 실행
npm run cap:android       # = cap open android
```
코드 변경 시마다 `npm run cap:sync` 후 Android Studio에서 다시 실행.

## (선택) 아이콘 · 스플래시
```bash
npm i -D @capacitor/assets
# 1024x1024 아이콘을 assets/icon.png 등으로 준비 후
npx capacitor-assets generate --android
```

## 배포 (Play Store)
1. Android Studio → Build → **Generate Signed Bundle/APK** → **Android App Bundle(.aab)**
2. **keystore 생성·보관**(분실 시 업데이트 불가) → 서명
3. **Google Play Console**(계정 1회 $25) → 앱 생성 → `.aab` 업로드 → 심사

## 자주 막히는 부분
- **네트워크 안 됨/빈 화면**: `.env.capacitor` 의 `VITE_API_BASE_URL` 이 실제 HTTPS 백엔드인지, 재빌드(`cap:sync`) 했는지
- **CORS 오류**: 백엔드가 앱 오리진 허용하는지(`CorsConfig`), HTTPS 인지
- **평문 차단**: 백엔드가 http면 안드로이드가 차단 → HTTPS 사용
- **로그인 유지**: 토큰은 WebView `localStorage` 에 저장되어 유지됨(정상)
