일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 글또
- g 단위테스트
- 병렬프로그래밍
- 병럴프로그래밍
- kotlin강좌
- 안드로이드
- 테스트
- theming
- 디자인패턴
- 스레드
- Kotlin
- 안드로이드스튜디오
- ReactiveProgramming
- 알게되는
- 코루틴
- 코틀린
- Compose
- 책
- 자바
- mockito
- Coroutine
- 회고
- Gradle
- k8s
- 커스텀상태
- android
- 안드로이드강좌
- Rxjava
- 알고리즘
- viewmodel
- Today
- Total
선생님, 개발을 잘하고 싶어요.
[Deploy] Android App Bundle 을 (늦었지만) 알아보자. 본문
사이드 프로젝트가 배포를 앞두고 있습니다. (몇 달째 이 말을 하는지 모르겠지만...) 그래서 이제 배포를 하기 위해서 apk를 신나게 뽑고 있었습니다만
네, 앞으로 Google Play에 apk 배포 말고, App Bundle로 배포하라고 하네요. 한마디로 배포 관점에서 apk 배포는 dprecated 되었습니다.
이에 미루고 미룬 App Bundle을 왜 쓰나 알아보고, 직접 적용해 본 내용을 간단하게 정리합니다.
App Bundle이 뭔데?
결국, 안드로이드 시스템이 앱을 소비하기 위해서는 apk가 필요합니다. App Bundle 자체를 실행할 수 있는 것은 아니죠.
그럼 App Bundle은 뭘까요?
App Bundle을 사용하면 apk 생성과 Signing이 지연된다.
기존에는 개발자가 apk를 직접 빌드하고, Play Store에서 빌드가 완료된 apk를 다운로드하는 형식이었습니다. 각 기기에 따라 필요 없는 리소스들도 모두 포함된 하나의 apk가 나오게 되지요.
하지만 App Bundle을 사용하면 apk 생성이 지연됩니다. 이 말인 즉슨, Play Store를 통해 앱을 다운로드하는 사용자의 기기에 따라 더 최적화된 apk를 제공할 수 있다는 말이 됩니다.
왜 써야 할까?
앱의 크기가 작아진다.
앞서 말한 속성에 의해서, 디바이스 별로 최적화된 apk를 제공할 수 있게 되다보니, 유저는 쓸모없는 리소스를 다운로드하지 않아도 되는 상황이 됩니다. 따라서 앱의 크기가 작아지는 결과로 이어지게 됩니다.
단순 APK를 사용한 업로드가 deprecated 될 것이다.
2021년 8월부터 우리의 구글 형님이 신규 앱은 App Bundle로 배포할 것을 명하였습니다. apk 생성 지연하고 그 사이에 텀이 생겼으니 앞으로도 구글에서 다양한 최적화나 추가 기능을 제공해 줄 것으로 보입니다.
빌드가 쉽다.
참... 처음 안드로이드 개발을 시작할 때, release apk를 뽑는 게 뭐가 그리 어려운지 많이 해맨 기억이 납니다.
apk가 실행이 안될 때, Signature Version과 같이 하위 호환성 때문에 존재하는 친구들 때문에 고생을 했었는데 App Bundle은 그런 거 없습니다.
릴리즈 빌드 시점에 Signing 때문에 조금 까탈 스러울수는 있는데 이 문서를 참조해서 실습 한 번 해놓으면 괜찮습니다.
추가적으로 커맨드라인으로 빌드하시는 게 편하신 분들은 위에 링크를 참조해서 keystore를 만든 이후 다음과 같은 절차를 따라 하시면 됩니다.
build.gradle에 signing 정보를 지정합니다.
android {
...
defaultConfig { ... }
signingConfigs {
release {
// You need to specify either an absolute path or include the
// keystore file in the same directory as the build.gradle file.
storeFile file("my-release-key.jks")
storePassword "password"
keyAlias "my-alias"
keyPassword "password"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
...
}
}
}
그 다음 커맨드 라인으로 빌드합니다.
sh gradlew :app:bundleRelease
근데 테스트는요?
App Bundle은 Play Store에 의해서 apk를 생성합니다. 그리고 안드로이드 디바이스는 앱 다운로드하기 위해선 apk가 반드시 필요합니다.
이게 무엇을 의미할까요? 바로, 테스트를 Play Store를 통해서 해야 한다는 것입니다.
bundle 로부터 apk를 뽑아내는 것을 Play Store가 아닌 스스로 하고 싶다면, bundletool을 알아보실 수 있습니다. (저는 다루지 않습니다 히히)
조금 귀찮네요. 기존에는 그냥 apk 파일 자체를 공유 드라이브에 올리는 식으로 전달했다면 이제는 다릅니다. apk를 Play Store가 생성해야 하니, Play Store에 올려야겠죠.
내부 테스트로 올리는 방법이 제일 깔끔합니다.
테스터 영역에서 자신의 팀원을 지정한 이후에 기존 릴리즈 하는 방식과 똑같이 진행하시면 됩니다.
참고
안드로이드 앱 번들: developer.android.com/platform/technology/app-bundle
안드로이드 앱 Signing: https://developer.android.com/studio/publish/app-signing
'개발 > android 개발' 카테고리의 다른 글
[Android] Custom Font 적용 시 OutOfMemory 발생 및 해결 (0) | 2021.08.26 |
---|---|
[Lifecycle] Activity Lifecycle 각 callback 마다 무슨 작업을 하는 것이 좋을까? (0) | 2021.04.04 |
안드로이드 라이브 데이터 조합해서 사용하기, android livedata 조합하기, combine live data (1) | 2021.01.31 |
Android Custom Dialog 만들기, Fullscreen Dialog 만들기, Transparent Dialog 만들기 (0) | 2021.01.28 |
[안드로이드] AlarmManager 기본 정의, 정리 (0) | 2020.12.30 |