이동식 저장소

[Android] AAB 더 알아보기 본문

Primary/Android

[Android] AAB 더 알아보기

해스끼 2022. 10. 14. 12:22

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 기능을 끄면 된다.

Comments