일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- architecture
- activity
- livedata
- Coroutine
- MyVoca
- ProGuard
- Coroutines
- Kotlin
- GitHub
- 코루틴
- pandas
- TEST
- Compose
- 쿠링
- android
- MiTweet
- 백준
- 프로그래머스
- Gradle
- 코드포스
- Hilt
- Python
- androidStudio
- Codeforces
- boj
- AWS
- 암호학
- textfield
- Rxjava
- relay
- Today
- Total
이동식 저장소
[Android] AAB 더 알아보기 본문
AAB의 구조는 다음과 같다.

Base Module은 일반적인 모든 모듈을 포함하고, Dynamic Feature 모듈은 Google Play에 의해 동적으로 제공되는 모듈이다. 실제 앱 코드는 각 모듈의 root/
에 저장돼 있다. Google Play가 APK를 만들 때 각 모듈의 root/
를 합쳐 새로운 root
를 만든다.
이 글에서 일반적인 모듈은 feature module이 아닌 모듈, 그러니까 모든 사용자에게 공통으로 배포되는 모듈을 의미한다. 사실 나는 feature module을 작성해 본 적이 없다.
Asset Pack은 게임 등에서 사용되는 리소스를 묶은 것이다. 게임 리소스는 특성상 용량이 매우 클 수 있기 때문에, 앱을 설치할 때 함께 다운로드하지 않고 리소스가 필요한 경우에(on-demand) 다운로드할 수도 있다. 관심 있는 사람들은 Play Asset Delivery Overview 문서를 읽어 보자.
그 외에도 Bundle Metadata, Module Protocol Buffer(*.pb
) 파일 등이 포함되어 있다.
Split APK
AAB에서 필요한 부분만을 취하여 기기별 APK를 만든다고 했다. 편의상 APK를 만든다고 표현했지만, 정확히는 기기의 설정에 따라 여러 개의 split APK를 설치하는 과정이라 말할 수 있다.
Split APK는 일반적인 APK와 매우 유사하게 DEX 바이트코드, 리소스, manifest 파일을 담고 있다. 놀랍게도 Android는 여러 개의 split APK를 하나의 앱으로 인식할 수 있다. 그러니까 기본 APK, 기능 1 APK, 기능 2 APK, 언어 APK를 하나의 앱처럼 사용할 수 있다는 말이다.
Split APK 기법을 적용하면 기기에 코드와 리소스만 설치할 수 있으며, 필요하다면 APK를 더 설치할 수도 있다. AAB를 통한 앱 경량화에 필수적인 기능이라 할 수 있다. Android 5.0(API 21)부터 지원된다.
Split APK 기법에서는 APK를 다음의 세 가지로 분류한다.
Base APK
앱의 핵심 기능을 제공하는 APK로, feature module이 아닌 모든 모듈의 코드와 리소스가 담겨 있다. Play Store에서 앱을 설치할 때 base APK가 맨 처음 설치된다. 앱의 service, content provider, 권한 등의 정보가 모두 base APK의 manifest 파일에 담겨 있기 때문이다.
앱을 만들 때 Android Studio가 기본적으로 만들어 주는 app
모듈을 기반으로 하여, feature module이 아닌 모듈의 코드와 리소스가 합쳐져 만들어진다.
Configuration APK
Configuration APK에는 화면 밀도, CPU 아키텍처, 언어에 맞는 라이브러리와 리소스가 담겨 있다. 앱을 다운로드할 때 기기에 맞는 configuration APK만 설치된다.
Configuration APK는 base APK 또는 feature module APK와 함께 설치된다. base 또는 feature module APK가 공통 APK라면, configuration APK는 기기별 맞춤형 APK라고 볼 수 있다.
Android에서 타게팅 리소스를 표현하는 기본 방법(예: drawable-hdpi
)을 따른다면, Google Play가 configuration APK를 알아서 만들 것이다.
Feature module APK
하나의 feature module에 대응하는 APK이다. Base APK처럼 코드와 리소스를 담고 있지만, feature module은 동적으로 제공될 수 있기 때문에 APK를 따로 만들어야 한다. Play Core 라이브러리를 사용하면 필요할 때 feature module을 설치할 수 있다.
Feature module이 3개 있는 앱의 APK 구조는 다음과 같다. Base APK와 Base Configuration APK는 기본으로 설치되고, 필요한 경우 Feature module APK(+ Feature Configuration APK)가 설치될 것이다.

앱이 타겟팅하는 대상이 많아질수록 APK의 종류도 많아지겠지만, 어차피 APK는 Google Play가 알아서 만들어 준다. 우리는 코드(+리소스)만 제대로 작성하면 된다.
언어와 관련하여
위에서 말했듯이 언어마다 서로 다른 configuration APK가 만들어진다. 그런데 Google Play가 APK를 고르는 기준은 기기의 언어이다. 따라서 앱에서 기기와 다른 언어를 사용하려 할 때마다 매번 APK가 설치되는데, Android 9.0(API 28) 이하에서는 configuration APK를 설치할 때 앱이 강제로 종료된다.
앱에서 언어를 자유롭게 바꿀 수 있다면, 차라리 base APK에 모두 포함하는 게 나을 수도 있다. 모든 언어 파일을 base APK에 포함하고 싶다면, build configuration에서 언어 split 기능을 끄면 된다.
'Primary > Android' 카테고리의 다른 글
[Android] 반응형 앱 구현 방법론 (2) (0) | 2022.10.18 |
---|---|
[Android] 반응형 UI 구현 방법론 (0) | 2022.10.17 |
[Android] APK와 AAB (0) | 2022.10.13 |
[Android] Proguard가 사람 잡는다 (0) | 2022.10.01 |
Gson에서 null이 반환될 때 with ProGuard (0) | 2022.09.27 |