일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- activity
- Hilt
- TEST
- Gradle
- Rxjava
- androidStudio
- 암호학
- Coroutines
- MyVoca
- Codeforces
- ProGuard
- relay
- Python
- 코루틴
- 백준
- Kotlin
- architecture
- livedata
- GitHub
- 프로그래머스
- android
- Compose
- Coroutine
- 쿠링
- MiTweet
- boj
- AWS
- textfield
- pandas
- 코드포스
- 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 |