AppBundle 알아보기
AppBundle 알아보기
App Bundle이란 ??
모든 코드 , 리소스 CPU 아키텍처와 메타데이터를 압축한 ZIP파일입니다.
App Bundle을 빌드하면 .aab파일이 생성됩니다.
빌드된 aab 파일을 Play Store에 업로드하면 Play Store가 각 기기에 최적화된 APK 를 빌드합니다.(Dynamic Delivery)
즉 앱을 실행하는데 필요한 코드와 리소스만 다운르도하여 사용합니다(Dynamic Delivery)
App Bundle 구조 살펴보기
App Bundle은 코드(dex) , 라이브러리(lib) , 리소스(res)..등 모든 데이터가 포함되어있습니다.
개발자가 App Bundle 파일을 PlayStore에 업로드 하면 , PlayStore는 미리 aab파일에서
아키텍처, Density, ABI, Locale파일들을 분리하여 apk파일을 만듭니다 .
그리고 설치 요청이 들어오면 사용자의 환경에 맞게 필요한 파일만을 전달하는 것입니다.
Split apk 와 Dynamic delivery 자세히 알아보기
App bundle 로 사용자에게 전달되는 apk파일은 1개 이상이 될 수 있습니다.
코드는 Base apk에 존재하기 때문에 이 apk는 반드시 설치되어야합니다.
그리고 Density, Locale, ABI 별로 리소스를 분리할 수 있으며, Configuration apk들이 생성됩니다.
즉 ,사용자가 앱을 설치할 때 Base apk와 디바이스에 필요한 Configuration apk파일들이 함께 전달됩니다.
- Base APK : 코드( dex)가 포함된 APK
- Density Configuration APK : 특정 Density에 대한 리소스가 포함된 apk
- Locale Configuration APK : 특정 Locale에 대한 리소스가 포함된 apk
- CPU ABI Configuration APK :특정 ABI에 대한 리소스가 포함된 apk
Split apk 는 여러개의 apk로 1개의 앱(Package name이 동일한)을 설치하는 것입니다.
Split apk는 롤리팝 부터 제공되었습니다 .
Split apk는 단순히 어떤 package의 리소스 및 코드를 여러 apk파일들에 분산시키는 기술입니다.
Dynamic delivery는 Split Apk를 이용하여 Locale, ABI, Density에 따라 Base와
Configuration APK를 나누어 설치하는 작업인것입니다.
Dynamic feature
Dynamic feature는 위의 Apk에 추가로 split apk들을 만드는 것을 말합니다.
예를들어 , 이벤트를 위해 한번만 사용되는 코드의 리소스가 매우 커서 앱에 포함시키기 곤란한경우..
APK가 매우크면 사용자는 다운받다가 취소할수도 있고 , 여러환경적요소로 이탈할 수 있습니다.
따라서 일회성 코드를 포함시키는 것이 좋은 생각이 아닐수도 있습니다.
App bundle을 이용하여, 이런 일회성 코드들은 Base apk에서 제외하고, Dynamic feature로 만들어 버릴 수 있습니다.
일회성 코드가 동작되어야 할 때 분리된 Apk를 다운받아 설치한 수 동작시킬 수 있습니다.
이부분은 자세하게 아직 보지못하여
구글 코드랩을 확인하면 Dynamic feature module을 설정하는 튜토리얼을 찾을 수 있습니다.
https://codelabs.developers.google.com/codelabs/your-first-dynamic-app/index.html#5
리소스 분리 설정
Base apk에서 Density, Locale, ABI관련 리소스들을 분리하기 위해서는 아래처럼 설정값을 줄 수 있습니다.
app수준의 build.gradle파일의 android {} 안에 bundle을 작성합니다.
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
App Bundle 생성해보기
android studio에서
Build->Build Bundle(s) /APK(s) -> Build Bundle(s)
위 그림처럼 선택후 빌드해보면
ouput 에 Bundle file .abb가 생성된 것을 볼 수 있습니다.
***
Locale -> 지역의 [언어],[나라]등의 정보
Density ->픽셀밀도(ldpi, mdpi, hdpi, xhdpi,xxhdpi...)
ABI(Application Binary Interface )-> 런타임에 시스템과 앱의 머신코드가 어떻게 상호작용할지를 기술한 인터페이스
(arm64-v8a, x86, x86_64...)