📌 안드로이드 앱을 출시·운영하다 보면 "지금 이 앱이 어떤 키로 서명됐고, 어디로 배포되는 건지"가 가장 헷갈립니다.
이 페이지는 MotionStitch Lite를 개발·출시·유지보수하며 실제로 겪은 것을 토대로,
빌드 타입 · 서명키 3종 · 배포 채널 3종 · 단계별 워크플로우 · 실전 함정을 정리한 참고 문서입니다.
1. 한눈에 보기
핵심은 세 가지 축이 서로 다른 개념이라는 거예요. 자주 섞여서 헷갈립니다.
빌드 타입 (2종): debug / release — 어떻게 컴파일·서명·최적화하나
서명키 (3종): 디버그 키 / 업로드 키 / Play 앱 서명 키 — 누가 무엇으로 서명하나
배포 채널 (3종): 로컬 설치 / Firebase App Distribution / Google Play — 누구에게 전달되나
가장 중요한 한 줄: 같은 소스코드라도 어느 채널로 배포되느냐에 따라 서명키가 달라지고,
서명키가 다르면 같은 폰에 동시 설치가 안 되고 SHA-1 기반 기능(구글 로그인)이 깨질 수 있어요.
2. 빌드 타입 — debug(.dev) vs release(prod)
항목
debug
release
앱 이름
MotionStitch Dev
MotionStitch
패키지명
...motion_stitch_lite.dev
...motion_stitch_lite
버전 표기
2.7.3-dev
2.7.3
서명
디버그 키 (자동)
업로드 키 (key.properties)
최적화
없음 (디버그·핫리로드)
R8 난독화·축소
만드는 법
flutter build apk --debug
flutter build apk --release
주 용도
개발 기기에서 빠른 테스트
App Tester 배포 + Play 제출
왜 .dev 접미사? 패키지명이 달라서 Dev 앱과 정식 앱을 같은 폰에 동시 설치할 수 있어요.
개발 중인 빌드를 테스트하면서도 실제 앱을 그대로 둘 수 있죠. (이게 dev/prod 분리의 핵심)
3. 서명키 3종 — 가장 헷갈리는 부분
안드로이드는 모든 APK가 키로 서명돼요. 이 프로젝트에는 서로 다른 키 3개가 관여합니다.
키
누가 가짐
무엇을 서명
어디에 쓰임
디버그 키
SDK가 자동 생성 (~/.android/debug.keystore)
debug 빌드(.dev)
flutter run, 개발 기기 테스트
업로드 키
내가 만들어 보관 (키스토어 + 비밀번호)
release 빌드(prod)
Firebase App Distribution 배포 + Play에 업로드할 AAB
Play 앱 서명 키
Google이 보관 (Play App Signing)
최종 사용자 APK
Play 스토어에서 다운로드되는 앱
서명 흐름 — 업로드 키로 올리면 Google이 재서명
내 release 빌드 (업로드 키 서명)→ Play 업로드 →Google Play App Signing 재서명→사용자 다운로드 (Play 앱 서명 키)
즉 내가 업로드한 APK의 서명 ≠ 사용자가 받는 APK의 서명이에요. Google이 중간에 자기 키로 다시 서명하기 때문이죠.
그래서 같은 코드라도 Firebase로 받은 빌드(업로드 키)와 Play로 받은 빌드(Play 키)의 서명이 달라요.
⚠️ SHA-1을 3개 다 등록해야 하는 이유 — 구글 로그인(YouTube 업로드)은 앱의 SHA-1 인증서 지문으로 인증해요.
세 배포 경로(디버그 / Firebase=업로드 키 / Play=Play 키)의 SHA-1이 전부 다르기 때문에,
Cloud Console OAuth에 세 SHA-1을 모두 등록해야 어느 경로에서든 로그인이 됩니다.
하나라도 빠지면 그 경로에서 sign_in_failed ... 10 에러가 나요.
(실제 지문 값과 키스토어 위치·비밀번호는 비공개 키관리 노트에 보관 — 공개 금지.)
4. 배포 채널 3종 — App Tester vs Play
채널
빌드/패키지
서명키
대상
특징
로컬 설치 (flutter install)
debug / .dev
디버그 키
내 개발 기기
즉시, 디버깅 가능, 정식 앱과 공존
Firebase App Distribution
release / prod
업로드 키
지정 테스터
Play 출시 전 사전 검증. 실제 출시될 빌드를 그대로 테스트
Google Play
release / prod
Play 앱 서명 키 (업로드 후 재서명)
일반 사용자
심사 후 공개 배포. 자동 업데이트
핵심 차이 — Firebase 빌드 ≈ Play 빌드, 단 서명이 다름:
둘 다 같은 prod 패키지·같은 소스지만, Firebase는 업로드 키, Play는 Play 앱 서명 키로 서명돼요.
패키지명은 같은데 서명이 달라서 → 한 폰에 둘을 동시 설치할 수 없어요(하나 지우고 깔아야 함).
기능·동작은 동일하니, 테스트 목적상으론 사실상 같은 앱입니다.
⚠️ 실전 함정: Firebase App Distribution의 앱은 prod 패키지에 묶여 있어서,
debug(.dev) APK를 올리면 "패키지 불일치"로 거부돼요. App Tester로는 반드시 release(prod) 빌드를 올려야 합니다.
5. 단계별 워크플로우 — 개발 / 출시 / 유지보수
1 개발 단계 (코딩 중)
코드 수정 → flutter build apk --debug → 개발 기기에 MotionStitch Dev(.dev)로 설치
디버그 키 자동 서명. 정식 앱과 공존하므로 부담 없이 반복 테스트
핵심 변화는 Firebase App Distribution(release)로 테스터에게 사전 배포해 실제 기기에서 검증