|
Android App Bundle의 개념을 소개하고 Dynamic Feature Module을 활용한 하위 호환성 문제 해결 사례를 소개합니다. |
Android App Bundle
개념 및 도입 목적
Android App Bundle(AAB)이란 2018년 Google IO를 통해 처음 소개된 앱 패키지 포맷으로, Device에 탑재되는 앱의 용량을 효율화하기 위해 도입이 되었습니다.
Android App Bundle은 앱의 각 요소들을 모두 개별 APK 로 나누고 설치할 기기에 필요한 APK를 묶음(bundle)으로 전달하는 방식을 사용합니다.
그림 1. Android App Bundle 모듈 전송
그래서 Google Play Store는 2021년 8월부터 시행된 새 정책에서 신규 앱은 Android App Bundle로만 업로드하도록 했습니다.
구성
그림 2. Android App Bundle 구성
- Base Module: 반드시 포함되어야 하는 핵심 기능의 기본 코드와 리소스(필수 설치됨)
- Configuration Module: ABI, Density, Language에 따라 개별 APK 생성(기기의 Configuration에 따라 일부만 설치)
- Dynamic Feature Module: 개발자의 기획 의도, 기술적인 이유로 특정 기능을 분리하여 필요에 따라 선택적으로 설치 및 삭제할 수 있도록 만들어진 모듈(필요시 다운로드하여 설치)
Play Feature Delivery
Google Play Store의 기능 중 하나로, Android App Bundle의 Dynamic Feature Module을 설정된 조건 및 시간에 따라 맞춤 전송해 주는 기능입니다. 모듈 전송 방식은 아래와 같습니다.
- 조건부 전송 방식: 앱 다운로드 시 설정된 조건에 따라 모듈 전송
- 주문형 전송 방식: 앱 실행 도중 필요한 시점에 모듈 전송
- 즉시 전송 방식: APK 설치 없이 모듈 직접 실행
Play Feature Delivery와 별도로 Play Asset Delivery라는 게임 특화 기능으로 게임에 필요한 대용량 asset을 맞춤 전송하는 기능도 제공하고 있습니다.
Watch Face Studio에 Watch Face Format 적용
Watch Face Studio
그림 3. Watch Face Studio
워치 페이스는 사용자가 디바이스를 활용해 자신의 개성을 눈에 띄게 표현하는 방법의 하나입니다. 워치 페이스를 만들어 Wear OS 사용자들에게 자신만의 브랜드를 선보일 수도 있습니다.
Watch Face Studio는 Wear OS를 사용하는 스마트워치 생태계를 위한 워치 페이스용 그래픽 제작 툴입니다. 이 생태계에는 삼성이 개발한 Wear OS 상에서 작동하는 갤럭시 워치4 등의 모델이 포함됩니다. 사용자는 단순하고 직관적인 방식으로 이미지와 구성 요소를 추가하고 워치 무브먼트를 설정할 수 있으며, 연결된 기기에서 워치 페이스를 테스트해 볼 수 있습니다.
Watch Face Format
Watch Face Format은 삼성과 구글이 협력하여 만든 워치 페이스의 모양과 동작을 구성하는 선언적 XML 형식입니다. 즉, 워치 페이스 생성과 관련된 실행 코드가 없으며 페이스 APK에 삽입된 코드가 없습니다. Wear OS 플랫폼은 워치 페이스를 렌더링하는 데 필요한 로직을 처리하므로 개발자는 코드 최적화나 배터리 성능보다는 창의적인 아이디어에 집중할 수 있습니다.
이 새로운 형식으로 빌드된 워치 페이스는 Jetpack 워치 페이스 라이브러리를 사용하여 빌드된 워치 페이스보다 유지관리가 쉽고 업데이트가 적습니다. 예를 들어 성능이나 배터리 소모의 개선 사항을 적용하거나 최신 버그 수정을 받기 위해 워치 페이스를 업데이트할 필요가 없습니다.
하위 호환성 문제
기존 Watch Face Format 적용 이전의 Watch Face 앱은 런타임(code)과 리소스가 합쳐진 형태였지만, Wear OS 4.0에 Watch Face Format이 적용되면서 Watch Face 앱은 리소스만 포함하기로 하고 런타임(code)은 Platform에 prebuilt하는 것으로 결정되었습니다. 이에 따라 리소스로만 이루어진 Watch Face 앱이 Wear OS 3.x에 설치되면 정상적으로 동작할 수 없는 문제가 발생했습니다.
그림 4. 하위 호환성 문제 발생
Android App Bundle의 Dynamic Feature Module 적용을 통한 문제 해결
Dynamic Feature Module과 Play Feature Delivery 기능 활용
- 리소스는 Base Module, 런타임(code)은 Dynamic Feature Module로 설정
그림 5. Android App Bundle의 Dynamic Feature Module 적용
- Dynamic Feature Module 설정
- manifest에
(조건지정 가이드: https://developer.android.com/guide/playcore/feature-delivery/conditional?hl=ko)
- Runtime/AndoridManifest.xml.
(Platform SDK 버전 30 이하에서만 해당 모듈을 다운로드하도록 설정한 예시)
- Runtime/build.gradle에 Dynamic feature 모듈임을 명시
- Base Module 설정
- Base/AndoridManifest.xml
- Base/build.gradle에 사용할 Dynamic feature module을 명시
결과
런타임과 리소스가 각 모듈로 분리되어 설치될 디바이스의 Platform SDK 버전(API level)에 따라 Dynamic feature로 설정된 런타임이 선별적으로 다운로드 처리되는 것을 확인할 수 있었습니다.
그림 6. Play Feature Delivery
그림 7. Play Feature Delivery 결과
이를 통해 Watch Face 제작자의 개발 편의성을 높이고 하나의 AAB로 하위 호환성을 만족하고 다운로드 속도를 향상할 수 있었습니다.
결론
신규 기능을 적용할 때 자주 걸림돌이 되는 문제가 바로 하위 호환성입니다. 하위 호환성 보장은 고객 신뢰에 중대한 영향을 미칩니다. Watch Face Studio에서 생성된 Watch Face 앱에 Watch Face Format을 적용하면서 하위 호환성에 대한 문제가 발생했고, 해결을 위해 여러 방안을 모색해 보았지만 방법을 찾기 쉽지 않았습니다.
하지만 Android App Bundle의 Dynamic Feature Module과 Play Feature Delivery라는 기능을 활용하여 제작자의 개발 편의성을 높이는 동시에 하위 호환성 문제를 해결할 수 있었고, 또 다른 기능들을 활용하여 다양한 문제 해결에 도움을 줄 수 있을 것으로 기대합니다.
|
|
