APK -> App Bundle 적용기

송규빈·2023년 5월 4일
0
post-thumbnail
post-custom-banner

AppBundle이란?

App Bundle은 여러 개의 분할된 apk가 각 기기에 따라 혹은 필요에 따라 구성되어 하나의 앱으로 동작을 한다고 보면 된다.

https://blog.kakaocdn.net/dn/dCde7Z/btqTDcUSh15/4dCRGoviPy1kbJPIXKmcUk/img.gif

App Bundle 이점

  • 사용자가 앱을 다운 받을시 앱의 다운로드 크기와 디스크 할당 크기가 감소.
    • 앱 효과 (기기 내 설치된 앱 기준)
      • APK: 74MB → App Bundle: 68MB 약 13% 감소
  • 사용자의 기기 대신 APK에 저장되는 압축되지 않은 기본 라이브러리를 사용하여(Android 6.0 이상) 다운로드 크기, 디스크 할당 크기, 설치 시간 감소.
  • 사용자에게 필요한 기능 및 설정을 설치 중이 아닌 사용자가 요청할 때 제공.
  • 여러 개의 APK를 빌드하고 게시할 필요가 없어 효율적인 빌드 및 출시 관리.

App Bundle 적용 과정

Splits → Bundle

  • App Bundle에서는 splits블록이 사용되지 않고 bundle블록이 사용된다.
  • bundle블록에서는 language, density, abi로 나뉘는데 앱의 형태에 따라 알맞게 커스텀해줘야 한다.
  • 우리 앱에서는 language, density는 false로 설정한다.
    • 다국어 지원을 하지 않으므로 language는 enableSplit = false
    • 이미지 리소스를 해상도별로 관리하지 않고, 피그마에서 3배수의 이미지를 받아와서 xxhdpi로 적용하고 있기 때문에 density는 enableSplit = false
      • 3배수 이미지를 사용하는 이유는 해상도 별로 관리를 해도 기기별로 완벽하게 대응이 되지 않고, 그에 비해 리소스들 크기가 늘어나기 때문에 비효율적이라 판단
splits{
			abi{
				enable true
        universalApk true
        reset()
        include "x86", "x86_64", "arm64-v8a", "armeabi-v7a"
					}
		}
    bundle {
        language {
            // Specifies that the app bundle should not support
            // configuration APKs for language resources. These
            // resources are instead packaged with each base and
            // feature APK.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = false
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }

구글 앱 서명

→ 기존에는 APK 형식으로 배포를 했기 때문에 구글 플레이 콘솔에 앱 서명을 업로드 하지 않고 있었다.

  • AppBundle로 배포하기 위해서는 구글 플레이 콘솔에 앱 서명을 업로드 해야한다.
  • AndroidStudio → Generate Signed Bundle or APK → Android App Bundle → Key store 및 Key alias 적용 → Export encrypted key for enrolling published apps in Google Play App Signing 체크
  • 위 과정으로 추출된 private.pepk를 관리자 계정으로 앱 서명 업로드

카카오 로그인 등 SNS

  • 우리 앱은 카카오, 페이스북 로그인을 사용중이므로 기존에 등록했던 키 해시 이외에 구글 콘솔 내에 있는 앱 서명 인증서로 키 해시를 추출하여 재등록해야한다.
  • Firebase Distribution에 업로드 한 AppBundle을 테스트 시에는 반드시 Firebase Distribution에서 추출한 키 해시를 추가로 등록해야 한다.

Version Code

  • App Bundle로 이전하게 되면 하나의 Version Code로 관리해도 된다.
    • Google Play에서 각 ABI 별로 알아서 관리해주기 때문
  • 주의해야할 점은 기존에 APK 방식으로 업로드 하였던 앱이라면 split 된 버전들 중 제일 높은 버전으로 업로드를 해야한다.
    • 그렇지 않다면… 대참사가 일어난다.
      • 기존 APK가 ABI 별로 split 되면서 arm 64: 115098, 그 외 ABI: 30115098 으로 배포가 되었었는데, 이를 간과하고 APP Bundle 도입 후 115099 로 배포하는 바람에
      • 소수의 일부 사용자(arm 64)들에게만 업데이트 버전이 제공 되어졌었다,, 그래서 version Code를 30200000 변경하여 Hotfix 배포를 통해 해결하였다.

💡 APK 배포 시 ABI 별로 Version Code가 달랐던 이유

Google Play에 동일한 버전의 앱을 추가하는 것을 허용하지 않기 때문에 구글 플레이 콘솔에서 apk 파일을 업로드할 때는 서로 다른 APK에 서로 다른 버전 코드가 있어야한다.
또한, 리소스 파일들을 ABI에 맞게 split하기 위함이다.

배포 방식

  • 기존 APK 방식과 다른 점은 딱히 없으며, Gradle 내에 bundleRelease로 추출한 AAB 파일을 콘솔에 업로드하면 된다.
profile
🚀 상상을 좋아하는 개발자
post-custom-banner

0개의 댓글