AX 노트 · 실측 사례

AI가 만든 Android 앱, 출시 전에 무엇을 검사하나: 릴리스 게이트와 R8 크래시

AI 코딩 에이전트가 만든 Android 앱은 디버그에서 잘 돌아도 출시용 빌드에서 죽을 수 있어, 업로드 전에 세 단계 검사를 거칩니다.

작성 SugarMount 검증과 출시 읽는 시간 5분 최종 업데이트

SugarMount의 첫 앱 사진 용량 줄이기는 2026년 9월 23일, 코드 축소 도구 R8이 생성자 하나를 지우는 바람에 모든 릴리스 빌드가 시작 직후 죽었습니다. 그 뒤로 업로드 전에 세 단계를 거칩니다. 릴리스 게이트, 축소된 릴리스 빌드 실행 검사, 실기기 E2E입니다.

스크립트와 숫자는 SugarMount 앱 저장소(sugar-utils)의 코드, 변경 기록, 실기기 QA 보고서에서 가져왔습니다. 기준일은 2026년 10월 18일입니다.

목차 (6)
  1. 디버그에서는 멀쩡했는데 왜 죽었나요?
  2. 1단계: 릴리스 게이트가 막는 실수
  3. 2단계: 축소된 릴리스 빌드를 두 번 실행하기
  4. 3단계: 실기기 E2E에서 나온 결함
  5. AI에게 검사를 맡길 때 주의할 점
  6. 자주 묻는 질문

디버그에서는 멀쩡했는데 왜 죽었나요?

디버그 빌드는 코드를 줄이지 않고, 출시용 빌드는 R8로 쓰지 않는 코드를 지웁니다. 그래서 단위 테스트와 디버그 빌드가 모두 통과해도 출시용 빌드에서만 생기는 문제가 있습니다.

-keep class * extends androidx.room.RoomDatabase { <init>(); }

1단계: 릴리스 게이트가 막는 실수

release_gate.sh <앱> 하나로 아래를 순서대로 검사하고, 하나라도 걸리면 AAB를 만들지 않습니다.

검사막는 실수
설정 파일에 PLACEHOLDER가 남았는지새 앱을 찍어 낸 뒤 ID를 안 채운 채 출시
AdMob 테스트 ID가 남았는지출시 앱에 테스트 광고(수익 0)
Firebase 설정 파일이 있는지통계·크래시 보고가 빠진 출시
개인정보처리방침·지원 URL이 HTTP 200인지앱 설정 화면이나 스토어의 방침 링크가 404 (정책 문제)
게이트 규칙 자체의 테스트검사 코드가 고장 나서 아무것도 안 막는 상황
릴리스 설정 검사, 릴리스 단위 테스트, lint, AAB 빌드릴리스 구성에서만 생기는 설정·번역 누락

광고가 없는 한글뷰어 슈가독은 반대로 검사합니다. 릴리스 의존성에 광고 SDK가 들어오거나 광고 ID 권한이 병합되면 빌드가 실패합니다.

2단계: 축소된 릴리스 빌드를 두 번 실행하기

release_launch.sh <앱> <기기>는 R8로 줄인 릴리스 APK를 설치하고, 앱을 강제 종료한 뒤 콜드 스타트를 두 번 합니다. 실행마다 그 시각 이후의 크래시 로그에서 이 앱 패키지의 줄만 세고, 프로세스가 살아 있는지 확인합니다.

3단계: 실기기 E2E에서 나온 결함

2026년 10월 4일, 세 사진 앱을 Galaxy S21(Android 15)에서 시나리오별로 확인한 결과입니다.

앱통과 / 실패 / 건너뜀
사진 용량 줄이기24 / 2 / 2
사진 반전·회전25 / 4 / 1
이미지 변환22 / 3 / 2

크래시나 원본 손상은 없었고, 세 앱 모두 축소된 릴리스 빌드가 두 번 모두 정상 실행됐습니다. 대신 major 결함 9건이 나왔습니다. 원인으로 묶으면 5종류였고, 가장 큰 것은 세 앱에 공통인 "작업 중 시스템이 앱을 종료하면 처리 화면이 0 / 0에서 멈추는" 문제였습니다. 에뮬레이터와 단위 테스트로는 드러나지 않던 결함입니다.

이 E2E는 세 앱을 프로덕션 심사에 넣은 뒤에 돌렸습니다. 순서가 틀렸습니다. 지금은 심사 제출 전에 E2E를 하고, 결함을 고친 뒤 단위 테스트 410개, lint, 세 앱 릴리스 게이트를 다시 통과시켜 출시했습니다.

세 단계 그림: 릴리스 게이트, 축소된 릴리스 빌드 두 번 실행, 실기기 E2E(Galaxy S21에서 major 결함 9건).
업로드 전에 거치는 세 단계 검사입니다. 마지막 실기기 E2E에서 major 결함 9건이 나왔습니다.

AI에게 검사를 맡길 때 주의할 점

자주 묻는 질문

R8 문제를 미리 알 방법이 있나요?

가장 확실한 방법은 출시용과 같은 설정으로 축소한 빌드를 기기에서 실제로 실행하는 것입니다. 디버그 빌드나 단위 테스트는 축소를 거치지 않기 때문에, 보존 규칙이 빠진 문제를 잡지 못합니다.

에뮬레이터만으로 충분한가요?

충분하지 않았습니다. 프로세스 종료 후 상태 유실, 사진 선택기가 넘기는 파일 이름 때문에 "원본 이름 유지"가 안 되는 문제 같은 결함은 실기기 E2E에서 나왔습니다. 에뮬레이터는 빠른 확인용으로 쓰고, 출시 전에는 실기기에서 확인합니다.

게이트 스크립트를 공개하나요?

저장소는 비공개입니다. 이 글의 표가 모든 앱에 공통인 검사 항목 전체이므로, 같은 순서로 직접 만들 수 있습니다. 한글뷰어에는 문서 엔진 파일과 글꼴을 고정된 원본과 대조하는 검사가 더 붙습니다.

이 글은 SugarMount가 직접 측정한 값으로 쓰고, 초안 작성에 AI 코딩 에이전트를 썼습니다.

검증과 출시 글 전체 보기 · AX 노트 전체 보기