안드로이드 시스템·Compose 용어 사전
빌드AAB · Play 앱 서명 · Dynamic Feature

App Bundle

기기별 APK를 Play가 생성하도록 업로드하는 배포 형식. 2021년부터 필수.

기기별 APK를 Play가 생성하도록 업로드하는 형식. 2021년 8월부터 새 앱은 필수다.

APK 하나로 배포하면

  • 모든 화면 밀도의 이미지 + 모든 ABI 의 네이티브 라이브러리 + 모든 언어
  • 내 기기에 필요 없는 것이 대부분이다
AAB 를 올리면 Play 가 분할 APK 를 만들어 필요한 것만 내려보낸다
  · 밀도  xxhdpi 만
  · ABI   arm64-v8a 만
  · 언어  ko 만
  → 다운로드 크기가 흔히 30~50% 줄어든다

Play 앱 서명

  • 업로드 키 — 내가 보관. AAB 에 서명해 Play 에 올린다 앱 서명 키 Play 가 보관. 실제 배포 APK 에 서명한다

업로드 키를 잃어버려도 재설정할 수 있다 앱 서명 키를 잃으면 그 앱은 영원히 업데이트할 수 없다 — 그래서 Play 가 맡는다

실무 함정

  • Google 로그인 · 지도 · App Links 는 SHA-1/SHA-256 지문을 등록해야 한다
  • 이때 넣어야 하는 것은 'Play 앱 서명 키' 지문이다 (업로드 키가 아니다)
  • Play Console → 설정 → 앱 서명 에서 확인한다
  • "내 기기에서는 되는데 배포하면 로그인이 안 된다" 의 압도적 1위 원인

로컬에서 확인하기

# bundletool 로 실제 내려갈 APK 집합을 만들어 본다
java -jar bundletool.jar build-apks --bundle=app.aab --output=app.apks \
  --connected-device
java -jar bundletool.jar install-apks --apks=app.apks

Dynamic Feature — 필요할 때 내려받는다

val request = SplitInstallRequest.newBuilder().addModule("premium").build()
splitInstallManager.startInstall(request)

설치 시점에 없던 모듈을 나중에 내려받는다

  • 초기 설치 크기를 줄인다
  • 일부 사용자만 쓰는 무거운 기능(AR · 편집기) 에 적합

대가

  • 설치 실패·오프라인 경로를 전부 다뤄야 한다
  • 클래스 로딩과 리소스 접근이 까다로워진다
  • 정말 큰 기능에만 쓴다

면접 함정

  • "AAB를 기기에 바로 설치할 수 있다" → 설치 가능한 형식이 아니다. bundletool로 APK를 만들어야 한다.
  • "AAB를 쓰면 앱 용량이 줄어든다" → 다운로드/설치 크기가 줄어든다. 코드량 자체는 그대로다.

무엇이 어떻게 쪼개지나

  • base.apk — 공통 코드와 리소스
  • split_config.ko.apk — 한국어 문자열
  • split_config.xxhdpi.apk — xxhdpi 이미지
  • split_config.arm64_v8a.apk arm64 네이티브 라이브러리

기기가 필요한 조합만 설치된다 사용자가 시스템 언어를 바꾸면 Play 가 해당 언어 split 을 추가로 내려받는다

// 언어 split 을 앱에서 요청해야 하는 경우도 있다
SplitInstallManagerFactory.create(ctx).deferredLanguageInstall(listOf(Locale("ja")))

// 테스트 중 split 이 없어 리소스가 안 나오는 문제를 잡으려면
SplitCompat.installActivity(this)

크기를 실제로 확인한다

Play Console → 앱 번들 탐색기 → 기기별 다운로드 크기

  • "실제 기기가 받는 크기" 를 기기 구성별로 보여 준다

Android Studio 의 Analyze APK 는 base.apk 만 본다 — 전체 그림이 아니다

150MB 한도

압축 다운로드 크기 200MB (2021 이후 상향) 를 넘으면 업로드가 거부된다 넘는 경우

  • Play Asset Delivery (게임 에셋)
  • Dynamic Feature 로 분리
  • 리소스·모델 파일을 서버에서 내려받는다

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 빌드 — Gradle·빌드 변형·R8/난독화·App Bundle