# Android 코드 서명 설정 가이드 ## 1. Android 키스토어 생성 ### 키스토어 파일 생성 ```bash # Android 프로젝트 루트에서 실행 cd android/app mkdir -p keystore # 키스토어 생성 (1회만 실행) keytool -genkey -v -keystore keystore/release.keystore -alias zellyy-finance-key -keyalg RSA -keysize 2048 -validity 10000 # 입력할 정보: # - 키스토어 비밀번호: [안전한 비밀번호] # - 키 비밀번호: [안전한 비밀번호] # - 이름과 조직: Zellyy Finance Team # - 조직 단위: Development # - 도시: Seoul # - 시/도: Seoul # - 국가 코드: KR ``` ### 키스토어 정보 확인 ```bash keytool -list -v -keystore keystore/release.keystore -alias zellyy-finance-key ``` ## 2. Android 빌드 설정 ### key.properties 파일 생성 (로컬 개발용) ```bash # android/key.properties storePassword=your_keystore_password keyPassword=your_key_password keyAlias=zellyy-finance-key storeFile=keystore/release.keystore ``` ### build.gradle 설정 확인 `android/app/build.gradle`에서 릴리즈 서명 설정이 올바른지 확인: ```gradle android { signingConfigs { release { if (project.hasProperty('storeFile')) { storeFile file(project.property('storeFile')) storePassword project.property('storePassword') keyAlias project.property('keyAlias') keyPassword project.property('keyPassword') } } } buildTypes { release { signingConfig signingConfigs.release minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } ``` ## 3. GitHub Secrets 설정 GitHub 리포지토리 Settings > Secrets and variables > Actions에서 다음 시크릿들을 추가: ### Android 관련 시크릿 - `ANDROID_KEYSTORE_BASE64`: 키스토어 파일을 base64로 인코딩한 값 - `ANDROID_KEYSTORE_PASSWORD`: 키스토어 비밀번호 - `ANDROID_KEY_PASSWORD`: 키 비밀번호 - `ANDROID_KEY_ALIAS`: 키 별칭 (zellyy-finance-key) ### 키스토어 파일을 base64로 인코딩하는 방법 ```bash base64 -i android/app/keystore/release.keystore | pbcopy # 결과를 ANDROID_KEYSTORE_BASE64 시크릿에 저장 ``` ### 환경 변수 시크릿 - `VITE_SUPABASE_URL`: Supabase URL - `VITE_SUPABASE_ANON_KEY`: Supabase Anonymous Key - `VITE_CLERK_PUBLISHABLE_KEY`: Clerk Publishable Key - `VITE_SENTRY_DSN`: Sentry DSN ## 4. Google Play Console 설정 ### 서비스 계정 생성 1. Google Cloud Console에서 프로젝트 생성/선택 2. APIs & Services > Credentials에서 서비스 계정 생성 3. 서비스 계정 키(JSON) 다운로드 4. Google Play Console에서 서비스 계정에 앱 권한 부여 ### GitHub 시크릿 추가 - `GOOGLE_PLAY_SERVICE_ACCOUNT_JSON`: 서비스 계정 JSON 파일 내용 ## 5. 빌드 테스트 ### 로컬 릴리즈 빌드 테스트 ```bash # 웹 앱 빌드 npm run build:prod # Capacitor 동기화 npm run mobile:sync # Android 릴리즈 번들 빌드 cd android ./gradlew bundleRelease # 생성된 파일 확인 ls -la app/build/outputs/bundle/release/ ``` ### APK 빌드 테스트 ```bash cd android ./gradlew assembleRelease # 생성된 파일 확인 ls -la app/build/outputs/apk/release/ ``` ## 6. 보안 고려사항 ### 키스토어 관리 - 키스토어 파일은 절대 git에 커밋하지 않음 - `.gitignore`에 `*.keystore`, `key.properties` 추가 - 키스토어 백업을 안전한 곳에 보관 - 비밀번호는 안전한 패스워드 매니저에 저장 ### CI/CD 보안 - GitHub Secrets 사용으로 민감 정보 보호 - 빌드 로그에 비밀번호 노출 방지 - 릴리즈 브랜치에서만 서명된 빌드 생성 ## 7. 문제 해결 ### 일반적인 오류들 - `Could not find keystore`: 키스토어 경로 확인 - `Keystore password incorrect`: 비밀번호 확인 - `Key alias not found`: 별칭 이름 확인 - `Build failed`: Gradle 로그 확인 ### 디버깅 명령어 ```bash # Gradle 빌드 상세 로그 ./gradlew bundleRelease --info --stacktrace # 키스토어 정보 확인 keytool -list -v -keystore keystore/release.keystore ```